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

Encoding 在python和javascript中生成SHA256哈希会导致不同的结果,encoding,hash,cryptography,cryptojs,cross-language,Encoding,Hash,Cryptography,Cryptojs,Cross Language,我对明文加密有问题 我在Python中所做的工作: ypeBEsobvcr6wjGzmiPcTaeG7/gUfE5yuYB3ha/uSLs= def加密(明文): 导入hashlib,base64 hashed=hashlib.sha256(纯文本).digest() 返回base64.b64encode(散列) def main(): 输入值=“a” 输出=加密(明文=输入值) 打印输出 如果名称=“\uuuuu main\uuuuuuuu”: main() 在Python中生成以下结果:

我对明文加密有问题

我在Python中所做的工作:

ypeBEsobvcr6wjGzmiPcTaeG7/gUfE5yuYB3ha/uSLs=
def加密(明文):
导入hashlib,base64
hashed=hashlib.sha256(纯文本).digest()
返回base64.b64encode(散列)
def main():
输入值=“a”
输出=加密(明文=输入值)
打印输出
如果名称=“\uuuuu main\uuuuuuuu”:
main()
在Python中生成以下结果:

ypeBEsobvcr6wjGzmiPcTaeG7/gUfE5yuYB3ha/uSLs=
我在JS中所做的:

var结果=”;
var纯文本='a';
if(纯文本!=空和纯文本!=未定义){
var hashed=CryptoJS.SHA256(纯文本);
结果=hashed.toString(CryptoJS.Base64);
}
警报(结果);
结果在JS中:

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

或者有没有办法在两种语言中获得相同的加密结果


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

CryptoJS通常不会抛出错误。您正在将
undefined
传递到
hashed.toString(CryptoJS.Base64)。使用
CryptoJS.enc.Base64
,因为默认情况下使用
CryptoJS.enc.Hex

但由于您更喜欢更改python,我建议您执行哈希:

def加密(明文):
导入hashlib,base64
返回hashlib.sha256(纯文本).hexdigest()

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

或者,由于他说他更喜欢更改Python代码,他可以使用base64编码,也可以不使用base64编码。谢谢,只有在发布答案后才注意到这句话。谢谢您的回答!这对我帮助很大!现在我必须弄清楚我是要修补数据库还是修改python代码。你有什么建议吗?@gimlithedwarf这很难回答。可能性太多了。如果按空格键,可以将其转换为Base64,并在此列中节省约33%的空间。如果您将此作为URL参数发送,则应将其保留为十六进制或将其转换为URL安全版本的Base64(RFC4648中的表2)。感谢您的评论。这只是我代码中的一个复制粘贴错误。它应该是“输出=加密(明文=输入值)”