微信小程序 AES 加密方法

本文介绍了如何在微信小程序中实现AES加密。通过引入并使用util.js和AES.js两个关键文件,详细阐述了加密和解密的步骤,为微信小程序的数据安全提供了保障。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引用方法

const aesUtil = require('../utils/util.js')

let encrypt = aesUtil.encrypt('要加密的东西','秘钥')

let decrypt = aesUtil.decrypt('要解密的东西','秘钥')

util.js 文件

const CryptoJS = require("./AES.js").CryptoJS; //引用AES源码js 

//加密方法
const encrypt = ({
     word, keyStr }) => {
   
  keyStr = keyStr ? keyStr : "12345678900";
  let key = CryptoJS.enc.Utf8.parse(keyStr);
  let srcs = CryptoJS.enc.Utf8.parse(word);
  let encrypted = CryptoJS.AES.encrypt(srcs, key, {
   
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7,
  });
  return encrypted.toString();
};
//解密方法
const decrypt = ({
     word, keyStr }) => {
   
  keyStr = keyStr ? keyStr : "1234567890";
  var key = CryptoJS.enc.Utf8.parse(keyStr);
  var decrypt = CryptoJS.AES.decrypt(word, key, {
   
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7,
  });
  return CryptoJS.enc.Utf8.stringify(decrypt).toString();
};

module.exports = {
   
  encrypt,
  decrypt,
};

AES.JS

var t = t || function (t, e) {
   
  var r = {
   }, i = r.lib = {
   }, n = function () {
    }, o = i.Base = {
   
    extend: function (t) {
   
      n.prototype = this;
      var e = new n();
      return t && e.mixIn(t), e.hasOwnProperty("init") || (e.init = function () {
   
        e.$super.init.apply(this, arguments);
      }), e.init.prototype = e, e.$super = this, e;
    },
    create: function () {
   
      var t = this.extend();
      return t.init.apply(t, arguments), t;
    },
    init: function () {
    },
    mixIn: function (t) {
   
      for (var e in t) t.hasOwnProperty(e) && (this[e] = t[e]);
      t.hasOwnProperty("toString") && (this.toString = t.toString);
    },
    clone: function () {
   
      return this.init.prototype.extend(this);
    }
  }, s = i.WordArray = o.extend({
   
    init: function (t, e) {
   
      t = this.words = t || [], this.sigBytes = void 0 != e ? e : 4 * t.length;
    },
    toString: function (t) {
   
      return (t || a).stringify(this);
    },
    concat: function (t) {
   
      var e = this.words, r = t.words, i = this.sigBytes;
      if (t = t.sigBytes, this.clamp(), i % 4) for (var n = 0; n < t; n++) e[i + n >>> 2] |= (r[n >>> 2] >>> 24 - n % 4 * 8 & 255) << 24 - (i + n) % 4 * 8; else if (65535 < r.length) for (n = 0; n < t; n += 4) e[i + n >>> 2] = r[n >>> 2]; else e.push.apply(e, r);
      return this.sigBytes += t, this;
    },
    clamp: function () {
   
      var e = this.words, r = this.sigBytes;
      e[r >>> 2] &= 4294967295 << 32 - r % 4 * 8, e.length = t.ceil(r / 4);
    },
    clone: function () {
   
      var t = o.clone.call(this);
      return t.words = this.words.slice(0), t;
    },
    random: function (e) {
   
      for (var r = [], i = 0; i < e; i += 4) r.push(4294967296 * t.random() | 0);
      return new s.init(r, e);
    }
  }), c = r.enc = {
   }, a = c.Hex = {
   
    stringify: function (t) {
   
      var e = t.words;
      t = t.sigBytes;
      for (var r = [], i = 0; i < t; i++) {
   
        var n = e[i >>> 2] >>> 24 - i % 4 * 8 & 255;
        r.push((n >>> 4).toString(16)), r.push((15 & n).toString(16));
      }
      return r.join("");
    },
    parse: function (t) {
   
      for (var e = t.length, r = [], i = 0; i < e; i += 2) r[i >>> 3] |= parseInt(t.substr(i, 2), 16) << 24 - i % 8 * 4;
      return new s.init(r, e / 2);
    }
  }, f = c.Latin1 = {
   
    stringify: function (t) {
   
      var e = t.words;
      t = t.sigBytes;
      for (var r = [], i = 0; i < t; i++) r.push(String.fromCharCode(e[i >>> 2] >>> 24 - i % 4 * 8 & 255));
      return r.join("");
    },
    parse: function (t) {
   
      for (var e = t.length, r = [], i = 0; i < e; i++) r[i >>> 2] |= (255 & t.charCodeAt(i)) << 24 - i % 4 * 8;
      return new s.init(r, e);
    }
  }, h = c.Utf8 = {
   
    stringify: function (t) {
   
      try {
   
        return decodeURIComponent(escape(f.stringify(t)));
      } catch (t) {
   
        throw Error("Malformed UTF-8 data");
      }
    },
    parse: function (t) {
   
      return f.parse(unescape(encodeURIComponent(t)));
    }
  }, u = i.BufferedBlockAlgorithm = o.extend({
   
    reset: function () {
   
      this._data = new s.init(), this._nDataBytes = 0;
    },
    _append: function (t) {
   
      "string" == typeof t && (t = h.parse(t)), this._data.concat(t), this._nDataBytes += t.sigBytes;
    },
    _process: function (e) {
   
      var r = this._data, i = r.words, n = r.sigBytes, o = this.blockSize, c = n / (4 * o);
      if (e = (c = e ? t.ceil(c) : t.max((0 | c) - this._minBufferSize, 0)) * o, n = t.min(4 * e, n),
        e) {
   
        for (var a = 0; a < e; a += o) this._doProcessBlock(i, a);
        a = i.splice(0, e), r.sigBytes -= n;
      }
      return new s.init(a, n);
    },
    clone: function () {
   
      var t = o.clone.call(this);
      return t._data = this._data.clone(), t;
    },
    _minBufferSize: 0
  });
  i.Hasher = u.extend({
   
    cfg: o.extend(),
    init: function (t) {
   
      this.cfg = this.cfg.extend(t), this.reset();
    },
    reset: function () {
   
      u.reset.call(this), this._doReset();
    },
    update: function (t) {
   
      return this._append(t), this._process(), this;
    },
    finalize: function (t) {
   
      return t && this._append
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值