问题描述
- java sha1加密 和 python sha1 加密结果不一致
-
java代码MessageDigest messageDigest = MessageDigest.getInstance(algorithm); messageDigest.update(value.getBytes()); return bytesToHexString(messageDigest.digest());
python 代码
md = hashlib.sha1() md.update(value.encode('utf-8')) md.digest()
初学python 大神帮忙看看
解决方案
print(hashlib.sha1(value.encode('utf-8')).hexdigest()) 这是我用的你试一下
解决方案二:
http://stackoverflow.com/questions/33807745/java-and-python-not-getting-the-same-sha-1-value
解决方案三:
一个应用,需要计算sha1加密,但和java的结果却不同,java的是正确的
Python代码 收藏代码
import hashlib
print hashlib.sha1('fetion.com.cn:123456').hexdigest()
结果:78fdd307349087f375cdabd3acbf7bf84e33ad51
Java代码 收藏代码
System.out.println(MessageDigest.getInstance("SHA-1").digest("fetion.com.cn:123456".getBytes()));
结果:871D0A9E95ABA22B4604224CFBA24E605FABBC34
因为python没有byte这个对象,而java是用byte进行hash计算的~
决解办法:可以试下http://stackoverflow.com/questions/13019598/python-hmac-sha1-vs-java-hmac-sha1-different-results。
解决方案四:
举个简单例子,下面这个是 SHA1 加密的一个函数,完全可以用来加密口令, SHA1 加密是 160 位的哈希加密方法。(两个不同字串加密后重复的概率极低,能将小的变化放到成大的变化,即是只错一个字母,加密结果也完全不同。) 特别适合加密口令:加密后,登陆时,重新计算用户输入的密码的 SHA1 值,如果与数据库中存储的一致,则证明用户登陆成功。管理员无法从数据库看到的 SHA1 值反推出真实密......
答案就在这里:SHA1 加密