我正在尝试将以下哈希加密为 Base64:
6bb984727b8c8c8017207e54b63976dc42ea9d24ad33bd5feeaa66869b650096
需要访问网站的API。该网站显示了一个 JavaScript 示例脚本,使用CryptoJS.enc.Base64.stringify()
加密哈希的方法。
该方法的结果是
a7mEcnuMjIAXIH5Utjl23ELqnSStM71f7qpmhptlAJY=
然而,我尝试过的每个在线 Base64 加密工具都会给出以下结果:
NmJiOTg0NzI3YjhjOGM4MDE3MjA3ZTU0YjYzOTc2ZGM0MmVhOWQyNGFkMzNiZDVmZWVhYTY2ODY5YjY1MDA5Ng==
我需要在 C++ 中创建编码字符串。我也已经尝试了 4 种不同的 base64encode 实现(OpenSSL 和自定义代码),但我也得到了上述结果,并且 API 总是回答我的字符串编码不正确。
那么区别在哪里,有人知道 C++ 的实现吗CryptoJS.enc.Base64.stringify()
?
我们打电话吧
a = "6bb984727b8c8c8017207e54b63976dc42ea9d24ad33bd5feeaa66869b650096";
b = "a7mEcnuMjIAXIH5Utjl23ELqnSStM71f7qpmhptlAJY=";
c = "NmJiOTg0NzI3YjhjOGM4MDE3MjA3ZTU0YjYzOTc2ZGM0MmVhOWQyNGFkMzNiZDVmZWVhYTY2ODY5YjY1MDA5Ng==";
两种转换都是正确的,但取决于您实际想要的。
例如以下两个方程成立
toBase64FromBytes(toBytesFromUtf8(a)) == c
toBase64FromBytes(toBytesFromHex(a)) == b
信任某种在线计算器是一个坏主意,因为他们通常不会透露他们如何编码内容,所以你会得到任意结果。如果您自己编程,只要遵循文档,您就会得到预期的结果。
我怀疑你有a
通过将哈希或加密结果打印到控制台,如下所示:
console.log(result.toString()); // a
Most result
CryptoJS 中的对象是WordArray
类型。当您致电toString()
在这样的对象上运行函数,您将获得该二进制对象的十六进制编码字符串。
如果您打印result.toString(CryptoJS.enc.Base64)
然后您将获得二进制结果的 Base64 编码字符串。
如果你采取a
并直接将其编码为Base64,那么可能假设a
已经是一个字符串(例如 UTF-8 编码)。在线计算器不知道它是十六进制编码的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)