加密过程中常见的问题

这里只是针对于作者本人在对项目加密的过程中遇到的问题进行解析

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国密,但是领导没让用哈哈哈,

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值