我正在用Python编写一个用于椭圆曲线加密的程序(用于学校和出于兴趣)。我目前正在研究数字签名算法。我目前正在寻找一个良好而安全的散列函数,它在Python中是标准的,或者可以轻松下载和导入。我想到了SHA256,因为那是我所知道的唯一尚未被破坏的东西(据我所知)。但是,我还读到SHA不应该用于加密。 SHA256适用于数字签名算法吗?或者应该使用不同的散列函数?如果是这样,哪一个会是一个不错的选择?
我使用SHA-512用于类似的目的,我认为你很难获得比这更安全的东西。 SHA-512在python的hashlib中可用,可以这样使用:
import hashlib
hashGen = hashlib.sha512()
hashGen.update("What you want to hash")
hash = hashGen.hexdigest()
print "your hash is: ", hash
目前可用的最佳标准化算法仍然是SHA-2。 SHA-2现在由6个哈希函数组成:首先定义SHA-256,SHA-384和SHA-512。后来添加了SHA-224以允许更小的输出尺寸。之后,推出了不太好用的SHA-512/224和SHA-512/256。
SHA-2主要由面向32位的SHA-256变体(SHA-256和SHA-224)和64位SHA-512变体组成。在64位计算机上,SHA-512变体的性能实际上可能更高,因此引入了SHA-512/224和SHA-512/256。基本上,SHA-256 / SHA-512的变体仅在内部使用的常量和用作输出大小的位数方面有所不同。一些较新的Intel和AMD处理器SHA扩展只能加速SHA-256,而不是SHA-512,可能会在速度方面再次转向SHA-256。
在SHA-3比赛期间,即使SHA-1受到攻击,SHA-2仍然非常强大。如果SHA-2受到攻击或者更好的哈希算法得到标准化和使用,我建议只查看其他哈希值。
来自维基百科:
2005年,在SHA-1中发现了安全漏洞,即可能存在数学上的弱点,表明需要更强的哈希函数。[6]虽然SHA-2与SHA-1算法有一些相似之处,但这些攻击尚未成功扩展到SHA-2。
请注意,与SHA-1相比,SHA-2使用了更复杂的舍入功能。因此虽然它具有类似的结构(两者都被称为Merkle-Damgard哈希),但SHA-2可能比SHA-1更能抵抗攻击。