Java和python没有获得相同的sha-1值
我需要你的帮助。我的java和python脚本未获取字符串的ame sha-1值: hash.pyJava和python没有获得相同的sha-1值,java,python,cryptography,sha1,Java,Python,Cryptography,Sha1,我需要你的帮助。我的java和python脚本未获取字符串的ame sha-1值: hash.py # -*- coding: utf-8 -*- import hashlib username = raw_input('username:') timestamp = raw_input('timestamp:') app_id = 'dad' secret_key = 'dadda' print 'The hashed string is: ' , hashlib.sha1
# -*- coding: utf-8 -*-
import hashlib
username = raw_input('username:')
timestamp = raw_input('timestamp:')
app_id = 'dad'
secret_key = 'dadda'
print 'The hashed string is: ' , hashlib.sha1( username + timestamp + app_id + secret_key ).hexdigest()
hash.java
public static String generateSHA1(String password)
{
String sha1 = "";
try
{
MessageDigest crypt = MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(password.getBytes("UTF-8"));
sha1 = byteToHex(crypt.digest());
}
catch(Exception e)
{
e.printStackTrace();
}
return sha1;
}
private static String byteToHex(final byte[] hash)
{
Formatter formatter = new Formatter();
for (byte b : hash)
{
formatter.format("%02x", b);
}
String result = formatter.toString();
formatter.close();
return result;
}
更新:
假设密码已经是串联的:用户名、时间戳、应用程序id和密钥
# -*- coding: utf-8 -*-
import hashlib
username = raw_input('username:')
timestamp = raw_input('timestamp:')
app_id = 'dad'
secret_key = 'dadda'
print 'The hashed string is: ' , hashlib.sha1( username + timestamp + app_id + secret_key ).hexdigest()
我错过了什么吗?我认为我的java代码有问题。UTF-8输出这个:\xe2\x80\x8b,但我想不出来。任何帮助都将不胜感激。谢谢。确保两个输入使用完全相同的格式和编码,并尝试使用库 爪哇: Python:
import hmac
import hashlib
key = "2b5ba589b618ff2485f3391e425f86f0f405fd8e"
data = "Something you want to keep secret!"
decodedKey = key.decode("hex")
hmac = hmac.new(decodedKey, data.encode('UTF-8'), hashlib.sha1)
signature = hmac.digest().encode('base64')
print "key =", key
print "data =", data
print "signature =", signature
两个
签名
输出应该相同。用户名/时间戳的所有值都会发生这种行为吗?您可以发布您正在尝试的用户/时间戳对示例吗?@SanjayT.Sharma用户名:sa@sa.com时间戳:1447943648我无法在此复制您的问题;使用示例输入,我得到了两个相同的eeae0d665ed71f3d8f4e3d344fda1c3735dc46c0
hash值。@SanjayT.Sharma您能检查它是否输出:\xe2\x80\x8b吗?我不知道,检查哪个输出?我认为问题在于您接受用户输入或调用客户端代码的方式。您是否可以硬编码输入并检查SHA-1输出,而不是从控制台读取?小提示:HMAC的输入格式应该定义良好,例如,攻击者不可能将ab | c
更改为a | bc
(不同字段的哈希值相同)。