123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- var crypto = require('crypto');
- var bigInt = require('big-integer');
- function addPadding(encText, modulus) {
- var ml = modulus.length;
- for (i = 0; ml > 0 && modulus[i] == '0'; i++) ml--;
- var num = ml - encText.length,
- prefix = '';
- for (var i = 0; i < num; i++) {
- prefix += '0';
- }
- return prefix + encText;
- }
- function aesEncrypt(text, secKey) {
- var cipher = crypto.createCipheriv('AES-128-CBC', secKey, '0102030405060708');
- return cipher.update(text, 'utf-8', 'base64') + cipher.final('base64');
- }
- /**
- * RSA Encryption algorithm.
- * @param text {string} - raw data to encrypt
- * @param exponent {string} - public exponent
- * @param modulus {string} - modulus
- * @returns {string} - encrypted data: reverseText^pubKey%modulus
- */
- function rsaEncrypt(text, exponent, modulus) {
- var rText = '',
- radix = 16;
- for (var i = text.length - 1; i >= 0; i--) rText += text[i]; //reverse text
- var biText = bigInt(new Buffer(rText).toString('hex'), radix),
- biEx = bigInt(exponent, radix),
- biMod = bigInt(modulus, radix),
- biRet = biText.modPow(biEx, biMod);
- return addPadding(biRet.toString(radix), modulus);
- }
- function createSecretKey(size) {
- var keys = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
- var key = "";
- for (var i = 0; i < size; i++) {
- var pos = Math.random() * keys.length;
- pos = Math.floor(pos);
- key = key + keys.charAt(pos)
- }
- return key;
- }
- var modulus = '00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7';
- var nonce = '0CoJUm6Qyw8W8jud';
- var pubKey = '010001';
- var Crypto = {
- MD5: function(text) {
- return crypto.createHash('md5').update(text).digest('hex');
- },
- aesRsaEncrypt: function(text) {
- var secKey = createSecretKey(16);
- return {
- params: aesEncrypt(aesEncrypt(text, nonce), secKey),
- encSecKey: rsaEncrypt(secKey, pubKey, modulus)
- }
- },
- encrypted_id: function(id) {
- var magic = Buffer.from('3go8&$8*3*3h0k(2)2', 'ascii');
- var len = magic.length;
- var sid = Buffer.from(id, 'ascii');
- for (var i in sid) {
- sid[i] = sid[i] ^ magic[i % len];
- }
- sid = crypto.createHash('md5').update(sid).digest();
- return sid.toString('base64').replace(/\//g, '_').replace(/\+/g, '-');
- }
- };
- module.exports = Crypto;
|