rsa.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. const fs = require('fs');
  2. const RSA = require('node-rsa');
  3. const RSA_PUBLIC_KEY = fs.readFileSync('./rsa_public_key.txt', 'utf8');
  4. /**
  5. * 公钥加密
  6. *
  7. * @param {string} plaintext 明文
  8. * @return {string} 密文
  9. */
  10. function public_key_encrypt(plaintext) {
  11. const rsa = new RSA({ b: 1024 });
  12. rsa.setOptions({ encryptionScheme: 'pkcs1' });
  13. rsa.importKey(RSA_PUBLIC_KEY, 'public');
  14. const encrypted = rsa.encrypt(plaintext, 'base64');
  15. return Buffer.from(encrypted).toString('base64');
  16. }
  17. /**
  18. * 公钥解密
  19. *
  20. * @param {string} ciphertext 密文
  21. * @return {string} 明文
  22. */
  23. function public_key_decrypt(ciphertext) {
  24. const rsa = new RSA({ b: 1024 });
  25. rsa.importKey(RSA_PUBLIC_KEY, 'public');
  26. const res = Buffer.from(ciphertext, 'base64').toString('ascii');
  27. return rsa.decryptPublic(res, 'utf8');
  28. }
  29. // 交易数据
  30. const transaction_data = JSON.stringify({
  31. amount: 99.99,
  32. backURL: 'http://dev.meemee.online:8080',
  33. currency: 'MMK',
  34. fee: 0.0,
  35. goods: 'bus',
  36. merchant: 'oway',
  37. merchantShortCode: '8810002',
  38. partnerRefNo: '5920992575054531'
  39. });
  40. const public_key_encrypted = public_key_encrypt(transaction_data);
  41. console.log('public key encrypted: ', public_key_encrypted);
  42. // 交易结果
  43. const encrypted_string = 'SkZzWUg0cTJQVkhnUURLMG84UWFrd3hYc2MyMHBOY3RYZlJNb3ZmMkR3dno5THU2VmJvaEhDN1Nkck14ZlZhd3NyN3JTOHY0M3JHVQ0KQVRlbVVHZWtRMVBwTUxlKzhEempiT1BldlJoRVpvMCsrcUJWcFJaWnNuUUd1aVJWZTllMXNSTi9tait1S2R3eHhMZ3U4Z3MzNk1tcA0KNFAwT3c1WDdDTXc5OVhSTGJOWjN3QncyZC9iTXNxTVM5Sjh1RDZOdmJmeHNlN0dkUUI2YWdRWGkyNEpmRytlVzEvNzZrQkdyKzhPVA0Kd1dTUG1FVER0YVZva3IrcE50KzEzZjVISUtGZTJKVDhMZW1RZTNmOE1kYkVGeHVhRGw2SE96WXlNeGRBR2NyMWNQREQ3ZWg4NkQ1Vw0KSDRtQVRMTDczQ1puTVhhMnpnbDd2YnUxWGpqdU1udkNRR3BIWUE9PQ==';
  44. const decrypted = public_key_decrypt(encrypted_string);
  45. console.log('public key decrypted: ', decrypted);