gpt4 book ai didi

java - JAVA和PYTHON中的SHA256加密产生不同的结果

转载 作者:行者123 更新时间:2023-12-01 19:50:34 26 4
gpt4 key购买 nike

非常感谢您帮助理解为什么我在 JAVA 和 PYTHON 中的 SHA256 加密函数没有产生结果(相差 1 位,在 python 中多了一位):

要加密的哈希是:“thisisatest”
Java 结果为:a7c96262c21db9a06fd49e307d694fd95f624569f9b35bb3ffacd88044f9787
Python 结果是:a7c96262c21db9a06fd49e307d694fd95f624569f9b35bb3ffacd880440f9787

Python 代码:

import hashlib

def encrypt_string(hash_string):
sha_signature = \
hashlib.sha256(hash_string.encode()).hexdigest()
return sha_signature


hash_string = "thisisatest"
print(encrypt_string(hash_string), end="")

Java 代码:

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class OpenAPIPasswordEncryptor1 {


private static MessageDigest sha256;

// generated password is stored encrypted (using also user name for hashing)
public synchronized static String encrypt(String hash) {
try {

StringBuilder builder = new StringBuilder();
builder.append(hash);

// first time , encrypt user name , password and static key
String encryptedCredentials = encryptionIterator(builder.toString());
return encryptedCredentials;
}

catch (Exception e) {
e.printStackTrace();
}

return "";
}

private static String encryptionIterator(String content) {
try {
sha256 = MessageDigest.getInstance("SHA-256");
// append the static key to each iteration
byte[] passBytes = (content).getBytes();
sha256.reset();
byte[] digested = sha256.digest(passBytes);
StringBuffer sb = new StringBuffer();
for (int i = 0; i < digested.length; i++) {
sb.append(Integer.toHexString(0xff & digested[i]));
}

return sb.toString();
} catch (NoSuchAlgorithmException ex) {
ex.printStackTrace();
}

return "";
}

// generate password for developers
public static void main(String[] args) {
String hash = "thisisatest";
String encrypt = encrypt(hash);
System.out.println("Your Password Is '" + encrypt + "'");
}
}

最佳答案

问题是 Integer.toHexString(int)如果(无符号)字节值等于或小于 15,则删除前导零。作为一种快速解决方法,您可以使用以下方法:

sb.append(String.format("%02x", 0xff & digested[i]));

尽管更有效的实现当然是可能的。

要在 Python 中产生相同的错误,请使用以下命令:

def encrypt_string(hash_string):
sha_signature = hashlib.sha256(hash_string.encode()).digest()
return "".join(["{:x}".format(b) for b in sha_signature])

关于java - JAVA和PYTHON中的SHA256加密产生不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51444782/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com