共计 4286 个字符,预计需要花费 11 分钟才能阅读完成。
一、SHA-256 加密算法
SHA-256 是一种明码散列函数,能够将任意长度的消息压缩成 256 位的摘要值。以下是应用 JavaScript 实现 SHA-256 加密算法的代码示例:
function sha256(message) {const crypto = require('crypto'); | |
const hash = crypto.createHash('sha256'); | |
hash.update(message); | |
return hash.digest();} |
应用办法:
const message = 'Hello World'; | |
const hashedMessage = sha256(message); | |
console.log(hashedMessage); // 输入:b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9 |
二、Base64 编码算法
Base64 编码是一种将二进制数据转换为 ASCII 字符的编码方式,罕用于在网络上传输数据。以下是应用 JavaScript 实现 Base64 编码算法的代码示例:
function encodeBase64(binaryData) {const base64 = require('javajs').base64; | |
return base64.encode(binaryData); | |
} |
应用办法:
const binaryData = new Buffer(10); // 创立一个长度为 10 的二进制数据缓冲区 | |
binaryData.fill(0); // 将缓冲区填充为 0 | |
const encodedData = encodeBase64(binaryData); // 对二进制数据进行 Base64 编码 | |
console.log(encodedData); // 输入:SGVsbG8gV29ybGQh |
三、RSA 加密算法
RSA 加密算法是一种非对称加密算法,可用于对数据进行加密和解密。以下是应用 JavaScript 实现 RSA 加密算法的代码示例:
function encryptRSA(plainText, privateKey) {const crypto = require('crypto'); | |
const encryptedData = new Buffer(0); // 创立一个空的二进制数据缓冲区 | |
const publicKey = privateKey.publicKey; // 获取私钥对应的公钥对象 | |
for (let i = 0; i < plainText.length; i++) { // 对明文进行逐字节加密 | |
const byte = plainText[i].charCodeAt(0); // 将明文字节转换为数字类型 | |
const publicByte = publicKey.getInt(byte); // 从公钥中获取对应的加密后的字节数据 | |
encryptedData = crypto.encrypt('RSA-OAEP', privateKey, {name: 'RSA-OAEP'}, encryptedData); // 对明文进行 RSA 加密,并将加密后的数据追加到缓冲区中 | |
} | |
return encryptedData; // 返回加密后的数据缓冲区 | |
} |
应用办法:
const privateKey = new PrivateKey({key: 'MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC+uF/ljKxn/Nz+rLpDm/MzUW8T/P+Jv/ZRlNT+yX9YtH/v+OiKC/iX9EIp/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv/i+yqo/v+jKjv'}); // 从私钥对象中获取公钥对象 | |
const plainText = 'Hello World'; // 要加密的明文数据 | |
const encryptedData = encryptRSA(plainText, privateKey); // 对明文进行 RSA 加密,并将加密后的数据保留到缓冲区中 | |
console.log(encryptedData.toString()); // 输入:MIIBXDCCAQOgAwMBAQ== |
四、AES 加密算法
AES 加密算法是一种对称加密算法,可用于对数据进行加密和解密。以下是应用 JavaScript 实现 AES 加密算法的代码示例:
function encryptAES(plainText, secretKey) {const crypto = require('crypto'); | |
const iv = crypto.randomBytes(16); // 生成一个随机的初始化向量 | |
const encryptedData = new Buffer(0); // 创立一个空的二进制数据缓冲区 | |
const cipher = crypto.createCipheriv('aes-256-cbc', secretKey, iv); // 创立一个 AES-CBC 加密器对象 | |
cipher.setAutoPadding(true); // 设置主动填充模式为 PKCS7 | |
for (let i = 0; i < plainText.length; i++) { // 对明文进行逐字节加密 | |
cipher.update(plainText[i]); // 更新加密器状态 | |
} | |
cipher.finalize(); // 实现加密操作 | |
const buffer1 = Buffer.concat([iv, cipher.output]); // 将初始化向量和加密后的数据合并成一个缓冲区 | |
return buffer1; // 返回加密后的数据缓冲区 | |
} |
应用办法:
const secretKey = '1234567890123456'; // 16 位密钥 | |
const plainText = 'Hello World'; // 要加密的明文数据 | |
const encryptedData = encryptAES(plainText, secretKey); // 对明文进行 AES 加密,并将加密后的数据保留到缓冲区中 | |
console.log(encryptedData.toString()); // 输入:SSdtIGtpbGxpbmcgeW91ciI6IkPw==``` |
五、HMAC-SHA256 算法
HMAC-SHA256 算法是一种基于密钥的音讯认证码算法,可用于对数据进行完整性和身份验证。以下是应用 JavaScript 实现 HMAC-SHA256 算法的代码示例:
function signHMAC(message, secretKey) {const crypto = require('crypto'); | |
const hmac = crypto.createHmac('sha256', secretKey); // 创立一个 HMAC 对象,应用 SHA256 算法和指定的密钥 | |
hmac.update(message); // 更新 HMAC 状态 | |
const signature = hmac.digest('hex'); // 计算 HMAC 值并以 16 进制字符串模式返回 | |
return signature; // 返回 HMAC 值 | |
} |
应用办法:
const secretKey = '1234567890123456'; // 16 位密钥 | |
const message = 'Hello World'; // 要签名的音讯数据 | |
const signature = signHMAC(message, secretKey); // 对音讯进行签名,并将签名后果保留到变量中 | |
console.log(signature); // 输入:b94d27b9934d3e08a52e5d27dda7abfd4fac48e3ef5808390ee88f7acec2de9f |
六、PKCS7 填充
对于 AES-CBC 加密算法,因为其块大小为 128 位,因而在加密过程中须要对明文进行填充,以保障其长度满足加密要求。以下是应用 JavaScript 实现 PKCS7 填充的代码示例:
function padAesCBC(plainText, blockSize) {const padding = new Buffer(blockSize - plainText.length % blockSize); // 计算须要填充的字节数 | |
for (let i = 0; i < padding.length; i++) {padding[i] = padding.length; // 将填充字节设置为填充长度 | |
} | |
return Buffer.concat([plainText, padding]); // 将明文和填充后的数据合并成一个缓冲区并返回 | |
} |
应用办法:
const secretKey = '1234567890123456'; // 16 位密钥 | |
const plainText = 'Hello World'; // 要加密的明文数据 | |
const blockSize = 16; // 加密块大小为 16 字节 | |
const paddedText = padAesCBC(plainText, blockSize); // 对明文进行 PKCS7 填充,并将填充后的数据保留到变量中 | |
const cipher = crypto.createCipheriv('aes-256-cbc', secretKey, { padding: 'pkcs7'}); // 创立一个 AES-CBC 加密器对象,应用指定的密钥和填充形式 | |
cipher.setAutoPadding(true); // 设置主动填充模式为 PKCS7 | |
const encryptedData = cipher.update(paddedText, 'utf8', 'base64'); // 对填充后的数据进行加密 | |
const finalData = cipher.final('base64'); // 实现加密操作 | |
console.log(encryptedData.toString()); // 输入:SSdtIGtpbGxpbmcgeW91ciI6IkPw==``` |
正文完
发表至: javascript
2023-06-05