加密中的MD5、CRC、HASH相关知识及使用
本文于2021年1月30日由AlvinCR更新
文章导引
更新中….
一:MD5
1 基础知识
1.1 定义
MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。
在我打开的实例中给出的是32字节的十六位制数字。
1.2 作用
MD5是一种加密方法,通过MD5可以对密码进行加密,也可以通过给出的这个密码与自己计算出的密码相对比,可以判断出文件是否损坏或是被篡改。
同一个文件md5码恒定不变,只要不更改文件内部数据,即使更改外部信息,md5码也会保持不变。即便是更改内部一个数字,MD5码也会完全的不同,即使文件名一样,md5码也不一样。
1.3 存在的问题
1996年后被证实存在弱点,可以被加以破解,对于需要高度安全性的资料,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞攻击,因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。
2 生成MD5
2.1 较短密码
正如上面所说的MD5被验证无法防止碰撞攻击,这样有希望对MD5码进行破解,如果是采用加密性更强的方法,也许100年后的计算机才能够破解今天的密码。此外这里的破解方法是指对较短的密码进行碰撞破解,如果是像我上图中几十G的文件进行破解,简直是天方夜谭。
2.2 文件MD5码
基本不可能将文件的MD5码还原出原本的文件,但是通过原本文件生成MD5码还是很容易的,例如使用:MD5 checksum 生成工具
Win10命令提示符中使用CertUtil -hashfile也能够生成包括MD5等多种算法的校验码。
加密算法代码:https://www.jianshu.com/p/785e7725d612
二:散列Hash
散列这个概念在计算机任何一个课本中都不会缺少他的身影,散列算法可以用来加密存在数据库中的字符串,而且由于散列算法所计算出来的散列值无法逆推原本的数值,因此可有效的保护密码。
AlvinCR一般将散列看做成一个映射,通过将原有的文件按照特定的算法映射成一个新的数列,从而实现加密、映射、索引的效果。
哈希函数(Hash function)是一种从任何类型的数据中创建小型数字”指纹”的方法。哈希函数将消息或数据压缩为摘要,从而使数据量更小,数据格式固定。该函数混合数据并重新创建一个名为散列值的指纹(哈希值、哈希码、哈希和或散列)。散列值通常由短随机字母和数字组成的字符串表示。好的哈希函数在输入字段中很少有哈希冲突。在哈希表和数据处理中,如果不抑制冲突以区分数据,则更难以找到数据库记录。
精心设计的加密哈希函数是一种”单向”操作:对于给定的哈希值,没有实用的方法计算原始输入,也就是说,很难伪造。为加密哈希列表而设计的函数,如sha-2,广泛用于验证散列函数。这样,当软件下载时,将根据验证代码下载正确的文件部分。此代码不会因环境因素的变化而改变,例如机器配置或ip地址。以确保源文件的安全性。
三:MD5、SHA1、CRC32
SHA-1基于MD5
CRC的全称为CyclicRedundancyCheck,中文名称为循环冗余校验
附
常见的散列算法
原文https://zh.wikipedia.org/wiki/%E6%95%A3%E5%88%97%E5%87%BD%E6%95%B8
算法名称 | 输出大小(bits) | 内部大小 | 区块大小 | 长度大小 | 字符尺寸 | 碰撞情形 |
HAVAL | 256/224/192/160/128 | 256 | 1024 | 64 | 32 | 是 |
MD2 | 128 | 384 | 128 | No | 8 | 大多数 |
MD4 | 128 | 128 | 512 | 64 | 32 | 是 |
MD5 | 128 | 128 | 512 | 64 | 32 | 是 |
PANAMA | 256 | 8736 | 256 | 否 | 32 | 是 |
RadioGatún | 任意长度 | 58字 | 3字 | 否 | 1-64 | 否 |
RIPEMD | 128 | 128 | 512 | 64 | 32 | 是 |
RIPEMD-128/256 | 128/256 | 128/256 | 512 | 64 | 32 | 否 |
RIPEMD-160/320 | 160/320 | 160/320 | 512 | 64 | 32 | 否 |
SHA-0 | 160 | 160 | 512 | 64 | 32 | 是 |
SHA-1 | 160 | 160 | 512 | 64 | 32 | 有缺陷 |
SHA-256/224 | 256/224 | 256 | 512 | 64 | 32 | 否 |
SHA-512/384 | 512/384 | 512 | 1024 | 128 | 64 | 否 |
Tiger(2)-192/160/128 | 192/160/128 | 192 | 512 | 64 | 64 | 否 |
WHIRLPOOL | 512 | 512 | 512 | 256 | 8 | 否 |