在 python 和 javascript 中生成 SHA256 哈希会导致不同的结果
Generating a SHA256 hash in python and javascript leads to different results
我在加密明文时遇到问题。
我在Python做什么:
def encrypt(plaintext):
import hashlib, base64
hashed = hashlib.sha256(plaintext).digest()
return base64.b64encode(hashed)
def main():
input_value = "a"
output = encrypt(plaintext=input_value)
print output
if __name__ == "__main__":
main()
结果Python:
ypeBEsobvcr6wjGzmiPcTaeG7/gUfE5yuYB3ha/uSLs=
我在 JS 中做了什么:
var result = '';
var plaintext = 'a';
if(plaintext != null && plaintext != undefined) {
var hashed = CryptoJS.SHA256(plaintext);
result = hashed.toString(CryptoJS.Base64);
}
alert(result);
JS 中的结果:
ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb
有谁知道我做错了什么吗?
或者有没有办法在两种语言中获得相同的加密结果?
顺便说一句:我更改 python 代码会更容易,因为我的数据库中已经有 CryptoJS 加密的值。
CryptoJS 通常不会抛出错误。您正在将 undefined
传递给 hashed.toString(CryptoJS.Base64);
。使用CryptoJS.enc.Base64
,因为默认使用CryptoJS.enc.Hex
。
但由于您更喜欢更改 python,我建议进行散列 this way:
def encrypt(plaintext):
import hashlib, base64
return hashlib.sha256(plaintext).hexdigest()
当 CryptoJS 更改默认行为时,您仍应将 JavaScript 代码更改为十六进制编码。
我在加密明文时遇到问题。
我在Python做什么:
def encrypt(plaintext):
import hashlib, base64
hashed = hashlib.sha256(plaintext).digest()
return base64.b64encode(hashed)
def main():
input_value = "a"
output = encrypt(plaintext=input_value)
print output
if __name__ == "__main__":
main()
结果Python:
ypeBEsobvcr6wjGzmiPcTaeG7/gUfE5yuYB3ha/uSLs=
我在 JS 中做了什么:
var result = '';
var plaintext = 'a';
if(plaintext != null && plaintext != undefined) {
var hashed = CryptoJS.SHA256(plaintext);
result = hashed.toString(CryptoJS.Base64);
}
alert(result);
JS 中的结果:
ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb
有谁知道我做错了什么吗?
或者有没有办法在两种语言中获得相同的加密结果?
顺便说一句:我更改 python 代码会更容易,因为我的数据库中已经有 CryptoJS 加密的值。
CryptoJS 通常不会抛出错误。您正在将 undefined
传递给 hashed.toString(CryptoJS.Base64);
。使用CryptoJS.enc.Base64
,因为默认使用CryptoJS.enc.Hex
。
但由于您更喜欢更改 python,我建议进行散列 this way:
def encrypt(plaintext):
import hashlib, base64
return hashlib.sha256(plaintext).hexdigest()
当 CryptoJS 更改默认行为时,您仍应将 JavaScript 代码更改为十六进制编码。