首页 > 编程知识 正文

3des加密算法的密钥长度,rsa加密算法属于什么密码

时间:2023-05-06 21:31:14 阅读:134078 作者:3666

importjsencryptfrom ' js encrypt ' varcryptojs=require (' crypto js ); //setPublicKey设置公钥//setPrivateKey设置私钥//公钥加密、私钥解密//私钥设置签名、公钥验证//1024位base64加密设置签名为SHA1//2048位base64xxxxx '; //H5-前端-rsa私钥varprivateGatewayKeyRSA='ryption 数据加密] * @param  {[Object]} config [加密前数据例如:{keyHex:"",data:{}}] * @return {[type]} [加密后数据] */function dataEncryption(config){    let newTokenId = localStorage.getItem('gatewayTokenId') || '1';    let publicParam = {'random':randomWord(true, 24, 24),'tokenId': newTokenId};    let tempToken = parseInt(newTokenId) + 1;    localStorage.setItem("gatewayTokenId",tempToken);    config.keyHex = publicParam.random;    //对随机数进行RSA加密    config.data.sign = verify.encrypt(config.keyHex);      if (config.data.input) {        //随机数        config.data.input['random'] = publicParam.random;        //序列        config.data.input['tokenId'] = publicParam.tokenId;    }else{        config.data.input = {};    }    // window.atob转码,window.atob解码    //使用私钥生成签名    config.data.checkSign = fxREASign.sign(JSON.stringify(config.data.input),CryptoJS.SHA256, "sha256");    // 2048位签名,生产checkSign的长度必须为344位    // 如果不够344为则需要重新生成数据,重新生成随机数等    if(config.data.checkSign.length < 344){        return dataEncryption(config);    };    //进行3DES 加密    let tmp = des3Encrypt(JSON.stringify(config.data.input), config.keyHex);    //console.log(config.url+"-request-----");    config.data.input = tmp;    return config;}/** * [dataEncryption 数据解密] * @param  {[Object]} config [加密前数据例如:{keyHex:"",data:{}}] * @return {[type]} [解密后数据] */function dataDecrypt(response){      //解密      let keyHex  = fxREASign.decrypt(response.data.sign);// 第一步取出随机密钥>>> 使用RSA解密      response.data.data = des3Decrypt(response.data.data, keyHex);//对数据进行解密,转换为json字符串      //验证签名      response.data.verified  = verify.verify(response.data.data,response.data.data.checkSign, CryptoJS.SHA256);    return response;}//添加请求拦截器axios.interceptors.request.use(function(config) {    //  console.log("加密前参数",config.data);      //加密处理      if (config.isEncryption) {          config = dataEncryption(config);      }          //  console.log("加密后参数",config.data);      return config;  },function(error) {      //请求错误时做些事      return Promise.reject(error);  });    //添加响应拦截器axios.interceptors.response.use(function(response) {    //是否是加密数据    if(response.config.isEncryption){        let odata = {'respCode':'','respMsg':'',output:{}};        //解密        if (response.data.data) {            //解密+验证明签名            response=dataDecrypt(response)            //验签通过后            if(response.verified){                if (response.data.data.output) {                    response.data.data.output = JSON.parse(response.data.data.output);                }                odata['respCode'] = response.data.data.respCode;                odata['respMsg'] = response.data.data.respMsg;            }else{                odata['respCode'] = '999999';                odata['respMsg'] = '签名校验失败';            }        }        return Promise.resolve({data:odata.output});    }else{        return response;    }},function(error) {    console.log(error.config);    //请求错误时做些事    return Promise.reject(error);});

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。