const fs = require('fs'); const RSA = require('node-rsa'); const RSA_PUBLIC_KEY = fs.readFileSync('./rsa_public_key.txt', 'utf8'); /** * 公钥加密 * * @param {string} plaintext 明文 * @return {string} 密文 */ function public_key_encrypt(plaintext) { const rsa = new RSA({ b: 1024 }); rsa.setOptions({ encryptionScheme: 'pkcs1' }); rsa.importKey(RSA_PUBLIC_KEY, 'public'); const encrypted = rsa.encrypt(plaintext, 'base64'); return Buffer.from(encrypted).toString('base64'); } /** * 公钥解密 * * @param {string} ciphertext 密文 * @return {string} 明文 */ function public_key_decrypt(ciphertext) { const rsa = new RSA({ b: 1024 }); rsa.importKey(RSA_PUBLIC_KEY, 'public'); const res = Buffer.from(ciphertext, 'base64').toString('ascii'); return rsa.decryptPublic(res, 'utf8'); } // 交易数据 const transaction_data = JSON.stringify({ amount: 99.99, backURL: 'http://dev.meemee.online:8080', currency: 'MMK', fee: 0.0, goods: 'bus', merchant: 'oway', merchantShortCode: '8810002', partnerRefNo: '5920992575054531' }); const public_key_encrypted = public_key_encrypt(transaction_data); console.log('public key encrypted: ', public_key_encrypted); // 交易结果 const encrypted_string = 'SkZzWUg0cTJQVkhnUURLMG84UWFrd3hYc2MyMHBOY3RYZlJNb3ZmMkR3dno5THU2VmJvaEhDN1Nkck14ZlZhd3NyN3JTOHY0M3JHVQ0KQVRlbVVHZWtRMVBwTUxlKzhEempiT1BldlJoRVpvMCsrcUJWcFJaWnNuUUd1aVJWZTllMXNSTi9tait1S2R3eHhMZ3U4Z3MzNk1tcA0KNFAwT3c1WDdDTXc5OVhSTGJOWjN3QncyZC9iTXNxTVM5Sjh1RDZOdmJmeHNlN0dkUUI2YWdRWGkyNEpmRytlVzEvNzZrQkdyKzhPVA0Kd1dTUG1FVER0YVZva3IrcE50KzEzZjVISUtGZTJKVDhMZW1RZTNmOE1kYkVGeHVhRGw2SE96WXlNeGRBR2NyMWNQREQ3ZWg4NkQ1Vw0KSDRtQVRMTDczQ1puTVhhMnpnbDd2YnUxWGpqdU1udkNRR3BIWUE9PQ=='; const decrypted = public_key_decrypt(encrypted_string); console.log('public key decrypted: ', decrypted);