uni-crypto.js 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /**
  2. * @class UniCrypto 数据加密服务
  3. * @function init 初始化函数
  4. * @function showConfig 返回配置信息函数
  5. * @function getCrypto 返回原始crypto对象函数
  6. * @function aesEncode AES加密函数
  7. * @function aesDecode AES解密函数
  8. * @function md5 MD5加密函数
  9. */
  10. const crypto = require('crypto')
  11. module.exports = class UniCrypto {
  12. constructor(config) {
  13. this.init(config)
  14. }
  15. /**
  16. * 配置初始化函数
  17. * @param {Object} config
  18. */
  19. init(config) {
  20. this.config = {
  21. //AES加密默认参数
  22. AES: {
  23. mod: 'aes-128-cbc',
  24. pasword: 'UniStat!010',
  25. iv: 'UniStativ',
  26. charset: 'utf8',
  27. encodeReturnType: 'base64'
  28. },
  29. //MD5加密默认参数
  30. MD5: {
  31. encodeReturnType: 'hex'
  32. },
  33. ...config || {}
  34. }
  35. return this
  36. }
  37. /**
  38. * 返回配置信息函数
  39. */
  40. showConfig() {
  41. return this.config
  42. }
  43. /**
  44. * 返回原始crypto对象函数
  45. */
  46. getCrypto() {
  47. return crypto
  48. }
  49. /**
  50. * AES加密函数
  51. * @param {String} data 加密数据明文
  52. * @param {String} encodeReturnType 返回加密数据类型,如:base64
  53. * @param {String} key 密钥
  54. * @param {String} iv 偏移量
  55. * @param {String} mod 模式
  56. * @param {String} charset 编码
  57. */
  58. aesEncode(data, encodeReturnType, key, iv, mod, charset) {
  59. const cipher = crypto.createCipheriv(mod || this.config.AES.mod, key || this.config.AES.pasword, iv ||
  60. this.config.AES.iv)
  61. let crypted = cipher.update(data, charset || this.config.AES.charset, 'binary')
  62. crypted += cipher.final('binary')
  63. crypted = Buffer.from(crypted, 'binary').toString(encodeReturnType || this.config.AES.encodeReturnType)
  64. return crypted
  65. }
  66. /**
  67. * AES解密函数
  68. * @param {Object} crypted 加密数据密文
  69. * @param {Object} encodeReturnType 返回加密数据类型,如:base64
  70. * @param {Object} key 密钥
  71. * @param {Object} iv 偏移量
  72. * @param {Object} mod 模式
  73. * @param {Object} charset 编码
  74. */
  75. aesDecode(crypted, encodeReturnType, key, iv, mod, charset) {
  76. crypted = Buffer.from(crypted, encodeReturnType || this.config.AES.encodeReturnType).toString('binary')
  77. const decipher = crypto.createDecipheriv(mod || this.config.AES.mod, key || this.config.AES.pasword,
  78. iv || this.config.AES.iv)
  79. let decoded = decipher.update(crypted, 'binary', charset || this.config.AES.charset)
  80. decoded += decipher.final(charset || this.config.AES.charset)
  81. return decoded
  82. }
  83. /**
  84. * @param {Object} str 加密字符串
  85. * @param {Object} encodeReturnType encodeReturnType 返回加密数据类型,如:hex(转为16进制)
  86. */
  87. md5(str, encodeReturnType) {
  88. const md5Mod = crypto.createHash('md5')
  89. md5Mod.update(str)
  90. return md5Mod.digest(encodeReturnType || this.config.MD5.encodeReturnType)
  91. }
  92. }