首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python和javascript中生成SHA256哈希会导致不同的结果。

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

Stack Overflow用户
提问于 2015-01-21 15:37:17
回答 1查看 5.6K关注 0票数 5

我在加密明文方面有问题。

我在Python中所做的事情:

代码语言:javascript
复制
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中:

代码语言:javascript
复制
ypeBEsobvcr6wjGzmiPcTaeG7/gUfE5yuYB3ha/uSLs=

我在JS做的事:

代码语言:javascript
复制
var result = '';
var plaintext = 'a';

if(plaintext != null && plaintext != undefined) {
    var hashed = CryptoJS.SHA256(plaintext);
    result = hashed.toString(CryptoJS.Base64);
}

alert(result);

联合来文的结果:

代码语言:javascript
复制
ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb

有人知道我做错了什么吗?

还是有一种方法可以在两种语言中获得相同的加密结果?

顺便提一下:更改python代码会更容易,因为我的数据库中已经有了CryptoJS加密的值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-21 16:53:11

CryptoJS通常不会抛出错误。你要把undefined传给hashed.toString(CryptoJS.Base64);。使用CryptoJS.enc.Base64,因为默认情况下使用CryptoJS.enc.Hex

但是由于您更喜欢更改python,我建议您进行散列这边请

代码语言:javascript
复制
def encrypt(plaintext):
    import hashlib, base64
    return hashlib.sha256(plaintext).hexdigest()

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28071071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档