买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】安全的密码存储验证方法和装置_深圳英飞拓科技股份有限公司_201711031339.8 

申请/专利权人:深圳英飞拓科技股份有限公司

申请日:2017-10-27

公开(公告)日:2020-09-15

公开(公告)号:CN107911343B

主分类号:H04L29/06(20060101)

分类号:H04L29/06(20060101);H04L9/32(20060101);H04L9/08(20060101);H04L9/06(20060101)

优先权:

专利状态码:有效-授权

法律状态:2020.09.15#授权;2018.05.08#实质审查的生效;2018.04.13#公开

摘要:本发明提供了一种安全的密码存储验证方法和装置,在密码存储时,通过对密码加入Salt,用哈希算法对密码进行加密,再将密码哈希值存储到服务器端;在用户登录服务器进行密码验证时,服务器端生成token,并以token为key,对服务器端存储的密码哈希值和用户登录时密码哈希值进行二次加密后,再进行对比验证。本发明能够提高用户密码在存储和验证的过程中的安全性。

主权项:1.一种安全的密码存储验证方法,其特征在于:它包括密码存储流程和密码验证流程,所述密码存储流程包括:S10、客户端获取用户的用户名及密码;S11、客户端从服务器端获取一个Salt;S12、客户端对用户的密码加Salt;S13、客户端对加Salt后的密码用哈希算法计算得到哈希值密码;S14、客户端将用户名、Salt和哈希值密码存储到服务器端;所述密码验证流程包括:S20、客户端获取服务器端的会话token及与用户的用户名对应存储的Salt,而后对用户的密码加Salt后计算得到哈希值密码,再以token为key,使用hmac_sha256_hex计算得到二次哈希值密码,并将二次哈希值密码发送到服务器端;S30、服务器端接收从客户端发送的用户名和二次哈希值密码,服务器端以与客户端会话的token为key,使用hmac_sha256_hex对存储在服务器端与用户端发送的用户名对应的哈希值密码计算得到二次哈希值密码,将客户端二次哈希值密码与服务器端的二次哈希值密码进行对比验证,并将验证结果反馈至客户端。

全文数据:安全的密码存储验证方法和装置技术领域[0001]本发明涉及网络安全领域,尤其是指一种安全的密码存储验证方法和装置。背景技术[QM2]目前常见的密码存储和登录验证场景中的密码攻击手段,主要有:[0003]字典和暴力破解攻击DictionaryandBruteForceAttacks:[0004]最常见的破解Hash手段就是猜测密码,然后对每一个可能的密码进行Hash,对比需要破解的Hash和猜测的密码Hash值,如果两个值一样,那么之前猜测的密码就是正确的密码明文。猜测密码攻击常用的方式就是字典攻击和暴力攻击。字典攻击是将常用的密码,单词,短语和其他可能用来做密码的字符串放到一个文件中,然后对文件中的每一个词进行Hash,将这些Hash与需要破解的密码Hash比较。这种方式的成功率取决于密码字典的大小以及字典的是否合适。这种攻击方式,对于随机且复杂密码无效。[0005]查表破解LookupTables:[0006]对于特定的hash类型,如果需要破解大量hash的话,查表是一种非常有效而且快速的方式。它的理念就是预先计算pre-compute出密码字典中每一个密码的hash。然后把hash和对应的密码保存在一个表里。这种攻击方式,对于随机且复杂密码无效。[0007]反向查表破解ReverseLookupTables:[0008]这种方式可以让攻击者在未预先计算一个查询表的情况下同时对大量hash进行字典和暴力破解攻击。首先,攻击者会根据获取到的数据库数据制作一个用户名和对应的hash表。然后将常见的字典密码进行hash之后,跟这个表的hash进行对比,就可以知道用哪些用户使用了这个密码。这种攻击方式很有效果,因为通常情况下很多用户都会有使用相同的密码。这种攻击方式,对于随机且复杂密码无效。[0009]彩虹表RainbowTables:[0010]彩虹表中存储的是一个个“散列链”。[0011]假设我们有一个密文散列函数H和密码P。传统的做法是把H⑴的所有输出穷举,查找HX[y]==HP,得出P==X[y]。[0012]而彩虹表中的“散列链”是为了降低传统做法对空间的要求。首先需要定义一个衰减函数R把散列值变换成另一字符串。通过交替运算H函数和R函数,形成交替的密码和散列值链条。例如:假设密码是6个小写字母,散列值为32位长,链条看起来可能是这样的:[0013]aaaaaa-H-281DAF4〇-R-sgfnyd-H-920ECFl〇-R-kiebgt[0014]要生成一个表,我们选择一组随机的初始密码,每一个密码计算一个固定长度K的链,并只存储每一个链的第一个和最后一个密码。第一密码被称为始点,最后一个被称为末点。在上面例举的链中,“aaaaaa”就是始点,“kiebgt”就是末点,其他密码或散列值并不被保存。[0015]假如给定一个散列值h,我们要反运算找到对应的密码),计算出一个链,以对h应用R函数开始,然后H函数,然后R函数,一直继续。如果在该运算过程中的任何点每次应用R后),我们发现该点的值匹配我们生成的表中的一个末点,那么我们就得到了相应的始点,用这个始点来重新计算链。这条链会有很高的几率包含值h,而如果确实包含,链中h前面紧接的值就是我们所寻求的密码P。[0016]例如,如果我们给出的散列值920ECF10,我们将以对其应用R开始计算链:[0017]920ECF10-R-kiebgt[0018]由于kiebgt是我们的末点之一,我们找到始点aaaaaa并开始跟这个链条,直到发现920ECF10:[0019]aaaaaa_H-281DAF40-R-〉sgfnyd-H-920ECF10[0020]因此,密码是“sgfnyd,,。[0021]需要注意的是,这条链并不一定包含散列值h。因为以h开始的链与某一个始点的链条可能会合并。例如,一个散列值FBl〇7E70,我们往下计算它的链条,会得到kiebgt:[0022]FB107E70-R-〉bvtdll-H-0EE80890-R-kiebgt[0023]网络监听:[0024]这不是一种针对密码储存的攻击手段,但却是得到用户密码最有效的手段。把网卡状态设置为“混杂”模式,就可以收到局域内所有主机收发的报文。或者当有路由器的控制权时,就可以通过路由器得到所有经过此路由的数据。如果用户的密码以明文方式发送到服务端做验证,就可以很轻松的得到用户的真实口令。就算是把用户口令HASH再发送到服务端做验证,依然可以得到用户口令的哈希值;然后只需要模仿客户端的行为向服务器发送请求,就能够得到用户的所有权限。[0025]目前,现有的密码存储验证方案就是对用户的密码做一次MD5摘要,然后将得到的“摘要信息”存储到数据库中。每次用户登录时会把用户名和密码明文发送到服务器端,月艮务器端通过用户名从数据库中查询得到密码的“摘要信息”。然后对密码明文做MD5后与数据库中存储的密码的“摘要信息”做比较;如果一致则登录成功,如果不一致则提示密码错误。[0026]通过利用彩虹表,很容易将上述加密方式破解,而且通过网络监听的攻击方式,也很容易且取到密码明文,现有密码的存储和验证方案并不能抵御常规密码攻击手段的攻击;因此需要一种更加安全且容易实现的一种加密处理方式。发明内容[0027]本发明所要解决的技术问题是:为抵御常规密码攻击手段而提供一种更加安全的密码存储验证方法。[0028]为了解决上述技术问题,本发明米用的一种技术方案为:一种安全的密码存储验证方法,它包括密码存储流程和密码验证流程,所述密码存储流程包括:[0029]S10、客户端获取用户的用户名及密码;[0030]S11、客户端从服务器端获取一个Salt;[0031]S12、客户端对用户的密码加Salt;[0032]S13、客户端对加Salt后的密码用哈希算法计算得到哈希值密码;[0033]S14、客户端将用户名、Salt和哈希值密码存储到服务器端;[0034]所述密码验证流程包括:[0035]S20、客户端获取服务器端的会话token及与用尸的用尸名对应存储的Salt,而后对用户的密码加Salt后计算得到哈希值密码,再以token为key,使用hmac_Sha256_heX计算得到二次哈希值密码,并将二次哈希值密码发送到服务器端;[0036]S30、服务器端接收从客户端发送的用户名和二次哈希^密码,服务器端以与客户端会话的token为key,使用hmac_sha256_hex对存储在服务器‘与用户纟而发送用户名对应的哈希值密码计算得到二次哈希值密码,服务器端对客户端二次哈希值密码与服务器端的哈希值密码进行对比验证后反馈验证结果至客户端。[0037]优选地,步骤S20具体包括:[0038]S21、客户端获取用户的用户名和密码;[0039]S22、客户端将用户的用户名发送至服务器端;[0040]S23、服务器端就本次会话生成唯一的token;[0041]S24、服务器端将token与用户存储在服务器端与用户的用户名对应的Salt,一起发送至客户端;[0042]S25、客户端对用户的密码加Salt后计算得到哈希值密码;[0043]S26、客户端将哈希值密码与用户名拼接;[0044]S27、客户端以token为key,使用hmac_sha256_hex计算得到二次哈希值密码;[0045]S28、客户端将二次哈希值密码发送到服务器端。[0046]优选地,步骤S30具体包括:[0047]S31、服务器端接收到客户端发送的用户名和二次哈希值密码;[0048]S32、服务器端通过用户名从服务器端查询用户名对应的哈希值密码;[0049]S33、服务器端将哈希值密码与用户名拼接;[0050]S34、服务器端以本次与客户端会话生成的唯一token为key,使用hmac_sha256_hex对存储在服务器端的哈希值密码计算得到二次哈希值密码;^[0051]S35、服务器端对客户端二次哈希值密码与服务器端的二次哈希值密码进行对比验证;[0052]S36、服务器端将验证结果发送客户端;[0053]如果密码一致,则验证通过;[0054]如果密码不一致,则验证不通过。[0055]优选地,安全的密码存储验证方法,它还包括有密码修改流程,包括:[0056]S41、客户端获取用户的用户名及新密码;[0057]S42、客户端从服务器端获取一个新的Salt;[0058]S43、客户端将用户的新密码加Salt;[0059]S44、客户端通过哈希算法计算得到新的哈希值密码;[0060]S45、客户端将用户名、新的Salt和哈希值密码存储到服务器端。[0061]—种安全的密码存储验证装置,其特征在于:它包括密码存储模块和密码验证模块,其中,密码存储模块包括:^[0062]注册信息获取单元,用于客户端获取用户的用户名及密码,而后转到Salt获取单元;[0063]Salt获取单元,用于客户端从服务器端获取一个Salt,而后转到Salt加入单元.[0064]Salt加入单元,用于客户端对用户的密码加Salt,而后转到客户端加密单元;[0065]客户端加密单元,用于客户端对加Salt后的密码用哈希算法计算得到哈希值密码,而后转到存储单元;[0066]存储单元,用于客户端将用户名、Salt和哈希值密码存储到服务器端;[0067]所述密码验证模块包括:[0068]客户端加密子模块,用于客户端获取服务器端的会话token及与用户的用户名对应存储的Salt,而后对用户的密码加Salt后计算得到哈希值密码,再以token为key,使用hmac_sha256_hex计算得到二次哈希值密码,并将一次哈希值密码发送到服务器端,而后转到服务器端加密验证子模块;[0069]服务器端加密验证子模块,用于服务器端接收从客户端发送的用户名和二次哈希值密码,服务器端以与客户端会话的token为key,使用hmac_sha256_hex对存储在服务器端与用户名对应的哈希值密码计算得到二次哈希值密码,服务器端对客户端二次哈希值密码与服务器端的哈希值密码进行对比验证后反馈验证结果至客户端。[0070]优选地,所述客户端加密子模块包括:[0071]登录信息获取单元,用于客户端获取用户的用户名和密码,而后转到信息发送单元;[0072]信息发送单元,用于客户端将用户的用户名发送至服务器端,而后转到token生成单元;[0073]Token生成单元,用于服务器端就本次会话生成唯一的token,而后转到服务器端发送单元;[0074]服务器端发送单元,用于服务器端将token与用户存储在服务器端与用户的用户名对应的Salt,一起发送至客户端,而后转到验证加密单元;[0075]验证加密单元,用于客户端对用户的密码加Salt后计算得到哈希值密码,而后转到客户端拼接单元;t〇〇76]客户端拼接单元,用于客户端将哈希值密码与用户名拼接,而后转到客户端二次加密单元;[0077]客户端二次加密单元,用于客户端以token为key,使用hmaC_sha256_heX计算得到二次哈希值密码,而后转到密码发送单元;[0078]密码发送单元,用于客户端将二次哈希值密码发送到服务器端。[0079]优选地,服务器端加密验证子模块包括:[0080]服务器端接收单元,用于服务器端接收到客户端发送的用户名和二次哈希值密码,而后转到查询单元;[0081]查询单元,用于服务器端通过用户名从服务器端查询用户名对应的哈希值密码,而后转到服务器端拼接单元;[0082]服务器端拼接单元,服务器端将哈希值密码与用户名拼接,而后转到服务器端二次加密单元;[0083]服务器端二次加密单元,用于服务器端以本次与客户端会话生成的唯一token为key,使用hmac_sha256_hex对存储在服务器端的哈希值密码计算得到二次哈希值密码,而后转到验证单元;[0084]验证单元,用于服务器端对客户端二次哈希值密码与服务器端的二次哈希值密码进行对比验证,而后转到验证结果反馈单元;m[0085]验证结果反馈单元,用于服务器端将验证结果发送客户端;[0086]如果密码一致,则验证通过;[0087]如果密码不一致,则验证不通过。[0088]优选地,安全的密码存储验证装置,它还包括,密码修改模块,包括:[0089]新信息获取单元,用于客户端获取用户的用户名及新密码,而后转到新Salt获取单元;[0090]新Salt获取单元,用于客户端从服务器端获取一个新的Salt,而后转到新Salt加入单元;[0091]新Salt加入单元,用于客户端将用户的新密码加Salt,而后转到新加密单元;[0092]新加密单元,用于客户端通过哈希算法计算得到新的哈希值密码,而后转到新存储单元;[0093]新存储单元,用于客户端将用户名、新的Salt和哈希值密码存储到服务器端。[0094]本发明一种安全的密码存储验证方法和装置,在密码存储时,通过对密码加入Salt,用哈希算法对加Salt后的密码进行加密,再将密码哈希值存储到服务器端,能够增加密码破解的难度,在用户登录服务器进行密码验证时,服务器生成token,并以t〇ken为key,对服务器端存储的密码哈希值和用户登录时密码哈希值进行二次加密后,再进行对比验证,再次增加了密码的安全性,该方案能让用户密码在存储和验证时更加安全。附图说明[0095]下面结合附图详述本发明的具体结构[0096]图1为本发明的密码存储图;[0097]图2为本发明的用户验证图;[0098]图3为本发明的密码修改图。具体实施方式[0099]为详细说明本发明的技术内容、构造特征、所实现目的及效果,以下结合实施方式并配合附图详予说明。[0100]一种安全的密码存储验证方法,它包括密码存储流程和密码验证流程,所述密码存储流程包括:[0101]sio、客户端获取用户的用户名及密码;[0102]S11、客户端从服务器端获取一个Salt;[0103]S12、客户端对用户的密码加Salt;[0104]S13、客户端对加Salt后的密码用哈希算法计算得到哈希值密码;t〇1〇5]S14、客户端将用户名、Salt和哈希值密码存储到服务器端;[0106]所述密码验证流程包括:[0107]S20、客户端获取服务器端的会话token及与用户的用户名对应存储的Salt,而后对用户的密码加Salt后计算得到哈希值密码,再以token为key,使用hmac_sha256_hex计算得到二次哈希值密码,并将二次哈希值密码发送到服务器端;[0108]S30、服务器端接收从客户端发送的用户名和二次哈希值密码,服务器端以与客户端会话的token为key,使用hmac_sha256_hex对存储在服务器端与用户端发送用户名对应的哈希值密码计算得到二次哈希值密码,服务器端对客户端二次哈希值密码与服务器端的哈希值密码进行对比验证后反馈验证结果至客户端。[0109]本发明提供了一种安全的密码存储验证方法,在密码存储时,通过对用户密码加入Salt,用哈希算法对加Salt后的密码进行加密,再将密码哈希值存储到服务器端,因此服务器端存储的密码为加密的密码,并且该加密密码为加入有随机字符串后加密的得到的,能够增加密码破解的难度,在用户登录服务器进行密码验证时,服务器生成token,并以token为key,对服务器端存储的密码哈希值和用户登录时密码哈希值进行二次加密后,再进行对比验证,再次增加了密码的安全性,该方案能让用户密码在存储和验证时更加安全。[0110]实施例一:[0111]优选地,步骤S20具体包括:[0112]S21、客户端获取用户的用户名和密码;[0113]S22、客户端将用户的用户名发送至服务器端;[0114]S23、服务器端就本次会话生成唯一的token;[0115]S24、服务器端将token与用户存储在服务器端与用户的用户名对应的Salt,一起发送至客户端;[0116]S25、客户端对用户的密码加Salt后计算得到哈希值密码;[0117]S26、客户端将哈希值密码与用户名拼接;[0118]S27、客户端以token为key,使用hmac_sha256_hex计算得到二次哈希值密码;[0119]S28、客户端将二次哈希值密码发送到服务器端。[0120]本实施例中,客户端将获取到的用户名和用户密码发送至服务器端,服务器端生成token发送至客户端,token为当次对话有效,客户端与服务器端对话结束就失效,客户端对用户密码拼接用户名后以token为参数,进行了二次加密,二次加密后的密码更难被破解,保证了密码的安全性。[0121]实施例二:[0122]优选地,步骤S30具体包括:[0123]S31、服务器端接收到客户端发送的用户名和二次哈希值密码;[0124]S32、服务器端通过用户名从服务器端查询用户名对应的哈希值密码;[0125]S33、服务器端将哈希值密码与用户名拼接;[0126]S34、服务器端以本次与客户端会话生成的唯一token为key,使用hmac_sha256_hex对存储在服务器端的哈希值密码计算得到二次哈希值密码;[0127]S35、服务器端对客户端二次哈希值密码与服务器端的二次哈希值密码进行对比验证;[0128]S36、服务器端将验证结果发送客户端;[0129]如果密码一致,则验证通过;[0130]如果密码不一致,则验证不通过。[0131]本实施例中:服务器端接收到客户端的二次加密的哈希值密码,存储在服务器的用户密码经过二次加密后与客户端的二次加密的密码进行比对验证,两次加密的密码经过加密后再比对,能够有效地保证密码的安全性,二次加密是以会话token作为key的,只有本次验证有效,提高了密码验证过程的安全性。[0132]实施例三:[0133]优选地,安全的密码存储验证方法,它还包括有密码修改流程,包括:[0134]S41、客户端获取用户的用户名及新密码;[0135]S42、客户端从服务器端获取一个新的Salt;[0136]S43、客户端将用户的新密码加Salt;[0137]S44、客户端通过哈希算法计算得到新的哈希值密码;[0138]S45、客户端将用户名、新的Salt和哈希值密码存储到服务器端。[0139]本实施例中,修改密码时,客户端会获取一个新的Salt,由于Salt是由服务器端随机产生的,不容易泄露,新密码加Salt后经过哈希算法加密后存储到服务器端,更新用户的密码,存储在服务器端的旧密码被覆盖失效。[0140]实施例四[0141]参考图1,用户在注册账号时,输入用户名和密码时,服务器端首先随机产生一个salt,往密码psw中加入salt得到psw_salt,经过哈希算法sha256计算得到哈希值密码p_hash,然后将用户名name,salt,哈希值密码p_hash存储到服务器端。[0142]参考图2,用户在登录时,客户端发送当前用户name,到服务器端查询其salt值,服务器端生成token并与查询得到的用户名对应的salt发送回客户端,客户端将用户密码psw加入salt得到psw_salt,客户端通过哈希算法sha256加密得好哈希值密码p_hash,客户端token为key对p_hash进行hmac_sha256,得到二次加密密码password,客户端将用户名name和password发送到服务器端,服务器端根据name查询其p_hash值,服务器端以token为key,对?_118311值进行111]13_311256,得到二次加密密码口83¥0^1_,客户端将口333¥〇11与passwordJS行比较,得出验证结果。[0143]参考图3,修改密码时,客户端从服务器端获取新的salt,新密码psw加入新salt,得到psw_salt,对psw_salt进行sha256,得到pjiash,将name、新salt、p_hash—起发送到服务器端,服务器更新当前用户的salt、pjiash。[0144]一种安全的密码存储验证装置,其特征在于:它包括密码存储模块和密码验证模块,其中,密码存储模块包括:[0145]注册信息获取单元,用于客户端获取用户的用户名及密码,而后转到Salt获取单元;[0146]Salt获取单元,用于客户端从服务器端获取一个Salt,而后转到Salt加入单元;[0147]Salt加入单元,用于客户端对用户的密码加Salt,而后转到客户端加密单元;[0148]客户端加密单元,用于客户端对加Salt后的密码用哈希算法计算得到哈希值密码,而后转到存储单元;[0149]存储单元,用于客户端将用户名、Salt和哈希值密码存储到服务器端;[0150]所述密码验证模块包括:[0151]客户端加密子模块,用于客户端获取服务器端的会话token及与用户的用户名对应存储的Salt,而后对用户的密码加Salt后计算得到哈希值密码,再以token为key,使用hmaC_Sha256_hex计算得到二次哈希值密码,并将二次哈希值密码发送到服务器端,而后转到服务器端加密验证子模块;[0152]服务器端加密验证子模块,用于服务器端接收从客户端发送的用户名和二次哈希值密码,服务器端以与客户端会话的token为key,使用hmac_sha256_hex对存储在服务器端与用户名对应的哈希值密码计算得到二次哈希值密码,服务器端对客户端二次哈希值密码与服务器端的哈希值密码进行对比验证后反馈验证结果至客户端。[0153]在密码存储时,Salt加入单元通过对用户密码加入Salt,加密单元对加Salt后的密码进行加密,存储单元再将密码哈希值存储到服务器端,比对密码是经过加密后存储的到服务器的,降低了密码的被窃取的风险,在用户登录服务器进行密码验证时,服务器生成token,并以token为key,对服务器端存储的密码哈希值和用户登录时密码哈希值进行二次加密后,再进行对比验证,由于token只在本次验证有效,再次增加了密码验证过程的安全性,该方案能让用户密码在存储和验证时更加安全。[0154]实施例五:[0155]优选地,所述客户端加密子模块包括:[0156]登录信息获取单元,用于客户端获取用户的用户名和密码,而后转到信息发送单元;[0157]信息发送单元,用于客户端将用户的用户名发送至服务器端,而后转到token生成单元;[0158]Token生成单元,用于服务器端就本次会话生成唯一的token,而后转到服务器端发送单元;[0159]服务器端发送单元,用于服务器端将token与用户存储在服务器端与用户的用户名对应的Salt,一起发送至客户端,而后转到验证加密单元;[0160]验证加密单元,用于客户端对用户的密码加Salt后计算得到哈希值密码,而后转到客户端拼接单元;[0161]客户端拼接单元,用于客户端将哈希值密码与用户名拼接,而后转到客户端二次加密单元;[0162]客户端二次加密单元,用于客户端以token为key,使用hmac_sha256_hex计算得到二次哈希值密码,而后转到密码发送单元;[0163]密码发送单元,用于客户端将二次哈希值密码发送到服务器端。[0164]本实施例中,客户端将获取到的用户名和用户密码发送至服务器端,服务器端的token生成单元生成token,服务器端发送单兀将token发送至客户端,客户端的二次加密单元对用户密码进行了二次加密,二次加密后的密码更难被破解,保证了密码的安全性。[0165]实施例六:[0166]优选地,服务器端加密验证子模块包括:[0167]服务器端接收单元,用于服务器端接收到客户端发送的用户名和二次哈希值密码,而后转到查询单元;[0168]查询单元,用于服务器端通过用户名从服务器端查询用户名对应的哈希值密码,而后转到服务器端拼接单元;[0169]服务器端拼接单元,服务器端将哈希值密码与用户名拼接,而后转到服务器端二次加密单元;[0170]服务器端二次加密单元,用于服务器端以本次与客户端会话生成的唯一token为key,使用hmac_sha256_hex对存储在服务器端的哈希值密码计算得到二次哈希值密码,而后转到验证单元;[0171]验证单元,用于服务器端对客户端二次哈希值密码与服务器端的二次哈希值密码进行对比验证,而后转到验证结果反馈单元;[0172]验证结果反馈单元,用于服务器端将验证结果发送客户端;[0173]如果密码一致,则验证通过;[0174]如果密码不一致,则验证不通过。[0175]本实施例中,服务器端二次加密单兀对存储在服务器端的哈希值密码进行二次加密,验证单元将客户端二次加密的哈希值密码与服务器端的二次加密的哈希值密码进行比对验证,将验证结果反馈给客户端,在密码验证时进行了密码的二次加密,能够保证密码的安全性,能够有效抵御常规的密码攻击。[0176]实施例七:[0177]优选地,安全的密码存储验证装置,它还包括,密码修改模块,包括:[0178]新信息获取单元,用于客户端获取用户的用户名及新密码,而后转到新Salt获取单元;[0179]新Salt获取单元,用于客户端从服务器端获取一个新的Salt,而后转到新Salt加入单元;[0180]新Salt加入单元,用于客户端将用户的新密码加Salt,而后转到新加密单元;新加密单元,用于客户端通过哈希算法计算得到新的哈希值密码,而后转到新存储单元;[0182]新存储单元,用于客户端将用户名、新的Salt和哈希值密码存储到服务器端。[0183]本实施例中,修改密码时,客户端的信息获取单元会获取一个新的salt,Salt为服务器端随机产生,不容易泄露,新密码加Salt后经过加密单元加密后存储到服务器端,更新用户的密码,存储在服务器端的旧的Salt和密码失效。[0184]综上所述:本发明一种安全的密码存储验证方法和装置,在密码存储时,通过对用户密码加入Salt,用哈希算法对密码进行加密,再将密码哈希值存储到服务器端,salt为随机产生,不容易泄露,能够增加密码破解的难度,在用户登录服务器进行密码验证时,服务器生成token,并以token为key,对服务器端存储的密码哈希值和用户登录时密码哈希值进行二次加密后,再进行对比验证,每次验证完成后,token会失效,提高了密码验证过程的安全性;在修改密码时,服务器会重新生成新的Salt,与新的密码进行加密,旧的Salt失效,保证了密码的安全性,使密码在存储和验证的过程中更加安全。[0185]以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

权利要求:1.一种安全的密码存储验证方法,其特征在于:它包括密码存储流程和密码验证流程,所述密码存储流程包括:510、客户端获取用户的用户名及密码;511、客户端从服务器端获取一个Salt;512、客户端对用户的密码加Salt;513、客户端对加Salt后的密码用哈希算法计算得到哈希值密码;514、客户端将用户名、Salt和哈希值密码存储到服务器端;所述密码验证流程包括:520、客户端获取服务器端的会话token及与用户的用户名对应存储的Salt,而后对用户的密码加Salt后计算得到哈希值密码,再以token为key,使用hmac_sha256_hex计算得到二次哈希值密码,并将二次哈希值密码发送到服务器端;530、服务器端接收从客户端发送的用户名和二次哈希值密码,服务器端以与客户端会话的token为key,使用hmac_sha256_hex对存储在服务器端与用户端发送用户名对应的哈希值密码计算得到二次哈希值密码,服务器端对客户端二次哈希值密码与服务器端的哈希值密码进行对比验证后反馈验证结果至客户端。2.如权利要求1所述的安全的密码存储验证方法,其特征在于:步骤S20具体包括:521、客户端获取用户的用户名和密码;522、客户端将用户的用户名发送至服务器端;523、服务器端就本次会话生成唯一的token;524、服务器端将token与用户存储在服务器端与用户的用户名对应的Salt,一起发送至客户端;525、客户端对用户的密码加Salt后计算得到哈希值密码;526、客户端将哈希值密码与用户名拼接;527、客户端以token为key,使用hmac_sha256_hex计算得到二次哈希值密码;528、客户端将二次哈希值密码发送到服务器端。3.如权利要求2所述的安全的密码存储验证方法,其特征在于:步骤S30具体包括:531、服务器端接收到客户端发送的用户名和二次哈希值密码;532、服务器端通过用户名从服务器端查询用户名对应的哈希值密码;533、服务器端将哈希值密码与用户名拼接;534、服务器端以本次与客户端会话生成的唯一token为key,使用hmac_sha256_hex对存储在服务器端的哈希值密码计算得到二次哈希值密码;535、服务器端对客户端二次哈希值密码与服务器端的二次哈希值密码进行对比验证;536、服务器端将验证结果发送客户端;如果密码一致,则验证通过;如果密码不一致,则验证不通过。4.如权利要求1所述的安全的密码存储验证方法,其特征在于:它还包括有密码修改流程,包括:S41、客户端获取用户的用户名及新密码;542、客户端从服务器端获取一个新的Salt;543、客户端将用户的新密码加Salt;544、客户端通过哈希算法计算得到新的哈希值密码;545、客户端将用户名、新的Salt和哈希值密码存储到服务器端。5.—种安全的密码存储验证装置,其特征在于:它包括密码存储模块和密码验证模块,其中,密码存储模块包括:注册信息获取单元,用于客户端获取用户的用户名及密码,而后转到Salt获取单元;Salt获取单元,用于客户端从服务器端获取一个Salt,而后转到Salt加入单元;Salt加入单元,用于客户端对用户的密码加Salt,而后转到客户端加密单元;客户端加密单元,用于客户端对加Salt后的密码用哈希算法计算得到哈希值密码,而后转到存储单元;存储单元,用于客户端将用户名、Salt和哈希值密码存储到服务器端;所述密码验证模块包括:客户端加密子模块,用于客户端获取服务器端的会话token及与用户的用户名对应存储的Salt,而后对用户的密码加Salt后计算得到哈希值密码,再以token为key,使用hmac_sha256_hex计算得到二次哈希值密码,并将二次哈希值密码发送到服务器端,而后转到服务器端加密验证子模块;服务器端加密验证子模块,用于服务器端接收从客户端发送的用户名和二次哈希值密码,服务器端以与客户端会话的token为key,使用hmaC_Sha256_hex对存储在服务器端与用户名对应的哈希值密码计算得到二次哈希值密码,服务器端对客户端二次哈希值密码与服务器端的哈希值密码进行对比验证后反馈验证结果至客户端。6.如权利要求5所述的安全的密码存储验证装置,其特征在于:所述客户端加密子模块包括:登录信息获取单元,用于客户端获取用户的用户名和密码,而后转到信息发送单元;信息发送单元,用于客户端将用户的用户名发送至服务器端,而后转到token生成单元;Token生成单元,用于服务器端就本次会话生成唯一的token,而后转到服务器端发送单元;服务器端发送单元,用于服务器端将token与用户存储在服务器端与用户的用户名对应的Salt,一起发送至客户端,而后转到验证加密单元;验证加密单元,用于客户端对用户的密码加Salt后计算得到哈希值密码,而后转到客户端拼接单兀;客户端拼接单元,用于客户端将哈希值密码与用户名拼接,而后转到客户端二次加密单元;客户端二次加密单元,用于客户端以token为key,使用hmac_Sha256_hex计算得到二次哈希值密码,而后转到密码发送单元;密码发送单元,用于客户端将二次哈希值密码发送到服务器端。7.如权利要求6所述的安全的密码存储验证装置,其特征在于:服务器端加密验证子模块包括:服务器端接收单元,用于服务器端接收到客户端发送的用户名和二次哈希值密码,而后转到查询单元;查询单元,用于服务器端通过用户名从服务器端查询用户名对应的哈希值密码,而后转到服务器端拼接单元;服务器端拼接单元,服务器端将哈希值密码与用户名拼接,而后转到服务器端二次加密单元;服务器端二次加密单元,用于服务器端以本次与客户端会话生成的唯一token为key,使用hmac_sha256_hex对存储在服务器端的哈希值密码计算得到二次哈希值密码,而后转到验证单元;验证单元,用于服务器端对客户端二次哈希值密码与服务器端的二次哈希值密码进行对比验证,而后转到验证结果反馈单元;验证结果反馈单元,用于服务器端将验证结果发送客户端;如果密码一致,则验证通过;如果密码不一致,则验证不通过。8.如权利要求5所述的安全的密码存储验证装置,其特征在于:它还包括,密码修改模块,包括:新信息获取单元,用于客户端获取用户的用户名及新密码,而后转到新Salt获取单元;新Salt获取单元,用于客户端从服务器端获取一个新的Salt,而后转到新Salt加入单元;新Salt加入单元,用于客户端将用户的新密码加Salt,而后转到新加密单元.新加密单元,用于客户端通过哈希算法计算得到新的哈希值密码,而后转到新存储单元;新存储单元,用于客户端将用户名、新的Salt和哈希值密码存储到服务

百度查询: 深圳英飞拓科技股份有限公司 安全的密码存储验证方法和装置

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。