我有一个包含用户名和密码的SQL表。密码使用MessageDigest的digest()方法进行编码。如果我使用MessageDigest的digest()方法对密码进行编码(比如说“
abcdef12”),然后将其转换为十六进制值,则该字符串与使用PHP的SHA1-方法进行的编码不同。我希望这些值可以完全相同。
用于编码密码的html" target="_blank">代码:
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与PHP SHA-1
…不同的结果?。解决方案是更改编码..但是我无法在服务器端更改编码,因为该SQL表中的密码不是由我的应用程序创建的。我使用JavaScript
SHA1类(更确切地说是Google Web
Toolkit类)使用客户端SHA1编码。它可以正常工作并按预期对字符串进行编码,但是显然使用ASCII字符?。
它与编码无关。输出将完全不同。
对于初学者,您的函数convertStringToHex()
不会输出前导零,即07
变为just 7
。
其余(更改89
为2030
)也可能与该功能有关。尝试查看passbyte
after 的值passbyte = md.digest(passbyte);
。
问题内容: 我从http://tools.ietf.org/html/rfc6238借用了HMAC- SHA1 Java代码,并稍加修改以对其进行硬编码,以使用一个具有已知输出的已知密钥/消息对。 然后,我尝试在Python中编写相同的代码以验证结果,但是在Python和Java中获得了不同的值。 已知Java值很好。 Java代码: Python代码: 运行Java的结果: 运行Python的结
问题内容: 我从http://tools.ietf.org/html/rfc6238借用了HMAC- SHA1 Java代码,并稍加修改以对其进行硬编码,以使用一个具有已知输出的已知密钥/消息对。 然后,我尝试在Python中编写相同的代码以验证结果,但是在Python和Java中获得了不同的值。 Java值众所周知是好的。 Java代码: Python代码: 运行Java的结果: 运行Pytho
问题内容: 我正在尝试从CSV文件中的一组数字中找到最大值和最小值。我的代码在某些行中始终为Max函数返回错误的数字。这是我的代码: 我的输出示例: 我不确定我做错了什么。一些建议,将不胜感激。 问题答案: 您的列表元素是字符串。您需要对其进行转换,以避免按字典顺序进行比较(按字母顺序,一次只比较一个字符,这是因为) 除非您实际上想要字符串,否则不要创建新列表,而只需传递给您的函数即可:
问题内容: 我有一个大问题。我使用此C#函数对消息进行编码: 在Java方面,我使用以下代码段: 我的消息是:阻止|注释|文本!£$%&/()=?^€> <{}ç°§;:_-。,@#ùàòè+ 我有这个结果: 你能帮我吗??谢谢… 问题答案: 我的猜测是您似乎正在将ASCII字节与Latin1字节进行比较。尝试切换 对此 那可能会解决您的问题。 (或切换C#以使用Latin1) 程序中发生的事情是
我正在使用postgis计算两个地理坐标之间的距离。 它返回给我53536.743496517米,大约等于54公里,但实际距离是103公里,我通过http://boulter.com/gps/distance/ 我在询问中是否做错了什么?