• 前端RSA加解密(支持超长分段)


        过程不复杂, 只是网上结合后端的RSA加解密资料参差不齐, 比较零散, 而且大多博文都是基于最原始的RSA加解密, 当加解密参数过长的时候, 会报[Message too long for RSA]

        解决方案, 找了一圈, 都不大完整, 完整的又很复杂, 加了一堆方法, 看着都头疼! 其实加解密的本质都一样的, 无非就是加解的过程问题, 我们知道加密过程, 那解密就是反推的事儿.

        在此记录下, 方便自己和有需要的小伙伴能够快速找到!  什么原理什么逻辑就不废话了, 直接上代码!

    1. html>
    2. <html>
    3. <head>
    4.     <title>aes demotitle>
    5.     <meta http-equiv="Content-Type" content="text/html" charset="gbk"/>
    6.     <style>
    7.         *{margin:0;padding:0}
    8.         .demo-wrap{width: 600px;height: 50px;margin: 50px auto auto auto}
    9.     style>
    10.     <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js">script>
    11.     <script src="http://passport.cnblogs.com/scripts/jsencrypt.min.js">script>
    12. head>
    13. <body>
    14. <div class="demo-wrap">
    15.     <div  style="padding: 1rem 0">
    16.         <button type="button" onclick="rsa_encrypt()">RSA加密button>
    17.         <br/>
    18.         加密后的数据:<label id="rsa_encrypted">label>
    19.     div>
    20.     <div>
    21.         <button type="button" onclick="rsa_decrypt()">RSA解密button>
    22.         <br/>
    23.         解密后的数据:<label id="rsa_decrypted">label>
    24.     div>
    25. div>
    26.     <script type="text/javascript">
    27.         function rsa_encrypt() {
    28.             var data = "张三, 你好啊!";
    29.             var publicKey = "-----BEGIN PUBLIC KEY-----自己的公钥-----END PUBLIC KEY-----";
    30.             var en = new JSEncrypt();
    31.             en.setPublicKey(publicKey);
    32.             let num = Math.ceil(data.length/117)
    33.             let dataArr = [];
    34.             for(let i=0;i
    35.                 if (parseInt(117*(i+1))<=data.length) {
    36.                     dataArr[i] = data.substring(117*i,117*(i+1));
    37.                 } else {
    38.                     dataArr[i] = data.substring(117*i,data.length);
    39.                 }
    40.                 dataArr[i] = CryptoJS.enc.Base64.parse(en.encrypt(dataArr[i]));
    41.             }
    42.             document.getElementById("rsa_encrypted").innerHTML = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Hex.parse(dataArr.join('')));
    43.         }
    44.         function rsa_decrypt() {
    45.             var data = "NdaCEc2HCEgTk1OQoWbfvj0KZwaKTDfn9CSpskkuHYZe2hEW0t72WwmXQOGHoLz9rqSm4uqbYT4uBrCky8WQFZHEdEsIwqk1YK2vatgaRgqb7cW7UxGrxsR8fqtYICTZlfju9TvNWGoTsJVJR+etMiVpEF4kshuKx1V2I9QM8ps=";
    46.             data = CryptoJS.enc.Hex.stringify(CryptoJS.enc.Base64.parse(data));
    47.             var privateKey = "-----BEGIN RSA PRIVATE KEY-----自己的私钥-----END RSA PRIVATE KEY-----";
    48.             
    49.             var en = new JSEncrypt();
    50.             en.setPrivateKey(privateKey);
    51.             let num = Math.ceil(data.length/256);
    52.             let dataArr = [];
    53.             for(let i=0;i
    54.                 if (parseInt(256*(i+1))<=data.length) {
    55.                     dataArr[i] = data.substring(256*i,256*(i+1));
    56.                 } else {
    57.                     dataArr[i] = data.substring(256*i,data.length);
    58.                 }
    59.                 dataArr[i] = en.decrypt(CryptoJS.enc.Base64.stringify(CryptoJS.enc.Hex.parse(dataArr[i])));
    60.             }
    61.             document.getElementById("rsa_decrypted").innerHTML = dataArr.join('');
    62.         }
    63.     script>
    64. body>
    65. html>

  • 相关阅读:
    ZCMU--1577: 食堂的蛋饼
    多线程(线程互斥)
    (2022 COLING)Context-Tuning情景化提示
    【C语言】解题训练
    HTML5期末大作业dreamweaver作业静态HTML网页设计——甜点店(11页) 学生网页设计作品
    sqoop1.4.7完全支持Hadoop3.x, Hive3.x Hbase2.x
    h5页面回退到微信小程序并携带参数
    数据库基础知识
    java毕业设计儿童教育系统Mybatis+系统+数据库+调试部署
    CAS核心思想、底层实现
  • 原文地址:https://blog.csdn.net/u011271894/article/details/139740015