在python和javascript中生成SHA256哈希会导致不同的结果



我在加密明文时遇到问题。

我在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,因此我建议以这种方式进行哈希处理:

def encrypt(plaintext):
    import hashlib, base64
    return hashlib.sha256(plaintext).hexdigest()

当 CryptoJS 更改默认行为时,您仍应将 JavaScript 代码更改为十六进制编码。

相关内容

  • 没有找到相关文章

最新更新