Java的MessageDigest SHA1算法返回的结果与php的SHA1函数不同
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java的MessageDigest SHA1算法返回的结果与php的SHA1函数不同,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1386字,纯文字阅读大概需要2分钟。
内容图文
![Java的MessageDigest SHA1算法返回的结果与php的SHA1函数不同](/upload/InfoBanner/zyjiaocheng/709/42edeecf31b1495da30cb74d36f7bb14.jpg)
我有一个带有用户名和密码的SQL表.密码使用MessageDigest的digest()方法进行编码.如果我编码一个密码 – 让我们说“abcdef12” – 使用MessageDigest的digest()方法然后将其转换为十六进制值,则String与使用PHP的SHA1方法执行相同操作时不同.我希望这些值完全相同.
用于对密码进行编码的代码:
MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] passbyte;
passbyte = "abcdef12".getBytes("UTF-8");
passbyte = md.digest(passbyte);
使用此方法将String转换为十六进制:
public static String convertStringToHex(String str) {
char[] chars = str.toCharArray();
StringBuffer hex = new StringBuffer();
for (int i = 0; i < chars.length; i++) {
hex.append(Integer.toHexString((int) chars[i]));
}
return hex.toString();
}
密码:abcdef12
这是许多SHA1-hash在线生成器和PHP SHA1()返回的密码 – 功能:d253e3bd69ce1e7ce6074345fd5faa1a3c2e89ef
这是MessageDigest编码的密码:d253e3bd69ce1e7ce674345fd5faa1a3c2e2030ef
我忘记了什么吗?
伊戈尔.
编辑:我发现有类似问题的人:C# SHA-1 vs. PHP SHA-1…Different Results?.解决方案是更改编码..但我无法更改服务器端的编码,因为该SQL表中的密码不是由我的应用程序创建的.
我使用JavaScript SHA1类(更确切地说是一个Google Web Toolkit类)使用客户端SHA1编码.它按预期工作和编码字符串,但显然使用ASCII字符?..
解决方法:
它与编码无关.输出将完全不同.
对于初学者,你的函数convertStringToHex()不输出前导零,即07变为7.
其余的(改变89到2030)也可能与该功能有关.尝试在passbyte = md.digest(passbyte);之后查看passbyte的值.
内容总结
以上是互联网集市为您收集整理的Java的MessageDigest SHA1算法返回的结果与php的SHA1函数不同全部内容,希望文章能够帮你解决Java的MessageDigest SHA1算法返回的结果与php的SHA1函数不同所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。