UNPKG

ls_crypto

Version:

63 lines (56 loc) 1.83 kB
//test under node v6.11.1 const crypto = require("crypto"); import CryptoES from "crypto-es"; // const assert = require('assert'); const URLSafeBase64 = require("urlsafe-base64"); function encode_data(app_secret = "f381e66efc9611e6a8faf45c89a03281", data) { var datajson = JSON.stringify(data); var cryptkey = crypto .createHash("sha256") .update(app_secret, "utf8") .digest() .slice(0, 16); var iv = crypto.randomBytes(16); var encipher = crypto.createCipheriv("aes-128-cbc", cryptkey, iv); encipher.setAutoPadding((auto_padding = true)); var encdata = Buffer.concat([ encipher.update(datajson, "utf8"), encipher.final(), ]); var enc = Buffer.concat([iv, encdata]); return URLSafeBase64.encode(enc).toString("hex"); } function decode_data(app_secret = "f381e66efc9611e6a8faf45c89a03281", enc) { var encdata = URLSafeBase64.decode(enc); var cryptkey = crypto .createHash("sha256") .update(app_secret, "utf8") .digest() .slice(0, 16); var iv = encdata.slice(0, 16); encdata = encdata.slice(16); var decipher = crypto.createDecipheriv("aes-128-cbc", cryptkey, iv); decipher.setAutoPadding((auto_padding = true)); var datajson = Buffer.concat([ decipher.update(encdata, "utf8"), decipher.final(), ]).toString("utf8"); return JSON.parse(datajson); } // function run() { // var data = { // timestamp: Math.floor(new Date() / 1000), // user_id: 1, // img: "http://www.kangfuzi.com/logo.png", // }; // var app_secret = ""; // var enc = encode_data(app_secret, data); // //console.log(enc); // var data2 = decode_data(app_secret, enc); // //console.log(data2); // assert.deepEqual(data, data2); // // console.log(app_secret + " " + enc); // console.log("1111"); // } // run(); module.exports.encode_data = encode_data;