前端加解密:Web Crypto API 、crypto-js 库: MD5

[废弃,不再维护]什么是crypto-js

github地址: https://github.com/brix/crypto-js
cryptojs文档: https://cryptojs.gitbook.io/docs/#encoders

CryptoJS (crypto.js) 为 JavaScript 提供了各种各样的加密算法。

CryptoJS是一个JavaScript加密算法库,用于在客户端浏览器中执行加密和解密操作。它提供了一系列常见的加密算法,如AES、DES、Triple DES、Rabbit、RC4、MD5、SHA-1等等。

Active development of CryptoJS has been discontinued. This library is no longer maintained.

Nowadays, NodeJS and modern browsers have a native Crypto module. The latest version of CryptoJS already uses the native Crypto module for random number generation, since Math.random() is not crypto-safe. Further development of CryptoJS would result in it only being a wrapper of native Crypto. Therefore, development and maintenance has been discontinued, it is time to go for the native crypto module.
根据官方的建议,现代的 Node.js 和现代浏览器已经内置了原生的 Crypto 模块,用于进行加密和安全操作。原生的 Crypto 模块提供了更可靠和安全的加密功能,因此,使用原生的 Crypto 模块是更好的选择。

如果你的项目需要进行加密操作,我建议使用 Node.js 的原生 Crypto 模块。具体使用方式和 API 可以参考 Node.js 官方文档中关于 Crypto 模块的部分:https://nodejs.org/api/crypto.html

对于浏览器端,可以使用 Web Crypto API 来进行加密操作。Web Crypto API 是浏览器提供的原生加密 API,它提供了一系列的加密算法和操作方法。具体使用方式和 API 可以参考 MDN 文档中关于 Web Crypto API 的部分:https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API

通过使用原生的 Crypto 模块,你可以获得更好的性能和更高的安全性,同时避免使用不再维护的 CryptoJS 库。

安装依赖

npm install crypto-js

MD5

MD5是一种常用的哈希算法,不可逆。用于将任意长度的消息压缩成一个128位的摘要。MD5算法具有以下特点:

压缩性:任意长度的消息都可以被压缩成一个128位的摘要。
容易计算:MD5算法的计算速度比较快,适用于对大量数据进行哈希计算。
抗修改性:对原始数据进行任何修改,都会导致哈希值的变化。
抗碰撞性:对不同的原始数据,哈希值相同的概率非常小。

  const CryptoJS = require("crypto-js");
  // 生成随机数
  const randomNumber = Math.floor(Math.random() * 1000000).toString();

  const md5Value = CryptoJS.MD5(randomNumber).toString();

原生 Web Crypto API

对于浏览器端,可以使用 Web Crypto API 来进行加密操作。Web Crypto API 是浏览器提供的原生加密 API,它提供了一系列的加密算法和操作方法。具体使用方式和 API 可以参考 MDN 文档中关于 Web Crypto API 的部分:https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API

md5

Web Crypto API 不直接支持 MD5 加密算法。

官方提到了 MD5 的一些特点和安全性问题:
MD5 是一种密码学哈希函数,可以生成 128 位(16 字节)的哈希值。然而,由于存在漏洞,MD5 被认为是不安全的,并不适合进一步使用。官方建议在密码学用途中使用更安全的替代算法,如 SHA-256 或 SHA-3。

总结,MD5 不再被认为是安全的密码学哈希函数,因此不建议在安全敏感的应用中使用它。如果你需要进行哈希计算,请考虑使用更安全的替代算法,如 SHA-256。

sha256

async function computeSHA256Hash(data) {
  const encoder = new TextEncoder();
  const dataBuffer = encoder.encode(data);
  const hashBuffer = await crypto.subtle.digest('SHA-256', dataBuffer);
  const hashArray = Array.from(new Uint8Array(hashBuffer));
  const hashHex = hashArray.map(byte => byte.toString(16).padStart(2, '0')).join('');
  return hashHex;
}

function generateAppSecret() {

  // 生成随机数
  const randomNumber = Math.floor(Math.random() * 1000000).toString();
  return computeSHA256Hash(randomNumber);

}

注意:crypto.subtle.digest() 方法需要在 HTTPS 或者 localhost(即本地开发环境)下运行,这是为了确保在安全的环境中使用加密功能。这是因为加密操作通常涉及敏感的数据和密钥,为了保护这些信息不被恶意方截获和篡改,使用加密功能的网页必须通过 HTTPS 加密协议进行传输。

如果在非 HTTPS 或者 localhost 环境下运行 crypto.subtle.digest() 方法,浏览器会阻止该功能,并抛出错误。这是为了防止在不安全的环境中使用加密功能,以免导致安全风险。

因此,在开发和测试阶段,你可以在本地使用 localhost 运行你的应用程序,或者通过在本地配置 SSL 证书来使用 HTTPS。这样,就可以在浏览器中正常使用 crypto.subtle.digest() 方法。

请注意,当你将你的应用程序部署到真实的生产环境时,你应该使用有效的 HTTPS 证书来保证数据的安全传输。

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
回答: 在你的问题中,你遇到了一个错误,即"Error: Cannot find module 'crypto-js'"。这个错误是因为你的代码中引用了一个名为'crypto-js'的模块,但是系统找不到这个模块。\[3\]为了解决这个问题,你需要确保你已经正确安装了'crypto-js'模块,并且在你的代码中正确引用了它。你可以使用npm来安装'crypto-js'模块,命令如下: ``` npm install crypto-js ``` 安装完成后,你可以在你的代码中使用以下语句来引用'crypto-js'模块: ``` const CryptoJS = require('crypto-js'); ``` 这样就可以解决"Error: Cannot find module 'crypto-js'"的问题了。\[2\]希望这个解答对你有帮助。 #### 引用[.reference_title] - *1* *3* [爬虫 js逆向,调用js 第三方报错:execjs._exceptions.ProgramError: ReferenceError: crypto-js is not ...](https://blog.csdn.net/weixin_41354919/article/details/116494736)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v4^insert_chatgpt"}} ] [.reference_item] - *2* [2020-1-5 爬网页17-js逆向入门(AES加密-对称加密,crypto,分组模式CBC,填充模式)](https://blog.csdn.net/weixin_42555985/article/details/103840701)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v4^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西京刀客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值