我正在尝试将以下散列加密为base64:
6bb984727b8c8c8017207e54b63976dc42ea9d24ad33bd5feeaa66869b650096
需要访问网站的API。该网站显示了一个使用CryptoJS.enc.Base64.stringify()
方法加密散列的JavaScript示例脚本。这种方法的结果是
a7mEcnuMjIAXIH5Utjl23ELqnSStM71f7qpmhptlAJY=
然而,我尝试的每个在线base64加密工具都会给出以下结果:
NmJiOTg0NzI3YjhjOGM4MDE3MjA3ZTU0YjYzOTc2ZGM0MmVhOWQyNGFkMzNiZDVmZWVhYTY2ODY5YjY1MDA5Ng==
我需要在C++中创建编码字符串。我也已经尝试了4种不同的base64encode实现(OpenSSL和自定义代码),但我也得到了上面的结果,API总是回答我的字符串编码不正确。
那么,有什么不同呢?有人知道CryptoJS.enc.Base64.stringify()
的C++实现吗
发布于 2015-08-25 01:42:06
让我们打电话给
a = "6bb984727b8c8c8017207e54b63976dc42ea9d24ad33bd5feeaa66869b650096";
b = "a7mEcnuMjIAXIH5Utjl23ELqnSStM71f7qpmhptlAJY=";
c = "NmJiOTg0NzI3YjhjOGM4MDE3MjA3ZTU0YjYzOTc2ZGM0MmVhOWQyNGFkMzNiZDVmZWVhYTY2ODY5YjY1MDA5Ng==";
这两种转换都是正确的,但这取决于您实际想要什么。
例如,以下两个方程成立
toBase64FromBytes(toBytesFromUtf8(a)) == c
toBase64FromBytes(toBytesFromHex(a)) == b
信任某种在线计算器不是一个好主意,因为它们通常不会透露它们是如何编码的,所以你会得到任意的结果。如果您自己对其进行编程,如果您遵循文档说明,则会获得预期的结果。
我怀疑您是通过将散列或加密结果打印到控制台获得a
的:
console.log(result.toString()); // a
CryptoJS中的大多数result
对象都是WordArray
类型。当您在这样的对象上调用toString()
函数时,您将获得该二进制对象的十六进制编码字符串。
如果打印result.toString(CryptoJS.enc.Base64)
,则会得到二进制结果的base64编码字符串。
如果您将a
直接编码为Base64,那么可能会假设a
已经是一个字符串(例如,UTF-8编码)。在线计算器不知道它是十六进制编码的。
https://stackoverflow.com/questions/32188149
复制相似问题