本帖最后由 wanbo万波 于 2018-6-20 13:56 编辑
1. 单向散列函数(哈希函数)概念 单向散列函数(one-wayftnction)有一个输人和一个输出,其中输人称为消息(message),输出称为散列值(hashvalue)。单向散列函数可以根据消息的内容计算出散列值,而散列值就可以被用来检查消息的完整性。
1.1 哈希函数的特点压缩性
任意长度的数据,算出的值长度都是固定的。
容易计算
抗修改性
对原数据进行任何改动,哪怕只修改1个字节,所得到的值都有很大区别
强抗碰撞性
已知原数据和其哈希值,想找到一个具有相同哈希值的数据(即伪造数据)是非常困难的。
单向性(不可逆)
1.2 哈希函数的应用检测软件是否被篡改 我们可以使用单向散列函数来确认自己下载的软件是否被篡改。 很多软件,尤其是安全相关的软件都会把通过单向散列函数计算出的散列值公布在自己的官方网站上。用户在下载到软件之后,可以自行计算散列值,然后与官方网站上公布的散列值进行对比。通过散列值,用户可以确认自己所下载到的文件与软件作者所提供的文件是否一致。 这样的方法,在可以通过多种途径得到软件的情况下非常有用。为了减轻服务器的压力,很多软件作者都会借助多个网站(镜像站点)来发布软件,在这种情况下,单向散列函数就会在检测软件是否被篡改方面发挥重要作用。
消息认证码 使用单向散列函数可以构造消息认证码。 消息认证码是将“发送者和接收者之间的共享密钥”和“消息,进行混合后计算出的散列值。使用消息认证码可以检测并防止通信过程中的错误、篡改以及伪装。
数字签名 在进行数字签名时也会使用单向散列函数。 数字签名是现实社会中的签名(sign)和盖章这样的行为在数字世界中的实现。数字签名的处理过程非常耗时,因此一般不会对整个消息内容直接施加数字签名,而是先通过单向散列函数计算出消息的散列值,然后再对这个散列值施加数字签名。
伪随机数生成器 使用单向散列函数可以构造伪随机数生成器。 密码技术中所使用的随机数需要具备“事实上不可能根据过去的随机数列预测未来的随机数列”这样的性质。为了保证不可预测性,可以利用单向散列函数的单向性。
一次性口令或登录验证 使用单向散列函数可以构造一次性口令(one-time password)。 一次性口令经常被用于服务器对客户端的合法性认证。在这种方式中,通过使用单向散列函数可以保证口令只在通信链路上传送一次(one-time),因此即使窃听者窃取了口令,也无法使用。
1.3 常用的哈希函数[td]哈希函数 | 散列值长度(bit) | 散列值长度(byte) | Md4/Md5 | 128bit | 16byte | SHA-1 | 160bit | 20byte | SHA-256 | 256bit | 32byte | SHA-384 | 384bit | 48byte | SHA-512 | 512bit | 64byte | SHA-224 | 224bie | 28byte |
最终需要对得到的散列值做转换, 以16进制格式的字符串表示
|