Nodejs crypto密码模块

crypto安装

$ npm install crypto

crypto使用

createHash

适用于md4,md5,sha1,sha2(sha224,sha384,sha256,sha512)等

let sha1 = crypto.createHash('sha1').update('AppBlog.CN');
let md5 = crypto.createHash('md5').update("AppBlog.CN");
let sha2 = crypto.createHash('sha256').update('AppBlog.CN');

console.log(sha1.digest('hex'))
console.log(md5.digest('hex'))
console.log(sha2.digest('hex'))

createHmac可以理解为用随机数“增强”的哈希算法,加salt

let Hmd5 = crypto.createHmac('md5', 'salt').update('AppBlog.CN');  
console.log(Hmd5.digest('hex'))

AES对称加密

在AES的规格中,密钥长度只有128、192和256比特三种

128bit = 16字节

let data = '123456'
let password = 'baby'
const cipher = crypto.createCipher('aes192', password)
let encrypted = cipher.update(data, 'utf-8', 'hex')
encrypted += cipher.final('hex')
console.log(encrypted);

Nodejs声明crypto.createCipher()废弃,建议使用crypto.createCipheriv()代替

密码学分组模式推荐使用CBC(密文分组链接)和CTR(计数器)模式
分组模式默认为CBC,aes-128-cbcaes128,初始化向量iv不可缺省
也可使用CTR模式,如:aes-128-ctr

加密结果通常有两种表示方法:hex和base64,这些功能Nodejs全部都支持,但是在应用中要注意,如果加解密双方一方用Nodejs,另一方用Java、PHP等其它语言,需要仔细测试。如果无法正确解密,要确认双方是否遵循同样的AES算法,字符串密钥和IV是否相同,加密后的数据是否统一为hex或base64格式。

加密

const key = Buffer.from('Hello, PrettyGirl', 'utf8');
let cipheriv = crypto.createCipheriv('aes-128-cbc', key, key);
let encrypted = cipheriv.update('I love you', 'utf8', 'hex');
encrypted += cipheriv.final('hex')
console.log(encrypted)

解密

const cipheriv = crypto.createDecipheriv('aes128', key, key);
let decrypted = cipheriv.update('63fc3b6fb3513831c3189d9eee92a1ed', 'hex', 'utf8');
decrypted += cipheriv.final('utf8')
console.log(decrypted)

AES 密码

// 加密
encrypt (plaintText) {
    let options = {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    }
    let key = CryptoJS.enc.Utf8.parse(keys)
    let encryptedData = CryptoJS.AES.encrypt(JSON.stringify(plaintText), key, options)
    //对象
    // var ciphertext = CryptoJS.AES.encrypt(JSON.stringify(data), 'secret key 123');
    let encryptedBase64Str = encryptedData.toString()
    return encryptedBase64Str
},

// 解密
/*
 * {param} plaintText 解密密文
 * return  str 解密结果
 */
decrypt (encryptedBase64Str) {
    // eslint-disable-next-line no-redeclare

    let options = {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    }
    let key = CryptoJS.enc.Utf8.parse(keys)
    // 解密
    let decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, options)
    // 解密后,需要按照Utf8的方式将明文转位字符串
    // console.log(decryptedData)
    let decryptedStr = JSON.parse(decryptedData.toString(CryptoJS.enc.Utf8))

    return decryptedStr
}

版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/02/23/nodejs-crypto-password-module/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
Nodejs crypto密码模块
crypto安装 $ npm install crypto crypto使用 createHash 适用于md4,md5,sha1,sha2(sha224,sha384,sha256,sha512)等 let sha1 = crypto.createHash('sha……
<<上一篇
下一篇>>
文章目录
关闭
目 录