nodejs之 crypto-js模块,浏览器端加解密算法库

一、简介

CryptoJS是一个JavaScript加密算法库,用于实现各种加密算法和哈希函数。它提供了一种简单而强大的方式来执行加密操作,包括对称加密算法、非对称加密算法和哈希函数等。
CryptoJS支持的主要功能包括:
1.对称加密:CryptoJS提供了常见的对称加密算法,如AES(Advanced Encryption Standard)和DES(Data Encryption Standard)。这些算法使用相同的密钥进行加密和解密操作,适用于保护数据的机密性。
2.非对称加密:CryptoJS支持非对称加密算法,如RSA(Rivest-Shamir-Adleman)。非对称加密使用一对密钥,包括公钥和私钥,用于加密和解密数据。公钥用于加密数据,私钥用于解密数据,从而实现数据的机密性和身份认证。
3.哈希函数:CryptoJS提供了多种哈希函数,包括MD5、SHA-1、SHA-256等。哈希函数将任意长度的数据转换为固定长度的哈希值,用于数据完整性校验、密码存储和数字签名等应用。
4.加密模式:CryptoJS支持多种加密模式,如ECB(Electronic Codebook)、CBC(Cipher Block Chaining)和CTR(Counter)。这些模式定义了数据块如何被加密和连接在一起,以提供更强的安全性和数据保护。
CryptoJS易于使用,可以在浏览器环境和Node.js环境中使用。它提供了简洁的API,使开发人员能够轻松地执行加密和解密操作。使用CryptoJS,您可以在JavaScript中实现安全的数据传输、数据存储和身份验证等功能。

二、安装依赖
npm install crypto-js
三、加解密方法
  1. CryptoJS.AES 加解密,对称密钥加密算法
  • CryptoJS.AES.encrypt(message, key, options):使用AES算法对密文进行加密
  • CryptoJS.AES.decrypt(ciphertext, key, options):使用AES算法对密文进行解密,返回值需使用toString()转为字符串
    ‘’’
    message:要加密的消息,可以是字符串或 WordArray 对象。
    ciphertext:AES加密密文
    key:用于加密的密钥,可以是字符串、WordArray 对象或者一个包含字节的数组。
    options(可选):加密选项,如加密模式、填充方式等。
'''
message:要加密的消息,可以是字符串或 WordArray 对象。
ciphertext:AES加密密文
key:用于加密的密钥,可以是字符串、WordArray 对象或者一个包含字节的数组。
options(可选):加密选项,如加密模式、填充方式等。
'''
const cryptoJS = require('crypto-js')const message = "Hello, World!";
const key = "ThisIsTheSecretKey";const options = {iv: cryptoJS.enc.Hex.parse('0000000000000000'), // 初始化向量为全零,初始化向量用于增加密码算法的安全性。16 字节的字节数组或WordArray 对象mode: cryptoJS.mode.ECB, // 加密模式,默认为 ECBpadding: cryptoJS.pad.Pkcs7, // 加密模式,默认为 ECB
};const encrypted = cryptoJS.AES.encrypt(message, key, options);// 进行 AES 加密
const ciphertext = encrypted.toString(); // 获取加密后的密文
console.log('加密密文:',ciphertext);const decrypted  = cryptoJS.AES.decrypt(ciphertext, key, options)
console.log('解密明文',decrypted.toString(cryptoJS.enc.Utf8))
  1. Crypto.DES加解密,对称密钥加密算法
  • Crypto.DES.encrypt(message, key, options):使用DES算法对密文进行加密
  • Crypto.DES.decrypt(ciphertext, key, options):使用DES算法对密文进行解密,返回值需使用toString()转为字符串
'''
message:要加密的消息,可以是字符串或 WordArray 对象。
ciphertext:DES加密密文
key:用于加密的密钥,可以是字符串、WordArray 对象或者一个包含字节的数组。
options(可选):加密选项,如加密模式、填充方式等。
'''
const cryptoJS = require('crypto-js')const message = 'hello word';
const key = "ThisIsTheSecretKey";const options = {iv: cryptoJS.enc.Hex.parse('0000000000000000'), // 初始化向量为全零,初始化向量用于增加密码算法的安全性。16 字节的字节数组或WordArray 对象mode: cryptoJS.mode.ECB, // 加密模式,默认为 ECBpadding: cryptoJS.pad.Pkcs7, // 加密模式,默认为 ECB
};const encrypted = cryptoJS.DES.encrypt(message, key, options);
const ciphertext = encrypted.toString();console.log('加密密文:', ciphertext);const decrypted = cryptoJS.DES.decrypt(ciphertext, key, options);
console.log('解密明文:', decrypted.toString(cryptoJS.enc.Utf8))
  1. Crypto.TripleDES加解密,对称密钥加密算法,它是对经典的 DES(Data Encryption Standard)算法的改进和扩展。
  • Crypto.TripleDES.encrypt(message, key, options):使用TripleDES算法对密文进行加密
  • Crypto.TripleDES.decrypt(ciphertext, key, options):使用TripleDES算法对密文进行解密,返回值需使用toString()转为字符串
'''
message:要加密的消息,可以是字符串或 WordArray 对象。
ciphertext:DES加密密文
key:用于加密的密钥,可以是字符串、WordArray 对象或者一个包含字节的数组。
options(可选):加密选项,如加密模式、填充方式等。
'''
const cryptoJS = require('crypto-js')const message = 'hello word';
const key = "ThisIsTheSecretKey";const options = {iv: cryptoJS.enc.Hex.parse('0000000000000000'), // 初始化向量为全零,初始化向量用于增加密码算法的安全性。16 字节的字节数组或WordArray 对象mode: cryptoJS.mode.ECB, // 加密模式,默认为 ECBpadding: cryptoJS.pad.Pkcs7, // 加密模式,默认为 ECB
};const encrypted = cryptoJS.TripleDES.encrypt(message, key, options);
const ciphertext = encrypted.toString();console.log('加密密文:', ciphertext);const decrypted = cryptoJS.TripleDES.decrypt(ciphertext, key, options);
console.log('解密明文:', decrypted.toString(cryptoJS.enc.Utf8))
  1. Crypto.Blowfish加解密,对称密钥加密算法,是一种分组密码,可以对固定长度的数据块进行加密和解密操作
  • Crypto.Blowfish.encrypt(message, key,options):使用Blowfish算法对密文进行加密
  • Crypto.Blowfish.decrypt(ciphertext, key, options):使用Blowfish算法对密文进行解密,返回值需使用toString()转为字符串
    ‘’’
    message:要加密的消息,可以是字符串或 WordArray 对象。
    ciphertext:DES加密密文
    key:用于加密的密钥,可以是字符串、WordArray 对象或者一个包含字节的数组。
    options(可选):加密选项,如加密模式、填充方式等。
'''
message:要加密的消息,可以是字符串或 WordArray 对象。
ciphertext:DES加密密文
key:用于加密的密钥,可以是字符串、WordArray 对象或者一个包含字节的数组。
options(可选):加密选项,如加密模式、填充方式等。
'''
const cryptoJS = require('crypto-js')const message = 'hello word';
const key = "ThisIsTheSecretKey";const options = {iv: cryptoJS.enc.Hex.parse('0000000000000000'), // 初始化向量为全零,初始化向量用于增加密码算法的安全性。16 字节的字节数组或WordArray 对象mode: cryptoJS.mode.ECB, // 加密模式,默认为 ECBpadding: cryptoJS.pad.Pkcs7, // 加密模式,默认为 ECB
};const encrypted = cryptoJS.Blowfish.encrypt(message, key, options);
const ciphertext = encrypted.toString();console.log('加密密文:', ciphertext);const decrypted = cryptoJS.Blowfish.decrypt(ciphertext, key, options);
console.log('解密明文:', decrypted.toString(cryptoJS.enc.Utf8))
  1. Crypto.RC4加解密,流密码算法
  • Crypto.RC4.encrypt(message, key,options):使用RC4算法对密文进行加密
  • Crypto.RC4.decrypt(ciphertext, key, options):使用RC4算法对密文进行解密,返回值需使用toString()转为字符串
    ‘’’
    message:要加密的消息,可以是字符串或 WordArray 对象。
    ciphertext:DES加密密文
    key:用于加密的密钥,可以是字符串、WordArray 对象或者一个包含字节的数组。
    options(可选):加密选项,如加密模式、填充方式等。
'''
message:要加密的消息,可以是字符串或 WordArray 对象。
ciphertext:DES加密密文
key:用于加密的密钥,可以是字符串、WordArray 对象或者一个包含字节的数组。
options(可选):加密选项,如加密模式、填充方式等。
'''
const cryptoJS = require('crypto-js')const message = 'hello word';
const key = "ThisIsTheSecretKey";const options = {iv: cryptoJS.enc.Hex.parse('0000000000000000'), // 初始化向量为全零,初始化向量用于增加密码算法的安全性。16 字节的字节数组或WordArray 对象mode: cryptoJS.mode.ECB, // 加密模式,默认为 ECBpadding: cryptoJS.pad.Pkcs7, // 加密模式,默认为 ECB
};const encrypted = cryptoJS.RC4.encrypt(message, key, options);
const ciphertext = encrypted.toString();console.log('加密密文:', ciphertext);const decrypted = cryptoJS.RC4.decrypt(ciphertext, key, options);
console.log('解密明文:', decrypted.toString(cryptoJS.enc.Utf8))
  1. Crypto.RC4Drop加解密,流密码算法,RC4 算法的一种改进
  • Crypto.RC4Drop.encrypt(message, key,options):使用RC4Drop算法对密文进行加密
  • Crypto.RC4Drop.decrypt(ciphertext, key, options):使用RC4Drop算法对密文进行解密,返回值需使用toString()转为字符串
'''
message:要加密的消息,可以是字符串或 WordArray 对象。
ciphertext:DES加密密文
key:用于加密的密钥,可以是字符串、WordArray 对象或者一个包含字节的数组。
options(可选):加密选项,如加密模式、填充方式等。
'''
const cryptoJS = require('crypto-js')const message = 'hello word';
const key = "ThisIsTheSecretKey";const options = {iv: cryptoJS.enc.Hex.parse('0000000000000000'), // 初始化向量为全零,初始化向量用于增加密码算法的安全性。16 字节的字节数组或WordArray 对象mode: cryptoJS.mode.ECB, // 加密模式,默认为 ECBpadding: cryptoJS.pad.Pkcs7, // 加密模式,默认为 ECB
};const encrypted = cryptoJS.RC4Drop.encrypt(message, key, options);
const ciphertext = encrypted.toString();console.log('加密密文:', ciphertext);const decrypted = cryptoJS.RC4Drop.decrypt(ciphertext, key, options);
console.log('解密明文:', decrypted.toString(cryptoJS.enc.Utf8))
  1. Crypto.Rabbit加解密,流密码算法,用于加密和解密数据流
  • Crypto.Rabbit.encrypt(message, key,options):使用Rabbit算法对密文进行加密
  • Crypto.Rabbit.decrypt(ciphertext, key, options):使用Rabbit算法对密文进行解密,返回值需使用toString()转为字符串
    ‘’’
    message:要加密的消息,可以是字符串或 WordArray 对象。
    ciphertext:DES加密密文
    key:用于加密的密钥,可以是字符串、WordArray 对象或者一个包含字节的数组。
    options(可选):加密选项,如加密模式、填充方式等。
'''
message:要加密的消息,可以是字符串或 WordArray 对象。
ciphertext:DES加密密文
key:用于加密的密钥,可以是字符串、WordArray 对象或者一个包含字节的数组。
options(可选):加密选项,如加密模式、填充方式等。
'''
const cryptoJS = require('crypto-js')const message = 'hello word';
const key = "ThisIsTheSecretKey";const options = {iv: cryptoJS.enc.Hex.parse('0000000000000000'), // 初始化向量为全零,初始化向量用于增加密码算法的安全性。16 字节的字节数组或WordArray 对象mode: cryptoJS.mode.ECB, // 加密模式,默认为 ECBpadding: cryptoJS.pad.Pkcs7, // 加密模式,默认为 ECB
};const encrypted = cryptoJS.Rabbit.encrypt(message, key, options);
const ciphertext = encrypted.toString();console.log('加密密文:', ciphertext);const decrypted = cryptoJS.Rabbit.decrypt(ciphertext, key, options);
console.log('解密明文:', decrypted.toString(cryptoJS.enc.Utf8))
  1. Crypto.RabbitLegacy加解密,流密码算法,Rabbit算法的一个变种
  • Crypto.RabbitLegacy.encrypt(message, key,options):使用RabbitLegacy算法对密文进行加密
  • Crypto.RabbitLegacy.decrypt(ciphertext, key, options):使用RRabbitLegacy算法对密文进行解密,返回值需使用toString()转为字符串
    ‘’’
    message:要加密的消息,可以是字符串或 WordArray 对象。
    ciphertext:DES加密密文
    key:用于加密的密钥,可以是字符串、WordArray 对象或者一个包含字节的数组。
    options(可选):加密选项,如加密模式、填充方式等。
'''
message:要加密的消息,可以是字符串或 WordArray 对象。
ciphertext:DES加密密文
key:用于加密的密钥,可以是字符串、WordArray 对象或者一个包含字节的数组。
options(可选):加密选项,如加密模式、填充方式等。
'''
const cryptoJS = require('crypto-js')const message = 'hello word';
const key = "ThisIsTheSecretKey";const options = {iv: cryptoJS.enc.Hex.parse('0000000000000000'), // 初始化向量为全零,初始化向量用于增加密码算法的安全性。16 字节的字节数组或WordArray 对象mode: cryptoJS.mode.ECB, // 加密模式,默认为 ECBpadding: cryptoJS.pad.Pkcs7, // 加密模式,默认为 ECB
};const encrypted = cryptoJS.RabbitLegacy.encrypt(message, key, options);
const ciphertext = encrypted.toString();console.log('加密密文:', ciphertext);const decrypted = cryptoJS.RabbitLegacy.decrypt(ciphertext, key, options);
console.log('解密明文:', decrypted.toString(cryptoJS.enc.Utf8))
  1. CryptoJS.MD5(message):计算给定消息的MD5哈希值,返回值需使用toString()转为字符串
'''
message:要计算哈希值的消息,字符串或者WordArray对象
'''
const cryptoJS = require('crypto-js')const message = 'hello word';const wordArray = cryptoJS.x64.WordArray.create();
wordArray.init(message)console.log(cryptoJS.MD5(message).toString())
console.log(cryptoJS.MD5(wordArray).toString())
  1. CryptoJS.SHA256(message):计算给定消息的SHA-256哈希值,返回值需使用toString()转为字符串
'''
message:要计算哈希值的消息,字符串或者WordArray对象
'''
const cryptoJS = require('crypto-js')const message = 'hello word';const wordArray = cryptoJS.x64.WordArray.create();
wordArray.init(message)console.log(cryptoJS.SHA256(message).toString())
console.log(cryptoJS.SHA256(wordArray).toString())
  1. CryptoJS.SHA1(message):计算给定消息的SHA-1哈希值,返回值需使用toString()转为字符串
'''
message:要计算哈希值的消息,字符串或者WordArray对象
'''
const cryptoJS = require('crypto-js')const message = 'hello word';const wordArray = cryptoJS.x64.WordArray.create();
wordArray.init(message)console.log(cryptoJS.SHA1(message).toString())
console.log(cryptoJS.SHA1(wordArray).toString())
  1. CryptoJS.SHA224(message):计算给定消息的SHA-224哈希值,返回值需使用toString()转为字符串
'''
message:要计算哈希值的消息,字符串或者WordArray对象
'''
const cryptoJS = require('crypto-js')const message = 'hello word';const wordArray = cryptoJS.x64.WordArray.create();
wordArray.init(message)console.log(cryptoJS.SHA224(message).toString())
console.log(cryptoJS.SHA224(wordArray).toString())
  1. CryptoJS.SHA384(message):计算给定消息的SHA-384哈希值,返回值需使用toString()转为字符串
'''
message:要计算哈希值的消息,字符串或者WordArray对象
'''
const cryptoJS = require('crypto-js')const message = 'hello word';const wordArray = cryptoJS.x64.WordArray.create();
wordArray.init(message)console.log(cryptoJS.SHA384(message).toString())
console.log(cryptoJS.SHA384(wordArray).toString())
  1. CryptoJS.SHA512(message):计算给定消息的SHA-512哈希值,返回值需使用toString()转为字符串
'''
message:要计算哈希值的消息,字符串或者WordArray对象
'''const cryptoJS = require('crypto-js')const message = 'hello word';const wordArray = cryptoJS.x64.WordArray.create();
wordArray.init(message)console.log(cryptoJS.SHA512(message).toString())
console.log(cryptoJS.SHA512(wordArray).toString())
  1. CryptoJS.SHA3(message):计算给定消息的SHA-3哈希值,返回值需使用toString()转为字符串
'''
message:要计算哈希值的消息,字符串或者WordArray对象
'''const cryptoJS = require('crypto-js')const message = 'hello word';const wordArray = cryptoJS.x64.WordArray.create();
wordArray.init(message)console.log(cryptoJS.SHA3(message).toString())
console.log(cryptoJS.SHA3(wordArray).toString())
  1. CryptoJS.RIPEMD160(message):使用RIPEMD160哈希函数计算消息的哈希值。
'''
message:要计算哈希值的消息,字符串或者WordArray对象
'''const cryptoJS = require('crypto-js')const message = 'hello word';const wordArray = cryptoJS.x64.WordArray.create();
wordArray.init(message)console.log(cryptoJS.RIPEMD160(message).toString())
console.log(cryptoJS.RIPEMD160(wordArray).toString())
  1. CryptoJS.HmacMD5(message, key):使用HMAC(哈希消息认证码)算法和MD5哈希函数计算消息的哈希值。
'''
message:要加密的消息,可以是字符串或 WordArray 对象。
key:用于加密的密钥,可以是字符串、WordArray 对象或者一个包含字节的数组。
'''
const cryptoJS = require('crypto-js')const message = 'hello word';
const key = "ThisIsTheSecretKey";const wordArray = cryptoJS.x64.WordArray.create();
wordArray.init(message)console.log(cryptoJS.HmacMD5(message,key).toString())
console.log(cryptoJS.HmacMD5(wordArray,key).toString())
  1. CryptoJS.HmacSHA1(message, key):使用HMAC算法和SHA1哈希函数计算消息的哈希值。
'''
message:要加密的消息,可以是字符串或 WordArray 对象。
key:用于加密的密钥,可以是字符串、WordArray 对象或者一个包含字节的数组。
'''
const cryptoJS = require('crypto-js')const message = 'hello word';
const key = "ThisIsTheSecretKey";const wordArray = cryptoJS.x64.WordArray.create();
wordArray.init(message)console.log(cryptoJS.HmacSHA1(message,key).toString())
console.log(cryptoJS.HmacSHA1(wordArray,key).toString())
  1. CryptoJS.HmacSHA256(message, key):使用HMAC算法和SHA256哈希函数计算消息的哈希值。
'''
message:要加密的消息,可以是字符串或 WordArray 对象。
key:用于加密的密钥,可以是字符串、WordArray 对象或者一个包含字节的数组。
'''
const cryptoJS = require('crypto-js')const message = 'hello word';
const key = "ThisIsTheSecretKey";const wordArray = cryptoJS.x64.WordArray.create();
wordArray.init(message)console.log(cryptoJS.HmacSHA256(message,key).toString())
console.log(cryptoJS.HmacSHA256(wordArray,key).toString())
  1. CryptoJS.HmacSHA224(message, key):使用HMAC算法和SHA224哈希函数计算消息的哈希值。
'''
message:要加密的消息,可以是字符串或 WordArray 对象。
key:用于加密的密钥,可以是字符串、WordArray 对象或者一个包含字节的数组。
'''
const cryptoJS = require('crypto-js')const message = 'hello word';
const key = "ThisIsTheSecretKey";const wordArray = cryptoJS.x64.WordArray.create();
wordArray.init(message)console.log(cryptoJS.HmacSHA224(message,key).toString())
console.log(cryptoJS.HmacSHA224(wordArray,key).toString())
  1. CryptoJS.HmacSHA512(message, key);:使用HMAC算法和SHA512哈希函数计算消息的哈希值。
'''
message:要加密的消息,可以是字符串或 WordArray 对象。
key:用于加密的密钥,可以是字符串、WordArray 对象或者一个包含字节的数组。
'''
const cryptoJS = require('crypto-js')const message = 'hello word';
const key = "ThisIsTheSecretKey";const wordArray = cryptoJS.x64.WordArray.create();
wordArray.init(message)console.log(cryptoJS.HmacSHA512(message,key).toString())
console.log(cryptoJS.HmacSHA512(wordArray,key).toString())
  1. CryptoJS.HmacSHA384(message, key):使用HMAC算法和SHA384哈希函数计算消息的哈希值。
'''
message:要加密的消息,可以是字符串或 WordArray 对象。
key:用于加密的密钥,可以是字符串、WordArray 对象或者一个包含字节的数组。
'''
const cryptoJS = require('crypto-js')const message = 'hello word';
const key = "ThisIsTheSecretKey";const wordArray = cryptoJS.x64.WordArray.create();
wordArray.init(message)console.log(cryptoJS.HmacSHA384(message,key).toString())
console.log(cryptoJS.HmacSHA384(wordArray,key).toString())
  1. CryptoJS.HmacSHA3(message, key):使用HMAC算法和SHA3哈希函数计算消息的哈希值。
'''
message:要加密的消息,可以是字符串或 WordArray 对象。
key:用于加密的密钥,可以是字符串、WordArray 对象或者一个包含字节的数组。
'''
const cryptoJS = require('crypto-js')const message = 'hello word';
const key = "ThisIsTheSecretKey";const wordArray = cryptoJS.x64.WordArray.create();
wordArray.init(message)console.log(cryptoJS.HmacSHA3(message,key).toString())
console.log(cryptoJS.HmacSHA3(wordArray,key).toString())
  1. CryptoJS.HmacRIPEMD160(message, key):使用HMAC算法和RIPEMD160哈希函数计算消息的哈希值。
'''
message:要加密的消息,可以是字符串或 WordArray 对象。
key:用于加密的密钥,可以是字符串、WordArray 对象或者一个包含字节的数组。
'''const cryptoJS = require('crypto-js')const message = 'hello word';
const key = "ThisIsTheSecretKey";const wordArray = cryptoJS.x64.WordArray.create();
wordArray.init(message)console.log(cryptoJS.HmacRIPEMD160(message,key).toString())
console.log(cryptoJS.HmacRIPEMD160(wordArray,key).toString())
  1. CryptoJS.PBKDF2(password, salt,options):使用PBKDF2(密码基于密钥的派生函数)算法从密码和盐派生密钥,可以配合有密钥的算法,如:HmacMD5
'''
password:密码,作为生成密钥的输入。
salt:盐值,增加密码强度的随机值。
options:选项,包括密钥大小和迭代次数。
'''
const cryptoJS = require('crypto-js')const message = 'hello word';const password = 'myPassword';
const salt = 'somesalt';
const options = {keySize: 256 / 32, // 生成的密钥长度(以字节为单位)iterations: 1000, // 迭代次数
};const key = cryptoJS.PBKDF2(password, salt, options).toString();// 生成密钥const wordArray = cryptoJS.x64.WordArray.create();
wordArray.init(message)console.log(cryptoJS.HmacMD5(message,key).toString())
console.log(cryptoJS.HmacMD5(wordArray,key).toString())
  1. CryptoJS.EvpKDF(password, salt,options):使用EvpKDF(加密算法的密钥派生函数)从密码和盐派生密钥,可以配合有密钥的算法,如:HmacMD5
'''
password:密码,作为生成密钥的输入。
salt:盐值,增加密码强度的随机值。
options:选项,包括密钥大小和迭代次数。
'''
const cryptoJS = require('crypto-js')const message = 'hello word';const password = 'myPassword';
const salt = 'somesalt';
const options = {keySize: 256 / 32, // 生成的密钥长度(以字节为单位)iterations: 1000, // 迭代次数
};const key = cryptoJS.EvpKDF(password, salt, options).toString();// 生成密钥const wordArray = cryptoJS.x64.WordArray.create();
wordArray.init(message)console.log(cryptoJS.HmacMD5(message,key).toString())
console.log(cryptoJS.HmacMD5(wordArray,key).toString())
四、cryptoJS.x64 是 CryptoJS 库中用于处理 64 位整数

64 位整数是由 64 个二进制位组成的整数类型,可以表示的范围是从 -9223372036854775808 到 9223372036854775807

  1. CryptoJS.x64.Word.create(high, low):创建64 位整数的对象
'''
high:表示 64 位整数的高位
low:表示 64 位整数的低位
'''
const cryptoJS = require('crypto-js')const high = 66051
const low = 67438087
cryptoJS.x64.Word.create(high, low)
  1. CryptoJS.x64.WordArray.create(words, sigBytes):用给定的 64 位整数数组和字节数初始化一个 WordArray 对象
'''
words:CryptoJS.x64.Word数组
sigBytes:字节数的整数,指定字节数组的长度。
'''const message = 'hello word';
const high1 = 66051
const low1 = 67438087
const high2 = 404298267
const low2 = 471670303const wordArray = cryptoJS.x64.WordArray.create();
wordArray.init(message)const wordArray1 = cryptoJS.x64.WordArray.create([cryptoJS.x64.Word.create(high1, low1),cryptoJS.x64.Word.create(high2, low2)], 10);
wordArray1.init(message)
  1. CryptoJS.x64.WordArray.toX32(): 将 WordArray 对象转换为 32 位整数数组的形式
  2. CryptoJS.x64.WordArray.clone():克隆一个 WordArray 对象
五、填充方式
  1. CryptoJS.pad.Pkcs7:使用 PKCS7 填充方式。这是最常用的填充方式,会在原始数据的末尾添加字节,使得数据长度符合加密算法的要求。
  2. CryptoJS.pad.AnsiX923:使用 ANSI X.923 填充方式。在原始数据的末尾添加字节,其中最后一个字节表示填充的长度。
  3. CryptoJS.pad.Iso10126:使用 ISO 10126 填充方式。在原始数据的末尾添加字节,其中最后一个字节表示填充的长度,其他填充字节为随机值。
  4. CryptoJS.pad.Iso97971:使用 ISO/IEC 9797-1 填充方式。在原始数据的末尾添加字节,其中所有填充字节都为 0x00。
  5. CryptoJS.pad.ZeroPadding:使用零填充方式。在原始数据的末尾添加字节,使得数据长度符合加密算法的要求,填充字节都为 0x00。
  6. CryptoJS.pad.NoPadding:不进行填充。如果原始数据的长度不符合加密算法的要求,会抛出异常。
六、加密模式
  1. CryptoJS.mode.CBC:使用 CBC (Cipher-Block Chaining) 模式。在 CBC 模式中,每个明文块会与前一个密文块进行异或操作,然后再进行加密。
  2. CryptoJS.mode.CFB:使用 CFB (Cipher Feedback) 模式。在 CFB 模式中,前一个密文块会被加密,然后与当前的明文块进行异或操作,得到当前的密文块。
  3. CryptoJS.mode.CTR:使用 CTR (Counter) 模式。在 CTR 模式中,通过使用一个计数器和密钥生成密钥流,然后将密钥流与明文进行异或操作,得到密文。
  4. CryptoJS.mode.CTRGladman:Gladman 版本的 CTR 模式。它是 CryptoJS 库中的一个特殊实现,与标准的 CTR 模式略有不同。
  5. CryptoJS.mode.OFB:使用 OFB (Output Feedback) 模式。在 OFB 模式中,通过使用一个初始化向量和密钥生成密钥流,然后将密钥流与明文进行异或操作,得到密文。
  6. CryptoJS.mode.ECB:使用 ECB (Electronic Codebook) 模式。在 ECB 模式中,每个明文块都会被独立加密,没有前后依赖关系。
七、编码
  1. Crypto.enc.Hex.stringify(wordArray): 将 CryptoJS 编码的数据转换为十六进制字符串,返回字符串
  2. Crypto.enc.Hex.parse(hexStr): 将十六进制字符串转换为 CryptoJS 编码的数据,返回WordArray对象
  3. Crypto.enc.Latin1.stringify(wordArray): 将 CryptoJS 编码的数据转换为 Latin-1 字符串(ISO-8859-1),返回字符串
  4. Crypto.enc.Latin1.parse(latin1Str): 将 Latin-1 字符串转换为 CryptoJS 编码的数据,返回WordArray对象
  5. Crypto.enc.Utf8.stringify(wordArray): 将 CryptoJS 编码的数据转换为 UTF-8 字符串,返回字符串
  6. Crypto.enc.Utf8.parse(utf8Str): 将 UTF-8 字符串转换为 CryptoJS 编码的数据,返回WordArray对象
  7. Crypto.enc.Utf16BE.stringify(wordArray): 将 CryptoJS 编码的数据转换为大端序(Big Endian)UTF-16 字符串,返回字符串
  8. Crypto.enc.Utf16BE.parse(utf16BEStr): 将大端序(Big Endian)UTF-16 字符串转换为 CryptoJS 编码的数据,返回WordArray对象
  9. Crypto.enc.Utf16.stringify(wordArray): 将 CryptoJS 编码的数据转换为平台字节序(Platform Endian)UTF-16 字符串,返回字符串
  10. Crypto.enc.Utf16.parse(utf16Str): 将平台字节序(Platform Endian)UTF-16 字符串转换为 CryptoJS 编码的数据,返回WordArray对象
  11. Crypto.enc.Utf16LE.stringify(wordArray): 将 CryptoJS 编码的数据转换为小端序(Little Endian)UTF-16 字符串,返回字符串
  12. Crypto.enc.Utf16LE.parse(utf16LEStr): 将小端序(Little Endian)UTF-16 字符串转换为 CryptoJS 编码的数据,返回WordArray对象
  13. Crypto.enc.Base64.stringify(wordArray): 将 CryptoJS 编码的数据转换为 Base64 字符串,返回字符串
  14. Crypto.enc.Base64.parse(base64Str): 将 Base64 字符串转换为 CryptoJS 编码的数据,返回WordArray对象
  15. Crypto.enc.Base64url.stringify(wordArray): 将 CryptoJS 编码的数据转换为 Base64 URL 安全字符串,返回字符串
  16. Crypto.enc.Base64url.parse(base64urlStr): 将 Base64 URL 安全字符串转换为 CryptoJS 编码的数据,返回WordArray对象

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/140316.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

async/await

异步的终极解决方案:async/await 1. 背景 在深入讨论 async/await 之前,我们需要了解一下 JavaScript 的单线程和非阻塞的特性。JavaScript 是单线程的,也就是说在任何给定的时间点,只能执行一个操作。然而,对于需要…

Unity 使用INI文件存储数据或配置参数预设

法1:调用外部Capi库 具体使用: public class Ini{//读取INI文件需要调用C的APP[System.Runtime.InteropServices.DllImport("kernel32")]private static extern long WritePrivateProfileString(string section, string key, string val, st…

强大好用的shell:shell命令

命令名称:就是语法中的“动词”,表达的是想要做的事情,例如创建用户、查看文件、重启系统等操作。 命令参数:用于对命令进行调整让“修,改”过的命令能更好地贴合工作需求,达到事半功倍的效果。 命令对象&a…

Linux各种版本安装详细步骤和root密码破解

文章目录 VMware新建虚拟机硬件设置设置虚拟网络挂载ISO文件 root密码破解 VMware新建虚拟机 硬件设置 设置虚拟网络 编辑>虚拟网络编辑器>VMnet8(NAT模式) 挂载ISO文件 加电>开启次虚拟机 第二项可以检查挂载上来的iso文件是否完整没有破坏 磁盘分区 选自定义分…

k8s的Init Containers容器实现代码版本升级发布和deployment版本回退:实战操作版

Pod中的初始化容器:Init Containers initContainers实现理论前提:同一个Pod内的容器共享 网络、volume等资源 Init Containers 在Kubernetes中,init容器是在同一个Pod中的其他容器之前启动和执行的容器。它的目的是为Pod上托管的主应用程序执行初始化…

Linux yum,vim详解

yum是什么 yum是一个Linux系统预装的指令,yum的功能是可以对app进行搜索,下载,相当于Linux下的应用商店。 yum是读取Linux中镜像文件中的网页地址,下载用户所输入的命令。 如何使用yum下载软件 yum install -y(所有选项都yes) …

IntelliJ Idea 撤回git已经push的操作

最初的样子 现在的样子 解决方案 第一步,commit到本地撤回: 打开提交历史记录,选中回退的版本右键,点击“Reset Current Branch to Here…”,然后选中“Mixed”,点击Reset后,之前commit的代码会在本地显…

UnityAI——动物迁徙中的跟随实现实例

大家好,我是七七,今天来给大家介绍的是Unity中用操控行为实现的跟随领队行为。 看本文若是想了解和实现,只看本文即可,若是想彻底弄透,建议从七七的游戏AI专栏开始看。 废话不多说,先上视频: …

SpringBean生命周期

SpringBean的创建过程的生命周期可以分为 通过构造方法创建普通对象对普通对象属性进行依赖注入(被Autowired注解修饰的变量)执行初始化前的操作(被PostConstruct注解修饰的方法)执行初始化操作(需要实现Initializing…

UDP网络编程

一)熟悉TCP/IP五层协议: 1)封装:就是在数据中添加一些辅助传输的信息; 2)分用:就是解析这些信息 3)发送数据的时候,上层协议要把数据交给下层协议,由下层协议来添加一些信息 4)接收数据的时候,下层协议要把数据交给上层协议&#…

c语言-数据结构-栈和队列的实现和解析

目录 一、栈 1、栈的概念 1.2 栈的结构 2、栈的创建及初始化 3、压栈操作 4、出栈操作 5、显示栈顶元素 6、显示栈空间内元素的总个数 7、释放栈空间 8、测试栈 二、队列 1、队列的概念 1.2 队列的结构 2、队列的创建及初始化 3、入队 4、出队 5、显示队头、队…

番外 1 : Java 环境下的 selenium 搭建

Java 环境下的 selenium 搭建 一 . 下载谷歌浏览器二 . 下载谷歌浏览器驱动2.1 查看谷歌浏览器版本2.2 下载对应版本的谷歌驱动2.3 解压下载好的驱动压缩包 , 将下载好的 chromedriver.exe 放到java 系统环境变量下 三 . 下载 Edge 浏览器的驱动3.1 查看 Edge 浏览器的版本3.2 …

带有密码的Excel只读模式,如何取消?

Excel文件打开之后发现是只读模式,想要退出只读模式,但是只读模式是带有密码的,该如何取消带有密码的excel只读文件呢? 带有密码的只读模式,是设置了excel文件的修改权限,取消修改权限,我们需要…

Go,14周年[译]

国内的双十一购物狂欢已没有了当年的那种热闹与喧嚣,但大洋彼岸的Go团队却始终保持稳中有增的开发和语言演进节奏。今晨Go核心团队的Russ Cox[1]代表Go语言项目团队在Go官博上发表了《Fourteen Years of Go》[2]的博文,纪念Go语言开源14周年[3]&#xff…

FCOS难点记录

FCOS 中有计算 特征图(Feature map中的每个特征点到gt_box的左、上、右、下的距离) 1、特征点到gt_box框的 左、上、右、下距离计算 x coords[:, 0] # h*w,2 即 第一列y coords[:, 1] l_off x[None, :, None] - gt_boxes[..., 0][:, No…

XXE XML外部实体注入

XXE 外部实体注入 一, 简介 XXE(XML External Entity Injection)是一种 XML 注入攻击,它利用了 XML 解析器在处理 XML 文档时存在的漏洞。 攻击者通过在 XML 文档中插入外部实体的引用,可以引导 XML 解析器读取攻击者控制的外部…

编程艺术之源:深入了解设计模式和设计原则

深入了解设计模式和设计原则 一、认识设计模式1.1、设计模式是什么?1.2、设计模式是怎么来的?1.3、设计模式解决了什么问题? 二、设计模式的基础2.1、面向对象思想2.2、设计原则 三、如何学习设计模式3.1、明确目的3.2、学习步骤 总结 一、认…

Linux服务器从零开始训练 RT-DETR 改进项目 (Ultralytics) 教程,改进RTDETR算法(包括使用训练、验证、推理教程)

手把手从零开始训练 RT-DETR 改进项目 (Ultralytics版本) 教程,改进RTDETR算法 本文以Linux服务器为例:从零开始使用Linux训练 RT-DETR 算法项目 《芒果剑指 RT-DETR 目标检测算法 改进》 适用于芒果专栏改进RT-DETR算法 文章目录 百度 RT-DETR 算法介绍改进网络代码汇总第…

CAD Exchanger SDK 有什么新内容?

CAD 交换器 3.23.0,2023 年 11 月强调:- 添加了新版本格式的导入:Autodesk Inventor 2023 和 2024、NX 2306。- 文档经过重大修改,使其更易于导航。它也是现在包含有关 SDK、Web Toolkit 和 Manufacturing Toolkit 的全面信息&…

SQL 存储过程优化

问题:一个复杂的6个表的left jion 语句,发现设置为定时任务后最高时长为18分钟 1、原因分析:对复杂SQL 进行拆分验证 发现是合同明细表和 产品表的left jion 时间过长,发现 合同明细表每天为3w条,之前做过优化 对每个…