小程序AES 加解密记录,后台python加解密

1 篇文章 0 订阅
1 篇文章 0 订阅

例:
beforeEncry = “20120524” //加密前
key = “abcdefgh12345678” // 秘钥

小程序端
引入crypto-js.js
引入js文件
加解密
第一张重点 中 padding: CryptoJS.pad.NoPadding 中的NoPadding 为不补位 找了很多示例文档大多数用的Pkcs7
在这里插入图片描述
后台python
def aesEncrypt(key, data):
‘’’
AES的ECB模式加密方法
:param key: 密钥
:param data:被加密字符串(明文)
:return:密文
‘’’
key = key.encode(‘utf8’)
= AES.new(key, AES.MODE_ECB)
# 加密后得到的是bytes类型的数据,使用Base64进行编码,返回byte字符串
result = cipher.encrypt(data.encode())
encodestrs = base64.b64encode(result)
enctext = encodestrs.decode(‘utf8’)
return enctext

S2 = aesEncrypt(key, S1)

def aesDecrypt(key, data):
‘’’
:param key: 密钥
:param data: 加密后的数据(密文)
:return:明文
‘’’
key = key.encode(‘utf8’)
data = base64.b64decode(data)
cipher = AES.new(key, AES.MODE_ECB)
text = cipher.decrypt(data)
text = text.decode(‘utf8’)
return text
开始用的 Pkcs7 后台给的值加密值是 ‘mZGHwyKKbyGT+h4h9gcwQg==’ 解密出来应该是‘123456789’ 实际解密不出来~!
原因是python 对位数不够不不处理的,意思是不补位,而我这边开始用的Pkcs7 意思是补位的,所以解密不出来,
用Pkcs7 加密‘123456789’ 出来是 mZGHwyKKbyGT+h4h9gcwQjxn+Gfwo2FahhAczYkJ+wo= ,
在这里插入图片描述
2个字段前半段一样~!开始用的Pkcs7 找了半天不知道原因!最后终于发现用NoPadding!就好了~1,
参考 https://zhuanlan.zhihu.com/p/184968023

// pages/controlUnit/controlUnit.js
const api = require('../../request/api/api')
const CryptoJS = require('../../aes/crypto-js')
var startPoint;
Page({

  /**
   * 页面的初始数据
   */
  data: {
   
  },
  enAES(key, str) {
    const encrypt = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(str), CryptoJS.enc.Utf8.parse(key), {
      iv:[],
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.NoPadding
    });
    return encrypt.toString();
  },
  
  deAES(key, str) {
    var decrypt = CryptoJS.AES.decrypt(str, CryptoJS.enc.Utf8.parse(key), {
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.NoPadding
    });
    return decrypt.toString(CryptoJS.enc.Utf8);
  },

  buttonEnd: function (e) {
  },

 
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    this.getInfo()
    // let date= (parseInt(Date.parse(new Date())/1000)).toString().slice(2,)

    console.log(CryptoJS)
    let s1 = '123456789       '//需要16位字符不足16位空格补齐
    let key = "abcdefgh12345679"
    let s2= this.enAES(key,s1)
    let s4=this.deAES(key,s2)
    
    console.log('s1-》》》>未加密'+s1)
    console.log('后台给的值-》》》》mZGHwyKKbyGT+h4h9gcwQg==')
    console.log('s2-》》》》已加密'+s2)
    console.log('s4-》》》》已解密'+s4)
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值