首页 > 其他分享 >jsencrypt rsa 中文 分片

jsencrypt rsa 中文 分片

时间:2024-11-16 13:45:20浏览次数:1  
标签:DemoRSA const 分块 offset 加解密 rsa let 分片 jsencrypt

<template>
  <div>
    <h1>RSA 分块加解密 Demo</h1>
    <textarea v-model="text" placeholder="输入要加密的文本"></textarea>
    <button @click="encryptText">加密</button>
    <p>加密后的文本(Base64 编码):{{ encryptedText }}</p>
    <button @click="decryptText">解密</button>
    <p>解密后的文本:{{ decryptedText }}</p>
  </div>
</template>

<script>
import JSEncrypt from 'jsencrypt';

export default {
  data() {
    return {
      text: 'RSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 DemoRSA 分块加解密 Demo',
      encryptedText: '',
      decryptedText: '',
      publicKey: `MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArgbzDkO1fpSJQTFI4U8eCJKNSOsYUfsxNF/Xsy/cShDpCAYQpKGFaexXinAw29TGykF9yX/ZkqL4Vnz3/f1PU/WVvfhJ5CG48NJh1HCiyE8SJDy5bNULs2krYtvoh05rypJX9g7h+ugzfu1QTpxloYjmonwENpaFv2lwTugcD2hjoCxo+UJUumlP/Z8hZ62MNtWDRgU9mgwKK6zOnIiw1nS/MYP+Kde9N5N+9aVE+ILvA8IDXXstPC28AkjSyeoSVlZyGIWDQMxi3ePDo1HOepffsW4utp74xDCH60ImwgpZmeoIH8Sa9g5Oyv0aRLkxMOLjZqbtMOczAReAJvrzbwIDAQAB`,
      privateKey: `MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCuBvMOQ7V+lIlBMUjhTx4Iko1I6xhR+zE0X9ezL9xKEOkIBhCkoYVp7FeKcDDb1MbKQX3Jf9mSovhWfPf9/U9T9ZW9+EnkIbjw0mHUcKLITxIkPLls1QuzaSti2+iHTmvKklf2DuH66DN+7VBOnGWhiOaifAQ2loW/aXBO6BwPaGOgLGj5QlS6aU/9nyFnrYw21YNGBT2aDAorrM6ciLDWdL8xg/4p1703k371pUT4gu8DwgNdey08LbwCSNLJ6hJWVnIYhYNAzGLd48OjUc56l9+xbi62nvjEMIfrQibCClmZ6ggfxJr2Dk7K/RpEuTEw4uNmpu0w5zMBF4Am+vNvAgMBAAECggEACHmHKZkrg/wIyRd01KANNt6oKbZlK0zfwwytzOiWQjcbmgvtkI7bF+LuCmxXPMVaXuwci40B0+3CyTdxvjkxPUX24lbuhkEMKBIeuIE5tCaBnCkm4IFpffWvqrNJ2hj8D9Pbm7xyzcy0AUjeQc3E9z5a+OuwKtZesgkY8obEIw3eSJ+jShMUTZp/hx7zxtxziYFYj7RAKuRamRTuJcn2eTUpZtqx9ambDXLklKXhrXJS7er2Ev5jAKL/eh+21OS2oMcQlrCP9jRFygxv41hOhbAn3/F3KVM6uEE3T7jtEBks2L5KdwuNEfvDSeJsDxeEcHu5Q+JwQKE6uYVIeal3RQKBgQDPgXR4fPYO6sE4fpocuUjpLJ+4nQO8UIS36RjHR2i59UCT+KpAIskEe9J+l0mT/2/bk6NWvGujFsp/COjkOgzd3uNGxlAfjBVbwuaKRmtyD68iCCiLtr0ir2fj+65LQ29A/uHYfrnGnAu5uy7l2RXKas6G0IpohQ2GzPAo16irjQKBgQDWso63hGj1bEne+fzihoJIpKt1eEqhKRSoVXdVhc4qhfNZEAOrJhg/7ZxXegjio3yvtrdSCDfETHONawV0glg1wDAKp2w+OZv01MjZmyEq93fgQ+VAmEu2wl62tezpP8eorL9/DZwBgkAVeJZCvMSG5ibUsl7DZHZM4/rnQbCd6wKBgGp2KKOIuVV97BRoH/mMtnOriWbWaAw941nYJfZYFMsToUZJ1k+BiVDblmuMgxuDeohVfwAJO9A46Tuz/ojZn7BVopW1OXZ2EJ87p7xZ1NZ4ZYo4VVUZNICPLeYyQoIq3vGh042XtwjHFtz7xFv4vM1VbxCL/fcSDJaUnsLVopwhAoGBALIrnjp33O6G/krX5OBMRgRo+41R1YUm5WjI/G5xy2UIoqlvm8vFomwzEQKbWJJUoF3l4P5nqXfzBhX/EZjdrrx0kKnWxQJipqUojMHhdkYE9mubjL3tZS/238j68u+iqVu2eHjE34l1AR+QYgpiQym8B8+Ncwzt6yrmK0sM/bgfAoGBAKnAVUkmXuUaFJ7l0QkcVVAa5Uyzs4922WqBbBSQOOdVMVKzB0BvRpazUM/5geurAgpCV4Cs1w267D6AY5+gh+6eM5fCwzvttNdf3O2MyLz1w2z7AlPQhWTUJYkQ1FpvT0i8DV51NtcMM/pSZsFtizMIYd7jPfKz/QG5SafHiAqe`
    };
  },
  methods: {
    encryptLongText(text, publicKey) {
      const encrypt = new JSEncrypt({ default_key_size: 2048 });
      encrypt.setPublicKey(publicKey);
      //utf-8编码
      let bytes = new TextEncoder('utf-8').encode(text);
      //字节数组转base64
      const base64EncodedText = btoa(String.fromCharCode(...bytes));

      //分块 245字节
      let chunks = [];
      let offset = 0;
      while (offset < base64EncodedText.length) {
        let end = Math.min(offset + 245, base64EncodedText.length);
        chunks.push(base64EncodedText.slice(offset, end));
        offset = end;
      }

      //每块 rsa加密  return {string} the encrypted string encoded in base64
      let encryptedChunks = chunks.map(chunk => encrypt.encrypt(chunk));

      //base64 转 字符串 //atob == Base64格式转字符串编码
      encryptedChunks = encryptedChunks.map(chunk => atob(chunk));
      //拼接起来 字符串 转 最终base64
      return btoa(encryptedChunks.join(""));
    },
    decryptLongText(encryptedText, privateKey) {
      const decrypt = new JSEncrypt({ default_key_size: 2048 });
      decrypt.setPrivateKey(privateKey);

      //因为加密串为base64编码,需要将base64解码 //atob == Base64格式转字符串编码
      const base64DecodedText = atob(encryptedText);
      //分块 256字节
      let chunks = [];
      let offset = 0;
      while (offset < base64DecodedText.length) {
        let end = Math.min(offset + 256, base64DecodedText.length);
        //btoa == 字符串编码为Base64格式
        chunks.push(btoa(base64DecodedText.slice(offset, end)));
        offset = end;
      }

      //对每一块分别进行rsa解密
      let decryptedChunks = chunks.map(chunk => decrypt.decrypt(chunk));

      //将Base64编码的字符串转换回字节数组
      const decryptedBytes = Uint8Array.from(atob(decryptedChunks.join("")), c => c.charCodeAt(0));
      //使用TextDecoder将字节数组转换回UTF-8编码的字符串
      const decoder = new TextDecoder('utf-8');
      const decryptedText = decoder.decode(decryptedBytes);
      //转原始字符串
      return decryptedText;
    },
    encryptText() {
      this.encryptedText = this.encryptLongText(this.text, this.publicKey);
      this.decryptedText = '';
    },
    decryptText() {
      this.decryptedText = this.decryptLongText(this.encryptedText, this.privateKey);
    }
  }
};
</script>

<style scoped>
textarea {
  width: 100%;
  height: 100px;
  margin-bottom: 10px;
}

button {
  margin-right: 5px;
}
</style>

标签:DemoRSA,const,分块,offset,加解密,rsa,let,分片,jsencrypt
From: https://www.cnblogs.com/herenwei-wayne/p/18549310

相关文章

  • Universal_Robots_ROS2_Driver实现UR机械臂仿真控制(2)
    目录一、最终效果展示二、整体架构三、模块说明四、模块接口说明一、最终效果展示效果展示实现UR机械臂指定位姿控制结果分析move.cpp:期望位姿;rviz2:检测到的位姿;ur_sim:机械臂的实际位姿位姿:位置(position)和姿态(orientation)通过观察可以发现,经过轨迹规......
  • GAN, Generative Adversarial Networks(生成式对抗网络)
    深度学习中最有趣的领域–GAN,GenerativeAdversarialNetworks(生成式对抗网络)GAN的基础概念GAN被“卷积网络之父”YannLeCun(杨立昆)誉为「过去十年计算机科学领域最有趣的想法之一」,是近年来火遍全网,AI研究者最为关注的深度学习技术方向之一。生成式对抗网络,简称G......
  • mongos 分片集群
    1、先配置配置服务器,113-114两个集群,端口27018,配置文件/etc/mongod27018.conf,服务mongod27018.servicemongo--host127.0.0.1--port27018useadmindb.auth('root','password')rs.stauts()2、配置分片服务器113-1186个分片,每个分片又是一个单独的集群模式,端口27017......
  • RSA加解密实战(CTF)
    这个实战题目来源于我参加的某海外CTF比赛原题,由于这个题目相较于一般的RSA加密方式有些许差别,个人感觉比较有趣且不难懂,于是拿来分享。对于RSA加密的基本认识一、什么是RSA加密算法        RSA加密是一种非对称加密方式,使用2种密钥分别对数据进行加解密: ......
  • 【论文笔记】VCoder: Versatile Vision Encoders for Multimodal Large Language Mode
    ......
  • 现代密码-公钥密码RSA
    实验介绍:一个密钥(公钥)是公开的,另一个密钥(私钥)必须保密,且由公钥求解私钥的计算是不可行的。RSA1选取质数p和q(pq不可公开)2计算n=pq,φ(n)=(p-1)(q-1)3随机选取整数e作为公钥,要求1<e<φ(n),e和φ(n)互质如果不互质,就没有逆元,算不出私钥。4计算私钥d,怎么计算呢,使用欧几里得算法先......
  • The 3rd Universal Cup. Stage 16: Nanjing
    B.BirthdayGift把原始串的偶数位取反,题目从消除相同就可以转换为消除不同。因此只要有不同位,就一定可以消除。因此最终剩下的串一定是全0或者全1。因此答案就是翻转后的1、0之差。我们用2尽可能的减少0,1只差即可。#include<bits/stdc++.h>#definelllonglongvo......
  • [GWCTF 2019]babyRSA
    fromCrypto.Util.numberimport*fromgmpy2import*fromsympyimport*p=797862863902421984951231350430312260517773269684958456342860983236184129602390919026048496119757187702076499551310794177917920137646835888862706126924088411570997141257159563952......
  • RSA加密解密参考
    python写的RSA加密流程,做题时参考。代号是标准的代号。fromCrypto.Util.numberimport*importgmpy2importlibnum#importuuid#print(uuid.uuid4())#产生两个大素数p=libnum.generate_prime(1024)q=libnum.generate_prime(1024)#定义模数nn=p*qe=65537#公钥#欧......
  • 【SpringBoot开发】 文件上传 (秒传、断点续传、分片上传)
    原创Java技术前沿引言文件上传在软件开发项目中极为常见,涵盖了图片、音频、视频及各类文档的上传需求。对于小型文件,简单的Form表单上传机制通常足以应对。然而,当面对体积庞大的文件,如超过1GB的文件,或用户处于网络条件不佳的环境下时,传统的上传方式便显得力不从心。试想,用户......