utils.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. 'use strict'
  2. var CryptoJS = require("crypto-js");
  3. require('dotenv').config()
  4. const logger = require('./logger')
  5. var { cryppt_config } = require('../config/config.js')
  6. function toJson(code_, obj_, errMsg_) {
  7. var code = code_
  8. var data = obj_
  9. var errMsg = errMsg_
  10. let jopt = { code, data, errMsg };
  11. return JSON.stringify(jopt)
  12. }
  13. function decryptJson(message, key) {
  14. }
  15. /**
  16. *
  17. * @param {*} crypt_key 密文
  18. * @param {*} message 待解密的内容 U2FsdGVkX18zHfDE3lO2yVxk2lMCEiwjrzYo1ZbHqfriFapZWXqLhczs9J0cN9EnvQR64GLRzYDgzMuAr9U1C0LZjA5mV4cSAZeBOrY8KNY09+BhTDetb2/43bIwiFR6
  19. */
  20. function decryptPrivityKey(message) {
  21. // var encrypted = 'Zc4v3uJgPY+BVg/IrDLA4aIk9ko/UrgjAtBTLqymdMAvmqdp1GttRjkBgNNNTyxA+3ThbIGlM0INeeHGicYVbLea4ymkty8gd30rZXQ4yYQ='; //python is base64 ECB
  22. // var key = '0IPmaec1o9FQCqGN'//key used in Python
  23. // var iv = 'Zh4A7bOY2ksp9oIn'
  24. var encrypted = message; //python is base64 ECB
  25. var key = process.env.DENET_CRYPT_KEY //key used in Python
  26. var iv = process.env.DENET_CRYPT_IV
  27. if (!key || !iv) {
  28. logger.error('decryptPrivityKey key or iv is empty?');
  29. return null;
  30. }
  31. logger.log('encrypted=', encrypted);
  32. // logger.log('decryptPrivityKey key= iv=', key, iv);
  33. key = CryptoJS.enc.Utf8.parse(key);
  34. // var decrypted = CryptoJS.AES.decrypt(encrypted, key, {mode:CryptoJS.mode.ECB});
  35. iv = CryptoJS.enc.Utf8.parse(iv)
  36. var decrypted = CryptoJS.AES.decrypt(encrypted, key, { iv: iv, mode: CryptoJS.mode.CBC });
  37. var de_pk = decrypted.toString(CryptoJS.enc.Utf8);
  38. // logger.log('decrypted==', de_pk);
  39. return de_pk
  40. }
  41. // 密钥
  42. const SECRET_KEY = CryptoJS.enc.Utf8.parse(cryppt_config.WITHDRAW_KEY);
  43. // 密钥偏移量
  44. const SECRET_IV = CryptoJS.enc.Utf8.parse("68F37CFC40C330D9FAAC0A16D49C8AD5");
  45. /**
  46. * 加密方法
  47. * @param data
  48. * @returns {string}
  49. */
  50. function encrypt(data) {
  51. if (typeof data === "object") {
  52. try {
  53. data = JSON.stringify(data);
  54. } catch (error) {
  55. console.log("encrypt error:", error);
  56. }
  57. }
  58. const dataHex = CryptoJS.enc.Utf8.parse(data);
  59. const encrypted = CryptoJS.AES.encrypt(dataHex, SECRET_KEY, {
  60. mode: CryptoJS.mode.ECB,
  61. padding: CryptoJS.pad.Pkcs7
  62. });
  63. return encrypted.ciphertext.toString();
  64. }
  65. /**
  66. * 解密方法
  67. * @param data
  68. * @returns {string}
  69. */
  70. function decrypt(data) {
  71. // const key = CryptoJS.enc.Hex.parse(SECRET_KEY);
  72. const decrypt = CryptoJS.AES.decrypt(data, SECRET_KEY, {
  73. mode: CryptoJS.mode.ECB,
  74. padding: CryptoJS.pad.Pkcs7
  75. });
  76. return CryptoJS.enc.Utf8.stringify(decrypt).toString();
  77. }
  78. const CHAIN_NAME = {
  79. eth: 'eth',
  80. bsc_testnet: 'bsc testnet',
  81. bsc_mainnet: 'bsc'
  82. }
  83. const CHAIN_ID = {
  84. eth: '0x1',
  85. bsc_testnet: '0x61',
  86. bsc_mainnet: '0x38'
  87. }
  88. function getChainName(key) {
  89. return CHAIN_NAME[key];
  90. }
  91. function getChainId(key) {
  92. return CHAIN_ID[key];
  93. }
  94. function sleep(time) {
  95. return new Promise((resolve) => setTimeout(resolve, time));
  96. }
  97. module.exports = {
  98. toJson,
  99. decryptPrivityKey,
  100. getChainName,
  101. getChainId,
  102. CHAIN_NAME,
  103. CHAIN_ID,
  104. sleep,
  105. encrypt,
  106. decrypt
  107. }