JSEncrypt長(zhǎng)文本分段加解密 解決長(zhǎng)字符串加解密失敗

github: https://github.com/zhangwen9229/jsencrypt
修改源碼解決方案:

   //文件路徑 src/JSEncrypt.ts,增加以下方法
   // 分段加密長(zhǎng)字符串
   public encryptLong(str:string) {
       try {
           return hex2b64(this.getKey().encryptLong(str));
       } catch (ex) {
           return false;
       }
   }
   
   // 分段解密長(zhǎng)字符串
   public decryptLong(str:string) {
       try {
           return this.getKey().decryptLong(b64tohex(str));
       } catch (ex) {
           return false;
       }
   }
    //文件路徑 lib/jsbn/rsa.ts槽驶,增加以下方法
    // 分段加密長(zhǎng)字符串
    public encryptLong(text:string) {
        let ct = "";
        // RSA每次加密117bytes责嚷,需要輔助方法判斷字符串截取位置
        // 1.獲取字符串截取點(diǎn)
        const bytes = new Array();
        bytes.push(0);
        let byteNo = 0;
        const len = text.length;
        let c;
        let temp = 0;
        for (let i = 0; i < len; i++) {
            c = text.charCodeAt(i);
            if (c >= 0x010000 && c <= 0x10FFFF) {  // 特殊字符,如?掂铐,?
                byteNo += 4;
            } else if (c >= 0x000800 && c <= 0x00FFFF) { // 中文以及標(biāo)點(diǎn)符號(hào)
                byteNo += 3;
            } else if (c >= 0x000080 && c <= 0x0007FF) { // 特殊字符罕拂,如è,ò
                byteNo += 2;
            } else { // 英文以及標(biāo)點(diǎn)符號(hào)
                byteNo += 1;
            }
            if ((byteNo % 117) >= 114 || (byteNo % 117) == 0) {
                if (byteNo - temp >= 114) {
                    bytes.push(i);
                    temp = byteNo;
                }
            }
        }

        // 2.截取字符串并分段加密
        if (bytes.length > 1) {
            for (let i = 0; i < bytes.length - 1; i++) {
                let str;
                if (i == 0) {
                    str = text.substring(0, bytes[i + 1] + 1);
                } else {
                    str = text.substring(bytes[i] + 1, bytes[i + 1] + 1);
                }
                const t1 = this.encrypt(str);
                ct += t1;
            }
            if (bytes[bytes.length - 1] != text.length - 1) {
                const lastStr = text.substring(bytes[bytes.length - 1] + 1);
                ct += this.encrypt(lastStr);
            }
            return (ct);
        }
        const t = this.encrypt(text);
        return t;
    }

    // 分段解密長(zhǎng)字符串
    public decryptLong(text:string) {
        const maxLength = ((this.n.bitLength() + 7) >> 3);
        try {
            if (text.length > maxLength) {
                let ct = "";
                const lt = text.match(/.{1,256}/g);
                lt.forEach((entry) => {
                    const t1 = this.decrypt(entry);
                    ct += t1;
                });
                return ct;
            }
            const y = this.decrypt(text);
            return y;
        } catch (ex) {
            return false;
        }
    }
  • 修改完后全陨,執(zhí)行g(shù)ulp打包
  • 注意:該方案長(zhǎng)文本解密爆班,中文直接加密會(huì)出現(xiàn)亂碼(解決方案:可以讓后臺(tái)加密之前,先將字符串encodeURI后再加密辱姨,前端解密后蛋济,再decodeURIComponent,則可避免該問(wèn)題)

大前端知識(shí)庫(kù)收集分享 www.rjxgc.com 壹玖零Tech
搜羅各種前后端奇淫技巧,花式編程思想炮叶,日日更新碗旅,速來(lái)圍觀吧...

參考:https://jackiedark.github.io/2018/02/05/JSEncrypt%E9%95%BF%E6%96%87%E6%9C%AC%E5%88%86%E6%AE%B5%E5%8A%A0%E8%A7%A3%E5%AF%86/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市镜悉,隨后出現(xiàn)的幾起案子祟辟,更是在濱河造成了極大的恐慌,老刑警劉巖侣肄,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旧困,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡稼锅,警方通過(guò)查閱死者的電腦和手機(jī)吼具,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)矩距,“玉大人拗盒,你說(shuō)我怎么就攤上這事∽墩” “怎么了陡蝇?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)哮肚。 經(jīng)常有香客問(wèn)我登夫,道長(zhǎng),這世上最難降的妖魔是什么允趟? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任恼策,我火速辦了婚禮,結(jié)果婚禮上潮剪,老公的妹妹穿的比我還像新娘涣楷。我一直安慰自己,他們只是感情好鲁纠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布总棵。 她就那樣靜靜地躺著,像睡著了一般改含。 火紅的嫁衣襯著肌膚如雪情龄。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,365評(píng)論 1 302
  • 那天捍壤,我揣著相機(jī)與錄音骤视,去河邊找鬼。 笑死鹃觉,一個(gè)胖子當(dāng)著我的面吹牛专酗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播盗扇,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼祷肯,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼沉填!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起佑笋,我...
    開(kāi)封第一講書(shū)人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤翼闹,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后蒋纬,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體猎荠,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年蜀备,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了关摇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡碾阁,死狀恐怖输虱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瓷蛙,我是刑警寧澤悼瓮,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站艰猬,受9級(jí)特大地震影響横堡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜冠桃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一命贴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧食听,春花似錦胸蛛、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至迹蛤,卻和暖如春民珍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盗飒。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工嚷量, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人逆趣。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓蝶溶,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親宣渗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子抖所,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容