加盐密码哈希:如何正确使用

前端之家收集整理的这篇文章主要介绍了加盐密码哈希:如何正确使用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

<p style="border:0px; margin-top:0px; margin-bottom:20px; padding-top:0px; padding-bottom:0px; font-size:15px; color:rgb(46,46,46); font-family:'Microsoft YaHei',宋体,'Myriad Pro',Lato,'Helvetica Neue',Helvetica,Arial,sans-serif">
如果你是Web开发者,你很可能需要开发一个用户账户系统。这个系统最重要的方面,就是怎样保护用户的密码。存放帐号的数据库经常成为入侵的目标,所以你必须做点什么来保护密码,以防网站被攻破时发生危险。最好的办法就是对密码进行<span style="border:0px; margin:0px; padding:0px">加盐哈希,这篇文章将介绍它是如何做到这点。


<p style="border:0px; margin-top:0px; margin-bottom:20px; padding-top:0px; padding-bottom:0px; font-size:15px; color:rgb(46,sans-serif">
在对密码进行哈希加密的问题上,人们有许多争论和误解,这大概是由于网络上广泛的误传吧。密码哈希是一件非常简单的事情,但是依然有很多人理解错误了。本文阐述的并不是进行密码哈希唯一正确的方法,但是会告诉你为什么这样是正确的。


<div style="border:0px; margin:0px; padding:0px; font-size:15px; color:rgb(46,sans-serif; background-color:rgb(255,204,204)">
<p style="border:0px; margin-top:0px; margin-bottom:20px; padding-top:0px; padding-bottom:0px">
<span style="border:0px; margin:0px; padding:0px">郑重警告:如果你在试图编写自己的密码哈希代码,<span style="border:0px; margin:0px; padding:0px">赶紧停下来!那太容易搞砸了。即使你受过密码学的高等教育,也应该听从这个警告。这是对所有人说的:<span style="border:0px; margin:0px; padding:0px">不要自己写加密函数!安全存储密码的难题现在已经被解决了,请使用<a target="_blank" title="http://www.openwall.com/phpass/" href="http://www.openwall.com/phpass/" rel="nofollow" style="border:0px; margin:0px; padding:0px; text-decoration:none; color:rgb(0,153,204)">phpass或者本文给出的一些源代码。

  1. 404_1@


函数。它可以将任何大小的数据转化为定长的“指纹”,并且无法被反向计算。另外,即使数据源只改动了一丁点,哈希的结果也会完全不同(参考上面的例子)。这样的特性使得它非常适合用于保存密码,因为我们需要加密后的密码无法被解密,同时也能保证正确校验每个用户的密码。

用户注册和认证的流程是这样的:

    用户注册一个帐号
  1. 数据库中。只要密码被写入磁盘,任何时候都不允许是明文
  2. 用户登录的时候,从数据库取出已经加密的密码,和经过哈希的用户输入进行对比
  3. 用户获得登入授权,否则,会被告知输入了无效的登录信息
  4. 用户尝试登录,以上两步都会重复

用户到底是用户名错了,还是密码错了。只需要给出一个大概的提示,比如“无效的用户名或密码”。这可以防止攻击者在不知道密码的情况下,枚举出有效的用户名

函数和你在数据结构中学到的哈希函数是不同的。比如用于实现哈希表这之类数据结构的哈希函数,它们的目标是快速查找,而不是高安全性。只有函数才能用于保护密码,例如SHA256,SHA512,RipeMD和WHIRLPOOL。

函数,密码就能安全,那么你大错特错了。有太多的办法可以快速地把密码从简单哈希值中恢复出来,但也有很多比较容易实现的技术能使攻击者的效率大大降低。黑客的进步也在激励着这些技术的进步,比如这样一个网站:你可以提交一系列待破解的哈希值,并且在不到1秒的时间内得到了结果。显然,简单哈希加密并不能满足我们对安全性的需求。


密码字典中的每个密码,然后把哈希值和对应的密码储存到一个用于快速查询的数据结构中。一个良好的查表实现可以每秒进行数百次哈希查询,即使表中储存了几十亿个哈希值。

来破解下图中四个SHA256加密的哈希值吧。

方法可以使攻击者同时对多个哈希值发起字典攻击或暴力攻击,而不需要预先计算出一个查询表。

用户名的一对多的表,当然数据需要从某个已经被入侵的数据库获得,然后猜测一系列哈希值并且从表中查找拥有此密码的用户。通常许多用户可能有着相同的密码,因此这种攻击方式也显得尤为有效。

查询表占用的空间更小而牺牲了破解速度。因为它更小,于是我们可以在一定的空间内存储更多的哈希值,从而使攻击更加有效。能够破解任何8位及以下长度MD5值的彩虹表已经了。


用户密码相同,那么他们密码的哈希值也是相同的。我们可以通过“随机化”哈希来阻止这类攻击,于是当相同的密码被哈希两次之后,得到的值就不相同了。

随机”的字符串再进行哈希加密,这个被字符串被称作盐值。如同上面例子所展示的,这使得同一个密码每次都被加密为完全不同的字符串。为了校验密码是否正确,我们需要储存盐值。通常和密码哈希值一起存放在账户数据库中,或者直接存为哈希字符串的一部分。

随机化了哈希值,查表法、反向查表法和彩虹表都不再有效。攻击者无法确知盐值,于是就不能预先计算出一个查询表或者彩虹表。这样每个用户的密码都混入不同的盐值后再进行哈希,因此反向查表法也变得难以实施。

错误

:短盐值和盐值重复


:两次哈希和组合哈希函数


,攻击者通常很容易就能拿到源码(尤其是那些免费或开源的软件)。通过系统中取出的一些密码-哈希值对应关系,很容易反向推导出加密算法。破解组合哈希函数确实需要更多时间,但也只是受了一点可以确知的因素影响。更好的办法是使用一个很难被并行计算出结果的迭代算法,然后增加适当的盐值防止彩虹表攻击。

函数,比如HMAC,也是可以的。但如果只是为了使破解起来更慢,那么先读读下面讲到的密钥扩展。

函数可能带来安全问题,构造哈希函数的组合又可能带来函数间互相影响的问题,它们带来的一丁点好处和这些比起来真是微不足道。显然最好的做法是使用标准的、经过完整测试的算法。


函数将任意大小的数据转化为定长的字符串,因此其中一定有些输入经过哈希计算之后得到了相同的结果。加密哈希函数的设计就是为了使这样的碰撞尽可能难以被发现。随着时间流逝,密码学家发现攻击者越来越容易找到碰撞了,最近的例子就是MD5算法的碰撞已经确定被发现了。

用户密码不同的字符串却和它有着相同的哈希值。然而,即使在MD5这样脆弱的哈希函数中找到碰撞也需要耗费大量的计算,因此这样的碰撞“意外地”在实际中出现的可能性是很低的。于是站在实用性的角度上可以这么说,加盐MD5和加盐SHA256的安全性是一样的。不过可能的话,使用本身更安全的哈希函数总是好的,比如SHA256、SHA512、RipeMD或者WHIRLPOOL的做法:恰当使用哈希加密


来生成。CSPRNG和普通的随机数生成器有很大不同,如C语言中的rand()函数。物如其名,CSPRNG专门被设计成用于加密,它能提供高度随机和无法预测的随机数。我们显然不希望自己的盐值被猜测到,所以一定要使用CSPRNG。下面的表格列出了当前主流编程语言中的CSPRNG方法:

用户的每个密码,盐值都应该是独一无二的。每当有新用户注册或者修改密码,都应该使用新的盐值进行加密。并且这个盐值也应该足够长,使得有足够多的盐值以供加密。一个好的标准的是:盐值至少和哈希函数输出一样长;盐值应该被储存和密码哈希一起储存在账户数据表中。

    生成一个长度足够的盐值
  1. 加密哈希函数进行加密,如SHA256
  2. 数据库中对应此用户的那条记录

    数据库取出用户的密码哈希值和对应盐值
  1. 用户输入的密码,并且使用同样的哈希函数进行加密
  2. 数据库储存的哈希值是否相同,如果相同那么密码正确,反之密码错误

文章最后有几个加盐密码哈希的代码实现,分别使用了PHP、C#、Java和Ruby。

用户的浏览器上操作呢,还是将密码“裸体”传送到服务器再进行加密?

用户的时候,网站收到哈希值和数据库中的值进行比对就可以了。这看起来比只在服务器端加密安全得多,因为至始至终没有将用户的密码明文传输,但实际上不是这样。

用户真正的密码。为了通过服务器认证,用户只需要发送密码的哈希值即可。如果有坏小子获取了这个哈希值,他甚至可以在不知道用户密码的情况通过认证。更进一步,如果他用某种手段入侵了网站的数据库,那么不需要去猜解任何人的密码,就可以随意使用每个人的帐号登录

HTTPS(SSL/TLS)。如果浏览器和服务器之间的连接是不安全的,那么中间人攻击可以修改JavaScript代码删除加密函数,从而获取用户密码。

不支持JavaScript,也有的用户禁用了浏览器的JavaScript功能。为了最好的兼容性,你的程序应该检测JavaScript是否可用,如果答案为否,需要在服务端模拟客户端的加密。

用户的盐值,但是不要这么做。因为这给了坏蛋一个机会,能够在不知道密码的情况下检测用户名是否有效。既然你已经在服务端对密码进行了加盐哈希,那么在客户端把用户名(或邮箱)加上网站特有的字符串(如域名)作为盐值是可行的。

函数

查询表和彩虹表快速破解大量哈希值,但是却不能阻止他们使用字典攻击或暴力攻击。高端的显卡(GPU)和定制的硬件可以每秒进行数十亿次哈希计算,因此这类攻击依然可以很高效。为了降低攻击者的效率,我们可以使用一种叫做的技术。

函数变得很慢,于是即使有着超高性能的GPU或定制硬件,字典攻击和暴力攻击也会慢得让攻击者无法接受。最终的目标是把哈希函数的速度降到足以让攻击者望而却步,但造成的延迟又不至于引起用户的注意。

cpu密集型哈希函数。不要尝试自己发明简单的迭代哈希加密,如果迭代不够多,是可以被高效的硬件快速并行计算出来的,就和普通哈希一样。应该使用标准的算法,比如或者可以找到PBKDF2在PHP上的一种实现。

里包含了PBKDF2的实现。迭代次数应该被设置到足够低,以适应速度较慢的客户端,比如移动设备。同时当客户端不支持JavaScript的时候,服务端应该接手计算。客户端的密钥扩展并不能免除服务端进行哈希加密的职责,你必须对客户端传来的哈希值再次进行哈希加密,就像对付一个普通密码一样。

增加一个,只有知道这个密钥的人才能校验密码。有两种办法可以实现:将哈希值加密,比如使用AES算法;将密钥包含到哈希字符串中,比如使用密钥哈希算法

用户以上)使用这类办法,因为我认为面对如此多的用户是有必要的。

数据库的入侵都是由于,因此不要给攻击者进入本地文件系统的权限(禁止数据库服务访问本地文件系统,如果它有这个功能的话)。这样一来,当你随机生成一个密钥存到通过Web程序无法访问的文件中,然后混入加盐哈希,得到的哈希值就不再那么脆弱了,即便这时数据库遭受了注入攻击。不要把将密钥硬编码到代码里,应该在安装时随机生成。这当然不如独立的硬件系统安全,因为如果Web程序存在SQL注入点,那么可能还存在其他一些问题,比如本地文件包含漏洞(Local File Inclusion),攻击者可以利用它读取本地密钥文件。无论如何,这个措施比没有好。


,还有一个很好的介绍:。除非你了解列表中所有的漏洞,才能尝试编写一个处理敏感数据的Web程序。雇主也有责任保证他所有的开发人员都有资质编写安全的程序。


使用:

使用:

的令牌,它直接关联到用户的账户。然后将这个令牌混入一个重置密码的链接中,发送到用户的电子邮箱。最后当用户点击这个包含有效令牌的链接时,提示他们可以设置新的密码。要确保这个令牌只对一个账户有效,以防攻击者从邮箱获取到令牌后,用来重置其他用户的密码。

构造的,因此在长度扩展攻击面前非常脆弱。就是说如果已经知道一个哈希值H(X),对于任意的字符串Y,攻击者可以计算出H(pad(X) + Y)的值,而不需要知道X是多少,其中pad(X)是哈希函数的填充函数(padding function,比如MD5将数据每512bit分为一组,最后不足的将填充字节)。

函数已经被认为是差劲的实践了。也许某天高明的密码学家会发现一个利用长度扩展攻击的新思路,从而更快地破解密码,所以还是使用HMAC吧。

代码在比较哈希值的时候,都是经过固定的时间才返回结果?

获取密码的哈希值,然后进行本地破解工作。

方法比较“xyzabc”和“abcxyz”,由于第一个字符就不同,不需要检查后面的内容就可以马上返回结果。相反,如果比较“aaaaaaaaaaB”和“aaaaaaaaaaZ”,比较算法就需要遍历最后一位前所有的“a”,然后才能知道它们是不相同的。

用户认证。还假设他已经知道了密码哈希所有的参数(盐值、哈希函数的类型等等),除了密码的哈希值和密码本身(显然啊,否则还破解个什么)。如果攻击者能精确测量在线系统耗时多久去比较他猜测的密码和真实密码,那么他就能使用计时攻击获取密码的哈希值,然后进行离线破解,从而绕过系统对认证频率的限制。

登录,并记录系统返回结果所消耗的时间,耗时最长的那个就是第一字节猜对的那个。接下来用同样的方式猜测第二字节、第三字节等等。直到攻击者获取了最够长的哈希值片段,最后只需在自己的机器上破解即可,完全不受在线系统的限制。

了。因此本文提供的代码才使用固定的时间去比较字符串,不论它们有多相似。

PHP PBKDF2 密码哈希代码

PHP中一种安全的实现,你也可以在找到测试用例和基准测试的代码。

PHP和C#代码,点击

代码

Crayon-586122c7d31dc199933103" class="Crayon-Syntax Crayon-theme-github Crayon-font-monaco Crayon-os-mac print-yes notranslate" style="margin-top:12px; margin-right:0px; margin-left:0px; padding:0px; width:610px; font-family:Monaco,102)!important">
Crayon-tools" style="border:none; margin:0px; padding:0px; position:absolute; right:0px; height:19.5px!important; line-height:19.5px!important">
Crayon-button Crayon-nums-button Crayon-pressed" title="切换是否显示行编号" style="border:none; margin:0px; padding:0px; height:inherit; display:inline; position:relative; width:24px; font-size:inherit!important; line-height:inherit!important; float:left!important">
Crayon-button-icon" style="border:none; margin:-8px 0px 0px; padding:0px; width:24px; position:absolute; left:0px; top:50%; font-size:inherit!important; height:16px!important; line-height:inherit!important">
Crayon-button Crayon-wrap-button" title="切换自动换行" style="border:none; margin:0px; padding:0px; height:inherit; display:inline; position:relative; width:24px; font-size:inherit!important; line-height:inherit!important; float:left!important">
Crayon-button-icon" style="border:none; margin:-8px 0px 0px; padding:0px; width:24px; position:absolute; left:0px; top:50%; font-size:inherit!important; height:16px!important; line-height:inherit!important">
Crayon-button Crayon-expand-button" title="点击展开代码" style="border:none; margin:0px; padding:0px; height:inherit; display:inline; position:relative; width:24px; font-size:inherit!important; line-height:inherit!important; float:left!important">
Crayon-button-icon" style="border:none; margin:-8px 0px 0px; padding:0px; width:24px; position:absolute; left:0px; top:50%; font-size:inherit!important; height:16px!important; line-height:inherit!important">
Crayon-button Crayon-copy-button" title="复制代码" style="border:none; margin:0px; padding:0px; height:inherit; display:inline; position:relative; width:24px; font-size:inherit!important; line-height:inherit!important; float:left!important">
Crayon-button-icon" style="border:none; margin:-8px 0px 0px; padding:0px; width:24px; position:absolute; left:0px; top:50%; font-size:inherit!important; height:16px!important; line-height:inherit!important">
Crayon-button Crayon-popup-button" title="在新窗口中显示代码" style="border:none; margin:0px; padding:0px; height:inherit; display:inline; position:relative; width:24px; font-size:inherit!important; line-height:inherit!important; float:left!important">
Crayon-button-icon" style="border:none; margin:-8px 0px 0px; padding:0px; width:24px; position:absolute; left:0px; top:50%; font-size:inherit!important; height:16px!important; line-height:inherit!important">
Crayon-language" style="border:0px; margin:0px; float:left; height:inherit; padding:0px 8px 0px 4px!important; font-size:80%!important; line-height:inherit!important; color:rgb(102,102)!important">Java
Crayon-plain-wrap" style="border:none; margin:0px!important; padding:0px!important; height:auto!important">
Crayon-main" style="border:none; margin:0px; padding:0px; width:608px; overflow:auto; position:relative; z-index:1">
Crayon-table " style="margin-left:0px; font-size:13px; border:none!important; margin-top:0px!important; margin-right:0px!important; margin-bottom:0px!important; padding:0px!important; border-collapse:collapse!important; border-spacing:0px!important; width:auto!important; table-layout:auto!important">Crayon-row" style="border:none!important; margin:0px!important; padding:0px!important; vertical-align:top!important">
Crayon-nums " style="font-size:13px; text-align:center; border:none!important; margin:0px!important; padding:0px!important; vertical-align:top!important; font-family:Monaco,170)!important"> 117 Crayon-code" style="font-size:13px; text-align:center; width:851px; border:none!important; margin:0px!important; padding:0px!important; vertical-align:top!important; font-family:Monaco,monospace!important">
Crayon-pre" style="margin:0px; padding-right:0px; padding-left:0px; text-align:left; white-space:pre; overflow:visible; border:none!important; padding-top:5px!important; padding-bottom:3px!important; line-height:15px!important">
Crayon-line" id="Crayon-586122c7d31ed444062802-1" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-p" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(184,92,0)!important"># Password Hashing With PBKDF2 (http://crackstation.net/hashing-security.htm).
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-2" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-p" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(184,0)!important"># Copyright (c) 2013,Taylor Hornby
Crayon-line" id="Crayon-586122c7d31ed444062802-3" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-p" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(184,0)!important"># All rights reserved.
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-4" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-p" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(184,0)!important">#
Crayon-line" id="Crayon-586122c7d31ed444062802-5" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-p" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(184,0)!important"># Redistribution and use in source and binary forms,with or without
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-6" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-p" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(184,0)!important"># modification,are permitted provided that the following conditions are met:
Crayon-line" id="Crayon-586122c7d31ed444062802-7" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-p" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(184,0)!important">#
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-8" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-p" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(184,0)!important"># 1. Redistributions of source code must retain the above copyright notice,
Crayon-line" id="Crayon-586122c7d31ed444062802-9" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-p" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(184,0)!important"># this list of conditions and the following disclaimer.
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-10" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-p" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(184,0)!important">#
Crayon-line" id="Crayon-586122c7d31ed444062802-11" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-p" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(184,0)!important"># 2. Redistributions in binary form must reproduce the above copyright notice,
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-12" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-p" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(184,0)!important"># this list of conditions and the following disclaimer in the documentation
Crayon-line" id="Crayon-586122c7d31ed444062802-13" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-p" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(184,0)!important"># and/or other materials provided with the distribution.
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-14" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-p" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(184,0)!important">#
Crayon-line" id="Crayon-586122c7d31ed444062802-15" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-p" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(184,0)!important"># THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &quot;AS IS&quot;
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-16" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-p" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(184,0)!important"># AND ANY EXPRESS OR IMPLIED WARRANTIES,THE
Crayon-line" id="Crayon-586122c7d31ed444062802-17" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-p" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(184,0)!important"># IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-18" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-p" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(184,0)!important"># ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
Crayon-line" id="Crayon-586122c7d31ed444062802-19" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-p" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(184,0)!important"># LIABLE FOR ANY DIRECT,OR
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-20" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-p" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(184,0)!important"># CONSEQUENTIAL DAMAGES (INCLUDING,PROCUREMENT OF
Crayon-line" id="Crayon-586122c7d31ed444062802-21" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-p" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(184,0)!important"># SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,OR PROFITS; OR BUSINESS
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-22" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-p" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(184,0)!important"># INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,WHETHER IN
Crayon-line" id="Crayon-586122c7d31ed444062802-23" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-p" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(184,0)!important"># CONTRACT,OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-24" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-p" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(184,0)!important"># ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,EVEN IF ADVISED OF THE
Crayon-line" id="Crayon-586122c7d31ed444062802-25" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-p" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(184,0)!important"># POSSIBILITY OF SUCH DAMAGE.
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-26" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important">  
Crayon-line" id="Crayon-586122c7d31ed444062802-27" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-v" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,122)!important">requireCrayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,224)!important">&Crayon-p" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(184,0)!important">#039;securerandom&#039;
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-28" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-v" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,0)!important">#039;openssl&#039;
Crayon-line" id="Crayon-586122c7d31ed444062802-29" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-v" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,0)!important">#039;base64&#039;
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-30" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important">  
Crayon-line" id="Crayon-586122c7d31ed444062802-31" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-p" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(184,0)!important"># Salted password hashing with PBKDF2-SHA1.
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-32" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-p" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(184,0)!important"># Authors: @RedragonX (dicesoft.net),havoc AT defuse.ca
Crayon-line" id="Crayon-586122c7d31ed444062802-33" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-p" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(184,0)!important"># www: http://crackstation.net/hashing-security.htm
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-34" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">module Crayon-v" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,122)!important">PasswordHash
Crayon-line" id="Crayon-586122c7d31ed444062802-35" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important">  
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-36" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,224)!important">  Crayon-p" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(184,0)!important"># The following constants can be changed without breaking existing hashes.
Crayon-line" id="Crayon-586122c7d31ed444062802-37" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,153)!important">1000
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-38" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,153)!important">24
Crayon-line" id="Crayon-586122c7d31ed444062802-39" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,153)!important">24
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-40" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important">  
Crayon-line" id="Crayon-586122c7d31ed444062802-41" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,122)!important">HASH_SECTIONSCrayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,153)!important">4
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-42" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,122)!important">SECTION_DELIMITERCrayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,0)!important">#039;:&#039;
Crayon-line" id="Crayon-586122c7d31ed444062802-43" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,122)!important">ITERATIONS_INDEXCrayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,153)!important">1
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-44" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,153)!important">2
Crayon-line" id="Crayon-586122c7d31ed444062802-45" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,122)!important">HASH_INDEXCrayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,153)!important">3
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-46" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important">  
Crayon-line" id="Crayon-586122c7d31ed444062802-47" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,0)!important"># Returns a salted PBKDF2 hash of the password.
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-48" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,224)!important">  Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">def Crayon-r" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; font-weight:bold!important">selfCrayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,51)!important">.Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">createHashCrayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,51)!important">(Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,224)!important"> Crayon-i" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important">passwordCrayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">)
Crayon-line" id="Crayon-586122c7d31ed444062802-49" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,122)!important">SecureRandomCrayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,51)!important">.Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">base64Crayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,122)!important">SALT_BYTECrayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,51)!important">_SIZECrayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">)
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-50" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,122)!important">OpenSSLCrayon-o" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,224)!important">::Crayon-v" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,122)!important">PKCS5Crayon-o" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,224)!important">::Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">pbkdf2_hmac_sha1Crayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,51)!important">(
Crayon-line" id="Crayon-586122c7d31ed444062802-51" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,224)!important">      Crayon-v" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-52" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,
Crayon-line" id="Crayon-586122c7d31ed444062802-53" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-54" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,122)!important">HASH_BYTECrayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,51)!important">_SIZE
Crayon-line" id="Crayon-586122c7d31ed444062802-55" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">)
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-56" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,224)!important">    Crayon-st" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; font-weight:bold!important">returnCrayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">[Crayon-o" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,224)!important">&Crayon-v" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,122)!important">quotCrayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,51)!important">;Crayon-v" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,122)!important">sha1Crayon-o" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">;Crayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,122)!important">Base64Crayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,51)!important">.Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">encode64Crayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,224)!important"> Crayon-i" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important">pbkdf2Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">.Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">joinCrayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,122)!important">SECTIONCrayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,51)!important">_DELIMITERCrayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">)
Crayon-line" id="Crayon-586122c7d31ed444062802-57" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,224)!important">  Crayon-st" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; font-weight:bold!important">end
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-58" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important">  
Crayon-line" id="Crayon-586122c7d31ed444062802-59" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,0)!important"># Checks if a password is correct given a hash of the correct one.
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-60" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,0)!important"># correctHash must be a hash string generated with createHash.
Crayon-line" id="Crayon-586122c7d31ed444062802-61" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">.Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">validatePasswordCrayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,224)!important"> Crayon-i" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important">correctHashCrayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">)
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-62" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,122)!important">paramsCrayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">.Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">splitCrayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,51)!important">)
Crayon-line" id="Crayon-586122c7d31ed444062802-63" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,128)!important">falseCrayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,224)!important"> Crayon-st" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; font-weight:bold!important">ifCrayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,122)!important">paramsCrayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,122)!important">lengthCrayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,224)!important">!=Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,224)!important"> Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">HASH_SECTIONS
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-64" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important">  
Crayon-line" id="Crayon-586122c7d31ed444062802-65" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">    Crayon-v" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">.Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">decode64Crayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,122)!important">HASH_INDEXCrayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,51)!important">)
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-66" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">(
Crayon-line" id="Crayon-586122c7d31ed444062802-67" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-68" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,
Crayon-line" id="Crayon-586122c7d31ed444062802-69" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,122)!important">ITERATIONS_INDEXCrayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,122)!important">to_iCrayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-70" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">.Crayon-i" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important">length
Crayon-line" id="Crayon-586122c7d31ed444062802-71" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">)
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-72" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important">  
Crayon-line" id="Crayon-586122c7d31ed444062802-73" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,224)!important"> Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">testHash
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-74" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">  Crayon-st" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; font-weight:bold!important">end
Crayon-line" id="Crayon-586122c7d31ed444062802-75" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important">  
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-76" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,0)!important"># Run tests to ensure the module is functioning properly.
Crayon-line" id="Crayon-586122c7d31ed444062802-77" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,0)!important"># Returns true if all tests succeed,false if not.
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-78" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">.Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">runSelfTests
Crayon-line" id="Crayon-586122c7d31ed444062802-79" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">    Crayon-v" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,122)!important">putsCrayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">;Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">Sample Crayon-v" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,122)!important">hashesCrayon-o" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,224)!important">:Crayon-o" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">;
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-80" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,224)!important">    Crayon-cn" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,153)!important">3.timesCrayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,224)!important"> Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">puts Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">createHashCrayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,122)!important">passwordCrayon-o" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">}
Crayon-line" id="Crayon-586122c7d31ed444062802-81" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important">  
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-82" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">\Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">nRunning Crayon-r" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; font-weight:bold!important">selfCrayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,122)!important">testsCrayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,51)!important">.Crayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,51)!important">;
Crayon-line" id="Crayon-586122c7d31ed444062802-83" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">@Crayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,51)!important">@Crayon-v" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,122)!important">allPassCrayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,128)!important">true
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-84" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important">  
Crayon-line" id="Crayon-586122c7d31ed444062802-85" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,122)!important">correctPasswordCrayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,0)!important">#039;aaaaaaaaaa&#039;
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-86" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,122)!important">wrongPasswordCrayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,0)!important">#039;aaaaaaaaab&#039;
Crayon-line" id="Crayon-586122c7d31ed444062802-87" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,224)!important"> Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">createHashCrayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,122)!important">correctPasswordCrayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,51)!important">)
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-88" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important">  
Crayon-line" id="Crayon-586122c7d31ed444062802-89" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,224)!important">    Crayon-st" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; font-weight:bold!important">assertCrayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,224)!important"> Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">validatePasswordCrayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,224)!important"> Crayon-i" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important">hashCrayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">;Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">correct Crayon-v" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">)
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-90" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,122)!important">wrongPasswordCrayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,51)!important">;Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">wrong Crayon-v" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">)
Crayon-line" id="Crayon-586122c7d31ed444062802-91" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important">  
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-92" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,122)!important">h1Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">)
Crayon-line" id="Crayon-586122c7d31ed444062802-93" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,122)!important">h2Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,224)!important"> Crayon-i" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important">correctPasswordCrayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">)
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-94" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,122)!important">h1Crayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,122)!important">h2Crayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,51)!important">;Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">different Crayon-v" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">)
Crayon-line" id="Crayon-586122c7d31ed444062802-95" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,122)!important">saltCrayon-o" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">)
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-96" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important">  
Crayon-line" id="Crayon-586122c7d31ed444062802-97" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">@Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">allPass
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-98" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">      Crayon-v" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">;Crayon-o" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,224)!important">*Crayon-o" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,224)!important"> Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">ALL Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">TESTS Crayon-e " style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">PASS *Crayon-o" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">;
Crayon-line" id="Crayon-586122c7d31ed444062802-99" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,224)!important">    Crayon-st" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; font-weight:bold!important">else
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-100" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,224)!important"> Crayon-e " style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">FAILURES *Crayon-o" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">;
Crayon-line" id="Crayon-586122c7d31ed444062802-101" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,224)!important">    Crayon-st" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; font-weight:bold!important">end
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-102" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important">  
Crayon-line" id="Crayon-586122c7d31ed444062802-103" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">@Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">allPass
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-104" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">  Crayon-st" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; font-weight:bold!important">end
Crayon-line" id="Crayon-586122c7d31ed444062802-105" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important">  
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-106" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">.Crayon-st" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; font-weight:bold!important">assertCrayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,122)!important">truthCrayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,224)!important"> Crayon-i" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important">msgCrayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">)
Crayon-line" id="Crayon-586122c7d31ed444062802-107" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,224)!important"> Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">truth
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-108" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">      Crayon-v" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">;Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">PASSCrayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">[Crayon-p" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(184,0)!important">#{msg}]&quot;
Crayon-line" id="Crayon-586122c7d31ed444062802-109" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,224)!important">    Crayon-st" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; font-weight:bold!important">else
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-110" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,51)!important">;Crayon-e" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:teal!important">FAILCrayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,0)!important">#{msg}]&quot;
Crayon-line" id="Crayon-586122c7d31ed444062802-111" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,224)!important">      Crayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,128)!important">false
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-112" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,224)!important">    Crayon-st" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; font-weight:bold!important">end
Crayon-line" id="Crayon-586122c7d31ed444062802-113" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-h" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,224)!important">  Crayon-st" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; font-weight:bold!important">end
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-114" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important">  
Crayon-line" id="Crayon-586122c7d31ed444062802-115" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-st" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; font-weight:bold!important">end
Crayon-line Crayon-striped-line" id="Crayon-586122c7d31ed444062802-116" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important">  
Crayon-line" id="Crayon-586122c7d31ed444062802-117" style="border:none; margin:0px; padding:0px 5px; height:inherit; font-size:inherit!important; line-height:inherit!important"> Crayon-v" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(0,122)!important">PasswordHashCrayon-sy" style="border:0px; margin:0px; padding:0px; height:inherit; font-size:inherit!important; line-height:inherit!important; color:rgb(51,122)!important">runSelfTests

文章和代码nofollow" style="border:0px; margin:0px; padding:0px; text-decoration:none; color:rgb(0,204)">Defuse Security编写。

猜你在找的Java相关文章