我正在尝试实现SHA-2加密,而不是SHA-1。
为此,我知道这两个散列算法之间的位数是不同的,这让我感到困惑。
如何实现这一点?我需要在哪些部分进行必要的更改?
我可以使用来自Java、Python和任何其他主要编程语言的任何开源库。
发布于 2010-05-13 23:12:16
首先,SHA-1或任何与SHA-2相关的算法都不是“加密”算法。它们是散列函数。在SSL中,通过HMAC构造,哈希函数主要用于完整性,而不是机密性。哈希函数接受任意长度的输入,并生成固定长度的输出,这是输入数据的一种“摘要”;该操作是不可逆的。
散列函数是“公共的”:没有机密数据,没有密钥;每个人都可以计算任何给定输入的散列函数输出。“消息认证码”( MAC )是一种“带密钥的散列”:在该过程中还输入一个秘密密钥(即,任意一串比特),因此必须知道该密钥才能(重新)计算MAC输出。这用于完整性检查(发送方使用密钥计算MAC,接收方使用密钥重新计算MAC;如果MAC匹配,则数据是正确的,因为攻击者不知道密钥,不可能更改数据并在更改后的数据上计算有效的MAC )。
HMAC是将散列函数(例如SHA-1)转换为MAC的结构。TLS (这是SSL的当前标准名称)使用HMAC。当与给定的散列函数h一起使用时,HMAC的输出具有与h的输出相同的大小。该输出可以被传统地截断: HMAC/SHA-1名义上产生160比特的输出,但在某些协议中,习惯上仅保留前96比特。这种截断在SSL中不会发生。
FIPS 180-3标准定义了五个哈希函数,分别为SHA-1、SHA-224、SHA-256、SHA-384和SHA- 512,输出长度分别为160、224、256、384和512位。SHA-224、SHA-256、SHA-384和SHA-512函数通俗地称为"SHA-2",因此"SHA-2“不是一个函数,而是一系列四个散列函数。
TLS规范定义了密码套件。密码套件是客户端和服务器在连接的初始阶段(“握手”)期间达成一致的一组密码算法。这些算法中有一种是用于确保数据完整性的MAC。一些标准密码套件规定MAC应该是“带有SHA-256的HMAC”,即使用SHA-2函数之一的东西。
因此,您的问题的答案是:“只需将客户机和服务器配置为使用带有HMAC/SHA-256的密码套件之一”。如果您的SSL实现不支持这样的密码套件,那么您将不得不修改它,这将需要彻底理解SSL的工作原理;阅读和理解完整的RFC5246将是必要的。
发布于 2010-05-13 21:34:31
hashlib module和MessageDigest支持所有的SHA-2算法。
发布于 2010-05-13 21:59:08
据我所知,在RFC 5246中介绍了在SSL中实现SHA256所需了解的所有内容。
但我怀疑你对密码学的了解还远远不够...SHA 2不存在,您正在寻找SHA256、SHA384或SHA512,并且它不是一种加密算法,而是一种加密哈希函数。
那么,你到底想做什么呢?
https://stackoverflow.com/questions/2827121
复制相似问题