首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CryptoJS.enc.Base64.stringify()与普通Base64加密的区别

CryptoJS.enc.Base64.stringify()与普通Base64加密的区别
EN

Stack Overflow用户
提问于 2015-08-25 01:27:38
回答 1查看 15.5K关注 0票数 6

我正在尝试将以下散列加密为base64:

代码语言:javascript
运行
复制
6bb984727b8c8c8017207e54b63976dc42ea9d24ad33bd5feeaa66869b650096

需要访问网站的API。该网站显示了一个使用CryptoJS.enc.Base64.stringify()方法加密散列的JavaScript示例脚本。这种方法的结果是

代码语言:javascript
运行
复制
a7mEcnuMjIAXIH5Utjl23ELqnSStM71f7qpmhptlAJY=

然而,我尝试的每个在线base64加密工具都会给出以下结果:

代码语言:javascript
运行
复制
NmJiOTg0NzI3YjhjOGM4MDE3MjA3ZTU0YjYzOTc2ZGM0MmVhOWQyNGFkMzNiZDVmZWVhYTY2ODY5YjY1MDA5Ng==

我需要在C++中创建编码字符串。我也已经尝试了4种不同的base64encode实现(OpenSSL和自定义代码),但我也得到了上面的结果,API总是回答我的字符串编码不正确。

那么,有什么不同呢?有人知道CryptoJS.enc.Base64.stringify()的C++实现吗

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-25 01:42:06

让我们打电话给

代码语言:javascript
运行
复制
a = "6bb984727b8c8c8017207e54b63976dc42ea9d24ad33bd5feeaa66869b650096";
b = "a7mEcnuMjIAXIH5Utjl23ELqnSStM71f7qpmhptlAJY=";
c = "NmJiOTg0NzI3YjhjOGM4MDE3MjA3ZTU0YjYzOTc2ZGM0MmVhOWQyNGFkMzNiZDVmZWVhYTY2ODY5YjY1MDA5Ng==";

这两种转换都是正确的,但这取决于您实际想要什么。

例如,以下两个方程成立

代码语言:javascript
运行
复制
toBase64FromBytes(toBytesFromUtf8(a)) == c
toBase64FromBytes(toBytesFromHex(a)) == b

信任某种在线计算器不是一个好主意,因为它们通常不会透露它们是如何编码的,所以你会得到任意的结果。如果您自己对其进行编程,如果您遵循文档说明,则会获得预期的结果。

我怀疑您是通过将散列或加密结果打印到控制台获得a的:

代码语言:javascript
运行
复制
console.log(result.toString()); // a

CryptoJS中的大多数result对象都是WordArray类型。当您在这样的对象上调用toString()函数时,您将获得该二进制对象的十六进制编码字符串。

如果打印result.toString(CryptoJS.enc.Base64),则会得到二进制结果的base64编码字符串。

如果您将a直接编码为Base64,那么可能会假设a已经是一个字符串(例如,UTF-8编码)。在线计算器不知道它是十六进制编码的。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32188149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档