Skip to content

Instantly share code, notes, and snippets.

@miguelortizdev
Forked from trappistes/laravel-encrypt.js
Created January 3, 2023 19:09
Show Gist options
  • Save miguelortizdev/62fe4cfcc89f692b0e338ffd73d822c8 to your computer and use it in GitHub Desktop.
Save miguelortizdev/62fe4cfcc89f692b0e338ffd73d822c8 to your computer and use it in GitHub Desktop.

Revisions

  1. @trappistes trappistes revised this gist Dec 6, 2020. 1 changed file with 40 additions and 26 deletions.
    66 changes: 40 additions & 26 deletions laravel-encrypt.js
    Original file line number Diff line number Diff line change
    @@ -1,43 +1,57 @@
    import CryptoJS from "crypto-js";

    const LaravelEncrypt = function (key) {
    this.key = key;
    const DataEncrypt = function () {
    this.key = CryptoJS.enc.Base64.parse(process.env.MIX_APP_KEY.substr(7));
    }

    LaravelEncrypt.prototype.decrypt = function (encryptStr) {
    encryptStr = CryptoJS.enc.Base64.parse(encryptStr);
    let encryptData = encryptStr.toString(CryptoJS.enc.Utf8);
    encryptData = JSON.parse(encryptData);
    let iv = CryptoJS.enc.Base64.parse(encryptData.iv);
    var decrypted = CryptoJS.AES.decrypt(encryptData.value, CryptoJS.enc.Utf8.parse(this.key), {
    iv : iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
    });
    decrypted = CryptoJS.enc.Utf8.stringify(decrypted);
    return decrypted;
    };

    LaravelEncrypt.prototype.encrypt = function (data) {
    let iv = CryptoJS.lib.WordArray.random(16),
    key = CryptoJS.enc.Utf8.parse(this.key);
    let options = {
    DataEncrypt.prototype.encrypt = function (data) {
    let iv = CryptoJS.lib.WordArray.random(16);
    let encrypted = CryptoJS.AES.encrypt(data, this.key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
    };
    let encrypted = CryptoJS.AES.encrypt(data, key, options);
    encrypted = encrypted.toString();
    }).toString();

    iv = CryptoJS.enc.Base64.stringify(iv);

    let result = {
    iv: iv,
    value: encrypted,
    mac: CryptoJS.HmacSHA256(iv + encrypted, key).toString()
    }
    result = JSON.stringify(result);
    result = CryptoJS.enc.Utf8.parse(result);

    result = CryptoJS.enc.Utf8.parse(JSON.stringify(result));

    return CryptoJS.enc.Base64.stringify(result);
    };

    export default LaravelEncrypt;
    DataEncrypt.prototype.decrypt = function (encryptStr) {
    let str = JSON.parse(atob(encryptStr)),
    iv = CryptoJS.enc.Base64.parse(str.iv);

    return CryptoJS.AES.decrypt(str.value, this.key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
    }).toString(CryptoJS.enc.Utf8);
    };

    export default DataEncrypt;

    ################################################################################
    // 使用:
    // .env 文件中增加
    MIX_APP_KEY=${APP_KEY}

    import DataEncrypt from "dataEncrypt";

    methods:{
    handelDecrypt() {
    let dataDecrypt = new DataEncrypt();
    return JSON.parse(dataDecrypt.decrypt(this.data));
    },
    handelEncrypt() {
    let dataDecrypt = new DataEncrypt();
    return JSON.parse(dataDecrypt.decrypt(this.data));
    }
    }
  2. @huzemin huzemin created this gist Dec 3, 2019.
    43 changes: 43 additions & 0 deletions laravel-encrypt.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,43 @@
    import CryptoJS from "crypto-js";

    const LaravelEncrypt = function (key) {
    this.key = key;
    }

    LaravelEncrypt.prototype.decrypt = function (encryptStr) {
    encryptStr = CryptoJS.enc.Base64.parse(encryptStr);
    let encryptData = encryptStr.toString(CryptoJS.enc.Utf8);
    encryptData = JSON.parse(encryptData);
    let iv = CryptoJS.enc.Base64.parse(encryptData.iv);
    var decrypted = CryptoJS.AES.decrypt(encryptData.value, CryptoJS.enc.Utf8.parse(this.key), {
    iv : iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
    });
    decrypted = CryptoJS.enc.Utf8.stringify(decrypted);
    return decrypted;
    };

    LaravelEncrypt.prototype.encrypt = function (data) {
    let iv = CryptoJS.lib.WordArray.random(16),
    key = CryptoJS.enc.Utf8.parse(this.key);
    let options = {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
    };
    let encrypted = CryptoJS.AES.encrypt(data, key, options);
    encrypted = encrypted.toString();
    iv = CryptoJS.enc.Base64.stringify(iv);
    let result = {
    iv: iv,
    value: encrypted,
    mac: CryptoJS.HmacSHA256(iv + encrypted, key).toString()
    }
    result = JSON.stringify(result);
    result = CryptoJS.enc.Utf8.parse(result);
    return CryptoJS.enc.Base64.stringify(result);
    };

    export default LaravelEncrypt;