加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
utils.js 1.41 KB
一键复制 编辑 原始数据 按行查看 历史
Albeforia 提交于 2016-01-10 04:25 . @ server.js: db api invoker
var crypto = require('crypto');
var utils = (() => {
var encode_base64 = raw => {
var s = new Buffer(raw).toString('base64');
var npad = 0;
while (s.endsWith('=')) {
npad++;
s = s.substr(0, s.length - 1);
}
return s + npad;
};
var decode_base64 = x => {
var npad = parseInt(x.substr(x.length - 1));
x = x.substr(0, x.length - 1) + "=".repeat(npad);
var s = new Buffer(x, 'base64').toString('utf-8');
return s;
};
var hmac_md5 = (data, key) => {
return crypto.createHmac('md5', key).update(data).digest('hex');
};
var hmac = data => {
return hmac_md5(data, 'rsms');
};
var make_token = (seq, role) => {
var raw_token = JSON.stringify({ seq, role });
var raw_token64 = encode_base64(raw_token);
var auth = hmac(raw_token64);
var auth64 = encode_base64(auth);
return raw_token64 + "." + auth64;
};
var check_token = token => {
var shards = token.split('.');
if (shards.length !== 2) throw 'denied';
var auth = hmac(shards[0]);
var auth64 = encode_base64(auth);
if (auth64 !== shards[1]) throw 'denied';
return shards[0];
};
var unpack_token = token => {
var raw_token64 = check_token(token);
var raw_token = decode_base64(raw_token64);
return JSON.parse(raw_token);
};
return {
make_token, unpack_token
}
})();
module.exports = utils;
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化