99 lines
2.7 KiB
JavaScript
99 lines
2.7 KiB
JavaScript
/**
|
||
* @class UniCrypto 数据加密服务
|
||
* @function init 初始化函数
|
||
* @function showConfig 返回配置信息函数
|
||
* @function getCrypto 返回原始crypto对象函数
|
||
* @function aesEncode AES加密函数
|
||
* @function aesDecode AES解密函数
|
||
* @function md5 MD5加密函数
|
||
*/
|
||
const crypto = require('crypto')
|
||
module.exports = class UniCrypto {
|
||
constructor(config) {
|
||
this.init(config)
|
||
}
|
||
|
||
/**
|
||
* 配置初始化函数
|
||
* @param {Object} config
|
||
*/
|
||
init(config) {
|
||
this.config = {
|
||
//AES加密默认参数
|
||
AES: {
|
||
mod: 'aes-128-cbc',
|
||
pasword: 'UniStat!010',
|
||
iv: 'UniStativ',
|
||
charset: 'utf8',
|
||
encodeReturnType: 'base64'
|
||
},
|
||
//MD5加密默认参数
|
||
MD5: {
|
||
encodeReturnType: 'hex'
|
||
},
|
||
...config || {}
|
||
}
|
||
return this
|
||
}
|
||
|
||
/**
|
||
* 返回配置信息函数
|
||
*/
|
||
showConfig() {
|
||
return this.config
|
||
}
|
||
|
||
/**
|
||
* 返回原始crypto对象函数
|
||
*/
|
||
getCrypto() {
|
||
return crypto
|
||
}
|
||
|
||
/**
|
||
* AES加密函数
|
||
* @param {String} data 加密数据明文
|
||
* @param {String} encodeReturnType 返回加密数据类型,如:base64
|
||
* @param {String} key 密钥
|
||
* @param {String} iv 偏移量
|
||
* @param {String} mod 模式
|
||
* @param {String} charset 编码
|
||
*/
|
||
aesEncode(data, encodeReturnType, key, iv, mod, charset) {
|
||
const cipher = crypto.createCipheriv(mod || this.config.AES.mod, key || this.config.AES.pasword, iv ||
|
||
this.config.AES.iv)
|
||
let crypted = cipher.update(data, charset || this.config.AES.charset, 'binary')
|
||
crypted += cipher.final('binary')
|
||
crypted = Buffer.from(crypted, 'binary').toString(encodeReturnType || this.config.AES.encodeReturnType)
|
||
return crypted
|
||
}
|
||
|
||
/**
|
||
* AES解密函数
|
||
* @param {Object} crypted 加密数据密文
|
||
* @param {Object} encodeReturnType 返回加密数据类型,如:base64
|
||
* @param {Object} key 密钥
|
||
* @param {Object} iv 偏移量
|
||
* @param {Object} mod 模式
|
||
* @param {Object} charset 编码
|
||
*/
|
||
aesDecode(crypted, encodeReturnType, key, iv, mod, charset) {
|
||
crypted = Buffer.from(crypted, encodeReturnType || this.config.AES.encodeReturnType).toString('binary')
|
||
const decipher = crypto.createDecipheriv(mod || this.config.AES.mod, key || this.config.AES.pasword,
|
||
iv || this.config.AES.iv)
|
||
let decoded = decipher.update(crypted, 'binary', charset || this.config.AES.charset)
|
||
decoded += decipher.final(charset || this.config.AES.charset)
|
||
return decoded
|
||
}
|
||
|
||
/**
|
||
* @param {Object} str 加密字符串
|
||
* @param {Object} encodeReturnType encodeReturnType 返回加密数据类型,如:hex(转为16进制)
|
||
*/
|
||
md5(str, encodeReturnType) {
|
||
const md5Mod = crypto.createHash('md5')
|
||
md5Mod.update(str)
|
||
return md5Mod.digest(encodeReturnType || this.config.MD5.encodeReturnType)
|
||
}
|
||
}
|