atitit.安全的签名 算法attilax总结
1. MD5 (不推荐)结果是128位二进制,只有转为16进制字符串是32位 1
2. 使用sha1算法加密后的密串长度有40位,相对更安全一些。Sha2安全更高 1
1. MD5 (不推荐)结果是128位二进制,只有转为16进制字符串是32位
并且这是一个不可逆的变换过程,要破解只能穷举,难度很大,理论上8位的密码组合有(26字母+10数字+21常用英文符号)的8次方种可能,以现在比较 好的机器机器要算上一年多。MD5加密后的密串长度有16位和32位两种。不过最近MD5听说被破解了(听说还是被我们的国人破掉的,佩服啊!),能很快 碰撞到密码,不过破解机还没有流传出来。
MD5将任意长度的“字节串”映射为一个128bit的大整数,并且是通过该128bit反推...这种加密技术被广泛的应用于Unix系统中,这也是为什么Unix系统比一般操作系统更为
,MD5结果是128位二进制,只有转为16进制字符串是32位
作者:: 老哇的爪子 Attilax 艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
2. 使用sha1算法加密后的密串长度有40位,相对更安全一些。Sha2安全更高
3、SHA1
SHA全称为Secure Hash Algorithm,又叫安全散列算法。SHA是由美国国家安全局(NSA)所设计,并由美国国家标准与技术研究院(NIST)发布,SHA家族算法有 SHA-1、SHA-224、SHA-256、SHA-384和SHA-512(后四者通常并称SHA2),原理和MD4、MD5相似。SHA可将一个最 大2^64位(2305843009213693952字节)信息,转换成一串160位(20字节)的散列值(摘要信息),是目前应用最广的HASH算 法。同MD5一样,从理论角度,SHA1也不是绝对可靠,目前也已经找到SHA1的碰撞条件,但“实用”的碰撞算法软件还没出现。于是美国NIST又开始 使用SHA2,研究更新的加密算法。
在Microsoft Visual Studio 2005对sha1的使用也很简单,下面是在C#中使用sha1加密字符串的例子:
public string sha1(string str)
{
return System.Web.Security.FormsAuthentication.
HashPasswordForStoringInConfigFile(str, "sha1").ToLower();
}
不过最后还有一个不幸的消息,就是sha1算法已经被破解,国家标准和科技学院(National Institute of Standards and Technology)已经推荐使用sha-256或者sha-512算法
3. CRC32 (一般8位数据)
CRC全称为Cyclic Redundancy Check,又叫循环冗余校验。CRC是目前使用中最老的一种校验算法,它是由W. Wesley Peterson在1961年发表的论文中提出,CRC是种根据网络数据封包或电脑档案等数据产生简短固定位数校验码的一种散列函數(HASH,把任意长 度的输入通过散列算法,最终变换成固定长度的摘要输出,其结果就是散列值,按照HASH算法,HASH具有单向性,不可逆性),主要用来检测或校验数据传 输或者保存后可能出现的错误。生成的数字在传输或者储存之前计算出来并且附加到数据后面,然后接收方进行检验确定数据是否发生变化。一般来说,循环冗余校 验的值都是32位的整数。由于本函数易于用二进制的电脑硬件使用、容易进行数学分析并且尤其善于检测传输通道干扰引起的错误,因此获得广泛应用。
尽管CRC在错误检测中非常有用,但CRC并不能可靠地校验数据完整性,这是因为CRC多项式是线性结构,可以非常容易地通过改变数据方式达到 CRC碰撞,这里给一个更加通俗的解释,假设一串带有CRC校验的代码在传输中,如果连续出现差错,当出错次数达到一定次数时,那么几乎可以肯定会出现一 次碰撞(值不对但CRC结果正确),但随着CRC数据位增加,碰撞几率会显著降低,比如CRC32比CRC16具有更可靠的验证性,CRC64又会比 CRC32更可靠,当然这都是按照ITU规范标准条件下。
正因为CRC具有以上特点,对于网络上传输的文件类很少只使用CRC作为校验依据,文件传输相比通信底层传输风险更大,很容易受到人为干预影响。
补充:虽然目前这几种校验算法都找到了破解条件,但像目前主流使用的MD5、SHA1还是值得信赖的,因为MD5和SHA1都具有高度的离散性,哪怕是只 修改一个字节值都会导致MD5或SHA1值“巨大”变化,从实践角度,不同信息具有相同MD5或SHA1码的可能性非常低,通常认为是不可能的,对于普通 的下载文件或操作系统,想通过简单的修改某个字节或某些字节,又要保证文件名、大小和安装可靠性的前提下,想达到MD5、SHA1碰撞效果也几乎是不可能 的。
现在需要担心什么
MD5 会发生碰撞已经是被发现的了,但是我们需要担心吗,我要说的是,目前为止还不用担心,首先要构造 MD5 碰撞是非常难的,理论上字符串越长 MD5 就越不可能相同,并且借助 SHA-1 算法的帮助,双管齐下,也就没有太大问题了,所以现在 MD5 还没有轮到被弃用的时候。
4. SHA-1 会碰撞吗
SHA-1 也会发生碰撞,但是几率比 MD5 小的多。
怎样解决碰撞
解决碰撞其实可以通过 MD5 和 SHA-1 结合使用来实现。我是这样做的,首先将文件 A 的 MD5 值记为 B 再把 A 的 SHA-1 记为 C,之后用将 B 和 C 相加之后再次运算 MD5 值就好了,MD5 值碰撞的几率已经很小,再结合 SHA-1 的话,基本上就不会发生碰撞的问题出现了。在新的算法普及之前,MD5 还是可以继续使用的。
5. LM-HASH (32个字符)
LanManager(LM)
(1)Windows下LM Hash值生成原理
假设明文口令是“Welcome”,首先全部转换成大写“WELCOME”,再做将口令字符串大写转后后的字符串变换成二进制串: “WELCOME” -> 57454C434F4D4500000000000000
技巧:可以将明文口令复制到UltraEdit编辑器中使用二进制方式查看即可获取口令的二进制串。
说明:如果明文口令经过大写变换后的二进制字符串不足14字节,则需要在其后添加0x00补足14字节。然后切割成两组7字节的数据,分别经str_to_key()函数处理得到两组8字节数据:
57454C434F4D45 -str_to_key()-> 56A25288347A348A
00000000000000 -str_to_key()-> 0000000000000000
这两组8字节数据将做为DESKEY对魔术字符串“KGS!@#$%”进行标准DES加密
"KGS!@#$%" -> 4B47532140232425
56A25288347A348A -对4B47532140232425进行标准DES加密-> C23413A8A1E7665F
0000000000000000 -对4B47532140232425进行标准DES加密-> AAD3B435B51404EE
将加密后的这两组数据简单拼接,就得到了最后的LM Hash
LM Hash: C23413A8A1E7665FAAD3B435B51404EE
6. NT-HASH值为 (32个字符)
。早期SMB协议在网络上传输明文口令。后来出现"LAN Manager Challenge/Response"验证机制,简称LM,它是如此简单以至很容易被破解。微软提出了WindowsNT挑战/响应验证机制,称之为NTLM
Windows下NTLM Hash生成原理
从IBM设计的LM Hash算法存在几个弱点,微软在保持向后兼容性的同时提出了自己的挑战响应机制,NTLM Hash应运而生。假设明文口令是“123456”,首先转换成Unicode字符串,与LM Hash算法不同,这次不需要添加0x00补足14字节
"123456" -> 310032003300340035003600
从ASCII串转换成Unicode串时,使用little-endian序,微软在设计整个SMB协议时就没考虑过big-endian序,ntoh*()、hton*()函数不宜用在SMB报文解码中。0x80之前的标准ASCII码转换成Unicode码,就是简单地从0x??变成0x00??。此类标准ASCII串按little-endian序转换成Unicode串,就是简单地在原有每个字节之后添加0x00。对所获取的Unicode串进行标准MD4单向哈希,无论数据源有多少字节,MD4固定产生128-bit的哈希值,
16字节310032003300340035003600 -进行标准MD4单向哈希-> 32ED87BDB5FDC5E9CBA88547376818D4
就得到了最后的NTLM Hash
NTLM Hash: 32ED87BDB5FDC5E9CBA88547376818D4
与LM Hash算法相比,明文口令大小写敏感,无法根据NTLM Hash判断原始明文口令是否小于8字节,摆脱了魔术字符串"KGS!@#$%"。MD4是真正的单向哈希函数,穷举作为数据源出现的明文,难度较大。
LM只能存储小于等于14个字符的密码hash,如果密码大于14个,windows就自动使用NTLM对其进行加密了,(这个在LC5里有两种破解方式,所以破解不出来的时候可以换种思路,基本是NTLM的)一般情况下使用PwDump或其他一些hash导出工具(如Cain)导出的hash都有对应的LM和NTLM值,也就是说这个密码位数<=14,如果大于14位那么就只有对应的NTLM hash可用了,这时LM也会有值,但对我们来说没用,不能靠他来查LM彩虹表。
操作系统:对于XP、win2k和win2k3来说,系统默认使用LM进行加密(也可人为设置成NTLM),之后的win2008、win7和Vista禁用了LM,默认使用NTLM,所以不要拿着LM生成的rainbow table去找NTLM的hash值,但是反过来却可以,因为使用LM方式的加密往往会存在一个对应的NTLM hash(如果密码位数<=14的话,系统同时对这个密码使用NTLM加密并存储了NTLM的hash),这时候使用ophcrack的NTLM表查找的就是这个NTLM的hash了,而不是LM的hash。
CRC32、MD5、SHA1算法校验介绍 _ 思齐博客.htm
Windows NT_NTLM 加密 - jackywu1010的专栏 - 博客频道 - CSDN.NET.htm