Java和PHP中的SHA1具有不同的结果
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java和PHP中的SHA1具有不同的结果,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2846字,纯文字阅读大概需要5分钟。
内容图文
![Java和PHP中的SHA1具有不同的结果](/upload/InfoBanner/zyjiaocheng/793/afd75edaa25c4c74914485e991d7bcce.jpg)
我知道有几个这样的问题,但我尝试了我在stackoverflow上找到的每一个解决方案,但我仍然没有得到预期的结果.
我正在尝试在Java和PHP中将字符串转换为sha1,但我得到了不同的结果.该字符串是随机生成的.我检查了两端的字符串,它们是相同的(甚至尝试在线比较工具).
这是我在另一个应用程序中使用的相同代码,它在那里工作,但不是在这种情况下.
我试图用sha1散列的一个字符串是:UgJaDVYEClRUD1cAAVUBVwRTB1MDAA9SBgcDBwNXAwNZBQdUAAACBA ==
Java结果:72c9bbe7eed0efe5e82ea9568136d8f52347259e
PHP结果:f720d73d18a7bb9cf36808af17ce40621ebfb405
Java代码
public static String sha1(String toHash)
{
String hash = null;
try
{
MessageDigest digest = MessageDigest.getInstance("SHA-1");
byte[] bytes = toHash.getBytes("ASCII"); //I tried UTF-8, ISO-8859-1...
digest.update(bytes, 0, bytes.length);
bytes = digest.digest();
StringBuilder sb = new StringBuilder();
for(byte b : bytes)
{
sb.append(String.format("%02X", b));
}
hash = sb.toString();
}
catch(NoSuchAlgorithmException e)
{
e.printStackTrace();
}
catch(UnsupportedEncodingException e)
{
e.printStackTrace();
}
return hash.toLowerCase(Locale.ENGLISH);
}
PHP代码
sha1("UgJaDVYEClRUD1cAAVUBVwRTB1MDAA9SBgcDBwNXAwNZBQdUAAACBA==");
任何帮助,将不胜感激
更新
在Java& PHP我正在做以下事情:
Java的
String toHash = "qwerty";
String hash = sha1(toHash); //Prints: b1b3773a05c0ed0176787a4f1574ff0075f7521e
toHash = Base64.encodeToString(toHash.getBytes("ASCII"), Base64.DEFAULT);
hash = sha1(toHash); //Prints: 88bfb2d77c3b42823bab820c1737f03c97d87c1b
PHP
$toHash = "qwerty";
sha1($toHash); //Prints: b1b3773a05c0ed0176787a4f1574ff0075f7521e
sha1(base64_encode($toHash)); //Prints: 278aa0e8dde2af58a4eed613467da219a35c5278
我想Base64编码对PHP和Java上不同的字符串做了些什么,对于为什么有任何想法?
更新2
我应该更清楚,对不起,我的意思是:
的输出
Java的
sha1(Base64.encodeToString("qwerty".getBytes("ASCII"), Base64.DEFAULT));
是不同的输出
PHP
sha1(base64_encode("qwerty"));
更新3
虽然base64编码的字符串都等于cXdlcnR5.
基本上:
- sha1("qwerty") == sha1("qwerty")
- Base64.encodeToString("qwerty".getBytes(), Base64.DEFAULT) == base64_encode("qwerty")
- sha1(Base64.encodeToString("qwerty".getBytes(), Base64.DEFAULT)) != sha1(base64_encode("qwerty"))
我已经在我散列的字符串上删除了base64编码,但我仍然想知道我可以做些什么来使它工作.
解决方法:
编辑
你在encodeToString方法中使用了两次toHash变量,使你的第二行代码变得多余.
这段代码
String toHash = "qwerty";
String hash = sha1(toHash); //Prints: b1b3773a05c0ed0176787a4f1574ff0075f7521e
toHash = Base64.encodeToString(toHash.getBytes("ASCII"), Base64.DEFAULT);
hash = sha1(toHash); //Prints: 88bfb2d77c3b42823bab820c1737f03c97d87c1b
相当于这段代码
String toHash = "qwerty";
toHash = Base64.encodeToString(toHash.getBytes("ASCII"), Base64.DEFAULT);
hash = sha1(toHash); //Prints: 88bfb2d77c3b42823bab820c1737f03c97d87c1b
所以基本上就是java
>为“qwerty”获取Base64
>在该结果上得到sha1
在使用PHP的同时
>为“qwerty”获取sha1
>在该结果上获得Base64
我猜你错了
内容总结
以上是互联网集市为您收集整理的Java和PHP中的SHA1具有不同的结果全部内容,希望文章能够帮你解决Java和PHP中的SHA1具有不同的结果所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。