-
Notifications
You must be signed in to change notification settings - Fork 95
/
Crypto.js
67 lines (60 loc) · 2.19 KB
/
Crypto.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/**
* Created by kevin on 15-7-19.
*/
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)
}
}
};
module.exports = Crypto;