1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- /**
- * @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)
- }
- }
|