Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java和python没有获得相同的sha-1值_Java_Python_Cryptography_Sha1 - Fatal编程技术网

Java和python没有获得相同的sha-1值

Java和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

我需要你的帮助。我的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( 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
(不同字段的哈希值相同)。