|
@@ -0,0 +1,50 @@
|
|
|
|
|
+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);
|