<menu id="ycqsw"></menu><nav id="ycqsw"><code id="ycqsw"></code></nav>
<dd id="ycqsw"><menu id="ycqsw"></menu></dd>
  • <nav id="ycqsw"></nav>
    <menu id="ycqsw"><strong id="ycqsw"></strong></menu>
    <xmp id="ycqsw"><nav id="ycqsw"></nav>
  • js加密怎么破解(爬蟲破解js加密的流程)


    前端你得會——加密解密之crypto-js(建議收藏)

    場景

    在開發過程中,我們會經常會從當前系統跳轉別的系統進行訪問或者頁面嵌套使用。

    那一般都會給到一個地址進行參數拼接,然后去訪問。那么會存在一個問題,就是地址暴露在外面參數使用明文的話會被篡改,極度不安全。

    這個時候我們就考慮到加密,前端和后端協定好一種加密方式,然后前端進行參數加密傳到后端,后端再去解密(可逆)。

    加密方式也有很多種,今天我推薦的是一款強大的前端加密/解密js庫——crypto-js。

    crypto-js是什么

    crypto-js 是一個純 javascript 寫的加密算法類庫 ,可以非常方便地在 javascript 進行 MD5、SHA1、SHA2、SHA3、RIPEMD-160 哈希散列,進行 AES、DES、Rabbit、RC4、Triple DES 加解密。

    GitHub:https://github.com/brix/crypto-js

    安裝

    npm install crypto-js

    使用

    ES6模塊引入方法:

    import sha256 from 'crypto-js/sha256';
    import hmacSHA512 from 'crypto-js/hmac-sha512';
    import Base64 from 'crypto-js/enc-base64';

    模塊加載引入方法:

    var AES = require("crypto-js/aes");
    var SHA256 = require("crypto-js/sha256");

    頁面標簽引入方法:

    <script type="text/javascript" src="path-to/bower_components/crypto-js/crypto-js.js"></script>
    <script type="text/javascript">
        var encrypted = CryptoJS.AES(...);
        var encrypted = CryptoJS.SHA256(...);
    </script>

    項目中使用實例

    這里我以 React作為例子,其他的也就大同小異了。

    第一步:封裝工具類

    我們可以寫一個工具類,專門封裝加密解密的方法,比如我新建一個cryptoAES.js的文件,放在utils 目錄下(放哪無所謂),代碼如下:

    const CryptoJS = require('crypto-js');  //引用AES源碼js
        
    const key = CryptoJS.enc.Utf8.parse("1234123412ABCDEF");  //十六位十六進制數作為密鑰
    const iv = CryptoJS.enc.Utf8.parse('ABCDEF1234123412');   //十六位十六進制數作為密鑰偏移量
    
    //解密方法
    function (word) {
        let encryptedHexStr = CryptoJS.enc.Hex.parse(word);
        let srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
        let decrypt = CryptoJS.AES.decrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
        let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
        return decryptedStr.toString();
    }
    
    //加密方法
    function Encrypt(word) {
        let srcs = CryptoJS.enc.Utf8.parse(word);
        let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
        return encrypted.ciphertext.toString().toUpperCase();
    }
    
    export default {
      Decrypt ,
      Encrypt
    }

    上面的代碼中的 key 是密鑰 ,iv 是密鑰偏移量,這兩個參數前后端協定好保持一致,相當是我們的小秘密,不能告訴別人,不然加密的意義就沒了。

    值得注意的是密鑰的長度,由于對稱解密使用的算法是 AES-128-CBC算法,數據采用 PKCS#7 填充 , 因此這里的 key 需要為16位!

    接著我們定義了 解密方法Decrypt加密方法 Encrypt ,最后通過 export 和default 將其暴露出去,方便在需要的時候進行引入….

    工具類寫好了,很簡單,然后是怎么使用了~

    第二步:使用工具類

    我們有一個index.tsx文件,在這里面使用加密和解密的方法。

    這里我只演示加密,解密同理。

    import { Decrypt, Encrypt } from '/utils /cryptoAES.js';
    .
    .
    //比如我組裝好了拼接的參數
    const str = '103170,112425366,253.00,20210428173700'
    Encrypt(str)

    加密后的結果是:

    hoDfJ9U+uY+v8wYKdudbTUR+Z7g1Ui9YraVhfD9g2fMipYlFxnoLE0qbf+YsnEuk

    這里有個問題,加密后的字符串里面是包含了+號,發送的話,在進行地址解析時,會把 + 號轉換為 空格, 直接導致參數不能正確傳輸,所以我們用到了JS的encodeURIComponent(),將所有的 + 號 手動轉換為 %2B 即可正常傳輸。

    encodeURIComponent(str)
    //返回新結果
    hoDfJ9U%2BuY%2Bv8wYKdudbTUR%2BZ7g1Ui9YraVhfD9g2fMipYlFxnoLE0qbf%2BYsnEuk

    好了,一個簡單的前端加密的過程就寫完了。

    總結

    使用加密的場景有很多,我這里只講述了URL地址加密的場景,簡單總結下:

    第一步:安裝crypto-js

    第二步:引入crypto-js

    第三步:封裝工具類(當然也可以直接使用)

    第四步:調用工具類

    第五步:使用encodeURIComponent方法轉碼,然后拼接

    當然,這個是最基礎的用法,想深入可查看官方文檔!

    結尾:希望小凡的每篇文章對你都有所幫助!

    版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。

    發表評論

    登錄后才能評論
    国产精品区一区二区免费