[废弃,不再维护]什么是crypto-js
github地址: https://github.***/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 ***puteSHA256Hash(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 ***puteSHA256Hash(randomNumber);
}
注意:crypto.subtle.digest() 方法需要在 HTTPS 或者 localhost(即本地开发环境)下运行,这是为了确保在安全的环境中使用加密功能。这是因为加密操作通常涉及敏感的数据和密钥,为了保护这些信息不被恶意方截获和篡改,使用加密功能的网页必须通过 HTTPS 加密协议进行传输。
如果在非 HTTPS 或者 localhost 环境下运行 crypto.subtle.digest() 方法,浏览器会阻止该功能,并抛出错误。这是为了防止在不安全的环境中使用加密功能,以免导致安全风险。
因此,在开发和测试阶段,你可以在本地使用 localhost 运行你的应用程序,或者通过在本地配置 SSL 证书来使用 HTTPS。这样,就可以在浏览器中正常使用 crypto.subtle.digest() 方法。
请注意,当你将你的应用程序部署到真实的生产环境时,你应该使用有效的 HTTPS 证书来保证数据的安全传输。