node.js 中的加密解密算法

const crypto = require('crypto')
const fs = require('fs')

// let secret_key = 'My name is Tengxi'
// // 加密
// const hash = crypto.createHmac('sha256', secret_key).update('Happy new Year').digest('hex')
// console.log('加密的結果')
// console.log(hash)

// MD5(單向散列算法):輸入任意長度的信息,經過處理,輸出爲128位的信息(數字指紋);不同的輸入得到的不同的結果(唯一性);根據128位的輸出結果不可能反推出輸入的信息(不可逆)
// 把上述例子中sha256改成md5就是md5加密算法


// HMAC
// 用於創建加密的 HMAC 摘要,不能使用new直接創建HMAC對象
// 用法
// 作爲可讀寫的流,其中寫入數據以在可讀側生成計算後的 HMAC 摘要。
// 使用 hmac.update() 和 hmac.digest() 方法生成計算後的 HMAC 摘要
// sha256是算法名稱,哈希值長度是256位 安全散列算法(Secure Hash Algorithm)SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512是一系列
// hex 表示十六進制
// digest() 默認返回二進制結果 如果提供了encoding返回字符串 否則返回buffer digest以後不能多次調用hash對象,會引起錯誤


// HMAC 對象作爲流的用法
// const hmac = crypto.createHmac('sha256', secret_key)
// hmac.on('readable', () => {
//   // 哈希流只會生成一個元素。
//   const data = hmac.read()
//   if (data) {
//     console.log(data.toString('hex'))
//   }
// });

// hmac.write('Happy new Year')
// hmac.end()

// 公鑰加密解密
// 公鑰是用於創建只有私鑰的擁有者能夠讀出的加密數據,以及對私鑰的擁有者的簽名進行驗證
// 私鑰是用於解密數據以及對數據進行簽名
// 用Cipher加密
// 創建cipher對象
// AES-256-CBC: 高級加密標準 256祕鑰長度 CBC模式
// AES加密數據塊分組長度必須爲128比特,密鑰長度可以是128比特、192比特、256比特中的任意一個(如果數據塊及密鑰長度不足時,會補齊)
const password = '123456'
const data = '生下來活下去'
const aseEncode = function (data, password) {
    const cipher = crypto.createCipher('aes192', password) // 創建cipher對象
    let crypted = cipher.update(data, 'utf-8', 'base64') // update方法來指定需要被加密的數據, 如果第二個參數不指定的話,第一個參數只能是buffer對象,第三個參數是輸出加密數據時候的編碼格式,可選值爲hex,binary,base64,不寫返回存了加密數據的buffer對象
    crypted += cipher.final('base64') // 在使用了cipher對象的final方法後,不能再向cipher對象中追加加密數據
    return crypted
}

console.log(aseEncode(data, password))


const secret_data = 'e6b48f8237decd24a970186ad6ac998757f4b06490d32390dbd4081ee415a43d'
const aseDecode = function (data, password) {
    const decipher = crypto.createDecipher('aes192', password)
    let originData = decipher.update(data, 'base64', 'utf-8')
    originData += decipher.final('utf-8')
    return originData
}

console.log(aseDecode(secret_data, password))

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章