ls_crypto
Version:
63 lines (56 loc) • 1.83 kB
JavaScript
//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;