【问题标题】:Converting CryptoJS Base64 Encode to Python将 CryptoJS Base64 编码转换为 Python
【发布时间】: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 将值视为二进制的十六进制?

标签: python base64 cryptojs


【解决方案1】:

设法解决它。

import hashlib
import base64

magic = "TEST"
magic = hashlib.md5(magic.encode())
magic = magic.digest()  
magic1= base64.b64encode(magic)
encodedStr = str(magic1, "utf-8")
print(str(encodedStr))

改变是不使用digesthex,而是使用digest:

AzvZSxFo1+Tw1kTDyV41vw==

以下链接有助于解决我的问题:

Python, get base64-encoded MD5 hash of an image object

【讨论】:

    猜你喜欢
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 2020-07-25
    • 2011-11-20
    • 2015-05-30
    • 1970-01-01
    • 2011-04-27
    相关资源
    最近更新 更多