utils.js 4.0 KB

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