我需要将一条消息哈希成一个30个字符的字符串。对于这种用途,最好且最安全的哈希函数是什么?
三十个字符(字节)是240位。
如果不能把目标设为32个字符,那么你可能会使用SHA-1,它生成160位或20个字节。经过Base-64编码后,长度为28个字符。如果使用十六进制编码,则长度将达到40个字符,超出了正常范围。如果使用32个字符,则可以使用SHA-256,但Base-64编码将增加该大小(至44个字符),并且十六进制编码将使大小增加至64个字符。
如果您必须使用十六进制编码,并且可以使用32个字节,则可以使用MD5(生成128位),但不建议在任何新系统中使用。通过Base-64编码,MD5使用24个字符。否则,您将使用非常低安全性的算法,根本不推荐使用。
import hashlib
hash = hashlib.sha1("your message").hexdigest()[:30]