'use strict';
var source = new Buffer(62);
var zero = new Buffer('0')[0]; // ASCII 0
var A = new Buffer('A')[0]; // ASCII A
var a = new Buffer('a')[0]; // ASCII a
var offset = 0;
for (var i = 0; i < 10; i++) {
source[offset++] = i + zero;
}
for (var _i = 0; _i < 26; _i++) {
source[offset++] = _i + A;
}
for (var _i2 = 0; _i2 < 26; _i2++) {
source[offset++] = _i2 + a;
}
/**
* 获取指定范围内的随机数
* @private
* @param {Number} min - 最小值
* @param {Number} max - 最大值
* @return {Number}
*/
function random(min, max) {
return Math.floor(Math.random() * (max - min)) + min;
}
/**
* @module open-service-node-sdk/lib/randomEncodingAESKey
* @author xuyuanxiang <xuyuanxiang@wosai-inc.com> ({@link http://xuyuanxiang.me})
* @description 数据加密密钥,
* 生成规则:从`[0-9]`、`[A-Z]`、`[a-z]`中随机提取,组成长度为`{43}`位的字符串。
* @example
* const randomEncodingAESKey = require('open-service-node-sdk/lib/randomEncodingAESKey');
* const assert = require('assert');
*
* // 数据加密密钥(43位)
* const encodingAESKey = randomEncodingAESKey();
* assert(/^[a-zA-Z0-9]{43}$/.test(encodingAESKey));
* console.log(encodingAESKey);
*
* // 自定义16位随机字符
* assert(/^[a-zA-Z0-9]{16}$/.test(randomEncodingAESKey(16)));
* @param {Number} len - 所需生成随机字符串的长度,缺省:43位。
* @return {String} 数据加密密钥
*/
module.exports = function randomEncodingAESKey() {
var len = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 43;
var buff = new Buffer(len);
var offset = 0;
while (offset < len) {
buff[offset++] = source[random(0, 62)];
}
return buff.toString('ascii');
};