这里只是针对于作者本人在对项目加密的过程中遇到的问题进行解析
1.中文汉字加密失败
解决方法:使用base64对参数先进行编码,然后再加密,但是要和后端配合,后端在解参数的时候,也要先进行base64解码之后再进行解密
npm install --save js-base64
Base64.encode() 编码
Base64.decode() 解码
import CryptoJS from 'crypto-js'
let Base64 = require('js-base64').Base64
export default{
encryptAesBody (data) {
const aesKey = '公钥';
const key = CryptoJS.enc.Utf8.parse(aesKey);
const result = CryptoJS.AES.encrypt(Base64.encode(JSON.stringify(data)), key, {
iv : CryptoJS.enc.Utf8.parse(aesKey.substr(0, 16)),
mode : CryptoJS.mode.ECB,
padding : CryptoJS.pad.Pkcs7
}).toString();
return result
},
}
2.浏览器自动将加密的加号(+)变成空格 ,导致后端解码失败
使用encodeURIComponent对加密后的参数的特殊符号进行处理一下
let [e1, data1] = await store.dispatch('api/deliverClientKey', encodeURIComponent(publickey1))//publickey1是加密后的参数
3.当前端使用jsrsasign去获取得到的密钥,密钥无法正常使用
生成的密钥是带空格的转译符号的,我们获取到密钥之后,需要对对应的空格符号进行删除
str.replace(/\r\n/g, '')
4.出现加密文字过长
情景:之前加密案一http://t.csdn.cn/sgAjF提到的,使用rsa加密,然后使用aes解密,jsencrypt加密的时候,稍微文本长一点点就很容易出现Message too long for RSA 然后使用当时encryptlong加密,可以处理长文本,项目中的百分之90的接口的参数都可以满足,但是项目中有一个接口参数加密之后达到了2万以上,后端接受参数的时候,会偶现自动截掉后半部分,导致接口添加失败,所以就使用了方案二的验签 http://t.csdn.cn/41MXu,然后使用aes加密解密,aes没有文本上限。
考虑过使用sm2国密,但是领导没让用哈哈哈,
4906

被折叠的 条评论
为什么被折叠?



