UNPKG

ls_crypto

Version:

47 lines (43 loc) 1.43 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); } module.exports = { encode_data, decode_data, };