| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- const crypto = require('crypto');
- const moment = require('moment');
- const md5 = require('md5');
- const sha1 = require('sha1');
- function pad2(n) {
- return n < 10 ? '0' + n : n
- }
- /**
- * 微信指定的加密算法
- */
- function encrypt(obj, addtionalStr) {
- // sort fields alphabetically
- let keyArray = [];
- for (let key in obj) {
- if (obj.hasOwnProperty(key)) {
- keyArray.push(key);
- }
- }
- keyArray.sort((l, r) => {
- if (l > r) {
- return 1;
- } else if (l < r) {
- return -1;
- } else {
- throw new 'encrypted obj with same key: ' + l;
- }
- });
- let rawString = '';
- keyArray.forEach(key => {
- rawString += `${key}=${obj[key]}&`;
- });
- // remove last &
- rawString = rawString.substring(0, rawString.length - 1);
- if (addtionalStr) {
- rawString += addtionalStr;
- }
- return rawString;
- }
- let Base64Handler = {
- encryption: (str) => {
- return Buffer(str).toString('base64');
- },
- decrypt: (str) => {
- return Buffer(str, 'base64').toString();
- },
- timespan: () => {
- var date = new Date();
- return date.getFullYear().toString() + pad2(date.getMonth() + 1) + pad2(date.getDate()) + pad2(date.getHours()) + pad2(date.getMinutes()) + pad2(date.getSeconds());
- },
- genNowSeq: () => {
- return moment().format('YYYYMMDDHHmmssSSS');
- },
- getTimeStamp: () => {
- var date = new Date();
- return date.getFullYear().toString() + pad2(date.getMonth() + 1) + pad2(date.getDate()) + pad2(date.getHours()) + pad2(date.getMinutes()) + pad2(date.getSeconds());
- },
- genNonceStr: (number = 16) => {
- return crypto.randomBytes(number).toString('hex');
- },
- getClientIp: (req) => {
- let ip = req.ip;
- if (ip.substr(0, 7) === "::ffff:") {
- ip = ip.substr(7)
- }
- return ip;
- },
- /**
- * 生成n位随机数
- */
- creatRandomByNumber: (n) => {
- var rnd = "";
- for (var i = 0; i < n; i++) {
- rnd += Math.floor(Math.random() * 10);
- }
- return rnd;
- },
- encryptMd5: (obj, etcStr) => {
- return md5(encrypt(obj, etcStr)).toUpperCase();
- },
- encryptSha1: (obj, etcStr) => {
- return sha1(encrypt(obj, etcStr));
- }
- }
- module.exports = Base64Handler;
|