欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

RN - jsencrypt 非对称加解密(分段加解密)

程序员文章站 2024-03-14 15:43:10
...

/******************************加密相关***********************************/
/*文本通过socket发送需要加密*/

/**
 * [getPublicKey 获取公钥]
 * @param  {[type]} publicKeyString [公钥字符串]
 */
function getPublicKey(publicKeyString){
  return '-----BEGIN PUBLIC KEY-----' + publicKeyString + '-----END PUBLIC KEY-----';
}

/**
 * [getPrivateKey 获取私钥]
 * @param  {[type]} publicKeyString [私钥字符串]
 */
function getPrivateKey(privateKeyString){
  return '-----BEGIN RSA PRIVATE KEY-----' + privateKeyString + '-----END RSA PRIVATE KEY-----';
}

/**
 * [rsaEncrypt 文本加密]
 * @param  {[type]} publicKey [公钥]
 * @param  {[type]} content   [内容]
 */
function rsaEncrypt(publicKey, content){

  console.log('publicKey',publicKey)
  console.log('要加密的所有内容',content);

  let encrypt = new JSEncrypt();
  encrypt.setPublicKey(publicKey);

  // 要加密的文本超出最大字符限制,则分段加密
  let ct = []
  let maxLength = 20
  if (content.length > maxLength) {
    lt = content.match(/.{1,20}/g);
    console.log('文本数组===',lt);
    lt.map((item, index)=>{
      console.log('要加密的文字',item);
      let t1 = encrypt.encrypt(item);
      console.log('加密后的文字',t1);
      console.log('密后的文字的长度',t1.length);
      ct.push(t1)
    })
    return ct
  }

  return [encrypt.encrypt(content)]
}

/**
 * [rsaDecrypt 文本解密]
 * @param  {[type]} publicKey [私钥]
 * @param  {[type]} content   [加密后的内容[]]
 */
function rsaDecrypt(privateKey, content) {
  console.log('privateKey',privateKey)
  if (content == undefined) return
  // 如果是分段加密的,则要分段解密
  let ct = ''
  content.map((item,index)=>{
    let decrypt = new JSEncrypt();
    decrypt.setPrivateKey(privateKey);

    console.log('要分段解密的=====',item);
    let t1 = decrypt.decrypt(item);
    console.log('解密结果========',t1);
  
    ct += t1;
  })
  return ct
}

转载于:https://www.jianshu.com/p/9c0f442afb49