Crypto前端加密工具

842 阅读4分钟

前端加密工具crypto-js

应用场景

在开发过程中,会遇到一些url地址栏传参的情况,如果将具体的code暴露出去,有可能会被篡改从而查看到别人的数据,所以需要进行加密处理。

crypto-js是什么

一个纯JavaScript编写的加密算法库,可以进行MD5、SHA1、SHA2、SHA3、RIPEMD-160 哈希散列,进行 AES、DES、Rabbit、RC4、Triple DES 加解密

使用

安装

# npm
npm install crypto-js
# yarn
yarn add crypto-js

常用加密与解密

MD5加密:不可逆

let md5Str = Crypto.MD5("Aa123456789").toString();
console.log(md5Str); // 3d558122fcac9ea5fdc9ee8eccf8f433

SHA加密

// SHA加密:不可逆
/** SHA1、SHA2和SHA3是密码学中常用的哈希算法,它们在加密强度和设计上有一些区别。
    1. SHA1(Secure Hash Algorithm 1):
        - 输出长度为160位(20字节)。
        - 安全性逐渐受到威胁,因为已经发现了一些攻击方法,SHA1 已不再被推荐用于安全领域。
        - 仍然可以用于一些非安全性的应用,如校验文件完整性等。

    2. SHA2(Secure Hash Algorithm 2):
        - SHA2 算法家族包括 SHA-224、SHA-256、SHA-384、SHA-512 等。
        - 输出长度可变,分别为224位、256位、384位和512位。
        - 目前被广泛使用,被认为是安全可靠的哈希算法。
        - 在大多数情况下,SHA-256 是最常用的 SHA2 变体,用于保护密码、数字签名和其他安全协议。

    3. SHA3(Secure Hash Algorithm 3):
        - SHA3 算法家族包括 SHA3-224、SHA3-256、SHA3-384、SHA3-512 等。
        - 输出长度可变,分别为224位、256位、384位和512位。
        - SHA3 是美国国家标准与技术研究院(NIST)于2015年发布的最新哈希算法。
        - SHA3 与 SHA2 相比,在设计上有一些不同,使用了 Keccak 网络结构,提供了更好的安全性和抗攻击性能。

    总体而言,SHA2 算法是目前最常用和广泛接受的哈希算法,而 SHA3 算法是一种新兴的、更加安全的哈希算法。
    如果在新的应用中选择哈希算法,推荐使用 SHA3 算法。但在现有系统中,SHA2 算法仍然是一个可靠的选择。
    对于 SHA1,由于其安全性已经受到威胁,不再推荐使用。
*/

// SHA1
const sha1Str = Crypto.SHA1("Aa123456789").toString();
console.log(sha1Str); // 299129b6ca094e4621e97d763f754a69fd436789

// SHA2
const sha2Str = Crypto.SHA256("Aa123456789").toString();
console.log(sha2Str); // 6b8c049022f412577c6f549c43d2042efe394911d6ac9142c925ef5d20a8ee5f

// SHA3
const sha3Str = Crypto.SHA3("Aa123456789").toString();
console.log(sha3Str); // d2c25b28d9c1af8b8477525dbb1a7194d7e8ac7722e317bf6dfed831a884465864f9277e9a9348bf6d82a5f22ab8c6a8e913a8d72d645d40c7a76b172fc29c8c

AES对称加密:可解密

// AES加密:对称加密算法
const secretKey = "sunshine"; // 密钥
const aesStr = Crypto.AES.encrypt("Aa123456789", secretKey).toString();
console.log(aesStr); // U2FsdGVkX1//68D0mFcGubBLb56zWSnacxwLOATFa+g=

// AES解密
const aesDecrypt = Crypto.AES.decrypt(
	"U2FsdGVkX1//68D0mFcGubBLb56zWSnacxwLOATFa+g=",
	secretKey
).toString(Crypto.enc.Utf8);
console.log(aesDecrypt); // Aa123456789

DES加密:可解密,但不推荐使用,密钥较短

// DES加密
const secretKey = "sunshine"; // 密钥
const desStr = Crypto.DES.encrypt("Aa123456789", secretKey).toString();
console.log(desStr); // U2FsdGVkX18zMPVWDCHyF5eVpCXYTsOV4dUFWH7vx9Y=

// DES解密
const desDecrypt = Crypto.DES.decrypt(
	"U2FsdGVkX18zMPVWDCHyF5eVpCXYTsOV4dUFWH7vx9Y=",
	secretKey
).toString(Crypto.enc.Utf8);
console.log(desDecrypt); // Aa123456789