Crypto.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. var crypto = require('crypto');
  2. var bigInt = require('big-integer');
  3. function addPadding(encText, modulus) {
  4. var ml = modulus.length;
  5. for (i = 0; ml > 0 && modulus[i] == '0'; i++) ml--;
  6. var num = ml - encText.length,
  7. prefix = '';
  8. for (var i = 0; i < num; i++) {
  9. prefix += '0';
  10. }
  11. return prefix + encText;
  12. }
  13. function aesEncrypt(text, secKey) {
  14. var cipher = crypto.createCipheriv('AES-128-CBC', secKey, '0102030405060708');
  15. return cipher.update(text, 'utf-8', 'base64') + cipher.final('base64');
  16. }
  17. /**
  18. * RSA Encryption algorithm.
  19. * @param text {string} - raw data to encrypt
  20. * @param exponent {string} - public exponent
  21. * @param modulus {string} - modulus
  22. * @returns {string} - encrypted data: reverseText^pubKey%modulus
  23. */
  24. function rsaEncrypt(text, exponent, modulus) {
  25. var rText = '',
  26. radix = 16;
  27. for (var i = text.length - 1; i >= 0; i--) rText += text[i]; //reverse text
  28. var biText = bigInt(new Buffer(rText).toString('hex'), radix),
  29. biEx = bigInt(exponent, radix),
  30. biMod = bigInt(modulus, radix),
  31. biRet = biText.modPow(biEx, biMod);
  32. return addPadding(biRet.toString(radix), modulus);
  33. }
  34. function createSecretKey(size) {
  35. var keys = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  36. var key = "";
  37. for (var i = 0; i < size; i++) {
  38. var pos = Math.random() * keys.length;
  39. pos = Math.floor(pos);
  40. key = key + keys.charAt(pos)
  41. }
  42. return key;
  43. }
  44. var modulus = '00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7';
  45. var nonce = '0CoJUm6Qyw8W8jud';
  46. var pubKey = '010001';
  47. var Crypto = {
  48. MD5: function(text) {
  49. return crypto.createHash('md5').update(text).digest('hex');
  50. },
  51. aesRsaEncrypt: function(text) {
  52. var secKey = createSecretKey(16);
  53. return {
  54. params: aesEncrypt(aesEncrypt(text, nonce), secKey),
  55. encSecKey: rsaEncrypt(secKey, pubKey, modulus)
  56. }
  57. },
  58. encrypted_id: function(id) {
  59. var magic = Buffer.from('3go8&$8*3*3h0k(2)2', 'ascii');
  60. var len = magic.length;
  61. var sid = Buffer.from(id, 'ascii');
  62. for (var i in sid) {
  63. sid[i] = sid[i] ^ magic[i % len];
  64. }
  65. sid = crypto.createHash('md5').update(sid).digest();
  66. return sid.toString('base64').replace(/\//g, '_').replace(/\+/g, '-');
  67. }
  68. };
  69. module.exports = Crypto;