例:
beforeEncry = “20120524” //加密前
key = “abcdefgh12345678” // 秘钥
小程序端
引入crypto-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 () {
}
})