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