【发布时间】:2020-02-12 10:08:27
【问题描述】:
我有以下一段代码,它只是使用 javascript 将一个值编码为 Base64:
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.js"></script>
<script>
var magic = "TEST";
var magic1 = CryptoJS.MD5(magic).toString(CryptoJS.enc.Base64);
document.write(magic1);
</script>
上述输出导致:
AzvZSxFo1+Tw1kTDyV41vw==
现在,当我想在 python 中做同样的事情时,我得到了不同的结果:
import hashlib
import base64
magic = "TEST"
magic = hashlib.md5(magic.encode())
magic = magic.hexdigest()
magic1= base64.b64encode(magic.encode())
print(magic1)
上述输出导致:
MDMzYmQ5NGIxMTY4ZDdlNGYwZDY0NGMzYzk1ZTM1YmY=
为什么我会为完全相同的字符串得到两个不同的 base64 结果?那么我应该如何调整我的 python 代码来工作呢?
编辑 我已按照建议进行了完整更新,显示了两个实例的工作代码。我想了解为什么 java 和 python 结果之间存在差异。如何在 python 上获得相同的结果。
【问题讨论】:
-
那么你在上面的代码中的目标是什么?如果您将
magic视为二进制数的十六进制表示,则 javascript 结果是正确的 base64 代码,python 代码将magic视为字符串并在这种情况下具有正确的结果。但在第一种情况下,javascript 代码似乎不完整,至少我无法用给定的两行重现它。 -
魔术实际上是一个 MD5 哈希生成然后转换为 base64。我想在 python 中完全复制并获得与我在 javascript 中相同的结果。因此,如果我理解正确,我必须让 python 将值视为二进制的十六进制?