马大波 1 年之前
当前提交
8bc0fbf37d
共有 5 个文件被更改,包括 122 次插入0 次删除
  1. 26 0
      .gitignore
  2. 29 0
      package-lock.json
  3. 14 0
      package.json
  4. 50 0
      rsa.js
  5. 3 0
      rsa_public_key.txt

+ 26 - 0
.gitignore

@@ -0,0 +1,26 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
+
+stats.html

+ 29 - 0
package-lock.json

@@ -0,0 +1,29 @@
+{
+  "name": "mca-sdk-nodejs",
+  "version": "1.0.0",
+  "lockfileVersion": 1,
+  "requires": true,
+  "dependencies": {
+    "asn1": {
+      "version": "0.2.4",
+      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+      "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+      "requires": {
+        "safer-buffer": "~2.1.0"
+      }
+    },
+    "node-rsa": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/node-rsa/-/node-rsa-1.1.1.tgz",
+      "integrity": "sha512-Jd4cvbJMryN21r5HgxQOpMEqv+ooke/korixNNK3mGqfGJmy0M77WDDzo/05969+OkMy3XW1UuZsSmW9KQm7Fw==",
+      "requires": {
+        "asn1": "^0.2.4"
+      }
+    },
+    "safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+    }
+  }
+}

+ 14 - 0
package.json

@@ -0,0 +1,14 @@
+{
+  "name": "mca-sdk-nodejs",
+  "version": "1.0.0",
+  "description": "MCA SDK Nodejs",
+  "main": "index.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "author": "boo",
+  "license": "ISC",
+  "dependencies": {
+    "node-rsa": "^1.1.1"
+  }
+}

+ 50 - 0
rsa.js

@@ -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);

+ 3 - 0
rsa_public_key.txt

@@ -0,0 +1,3 @@
+-----BEGIN PUBLIC KEY-----
+MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzw1Ib0qlD3ynCPLMUAqE2fkzeXuV5YLAyHtd/Gw8gPMeRWea9caentQpK5k4VFHjCP1LPmWlK7tsyi/9KYbRtK9/Gpasja0qSC1M/ZH6pJZZp81DWiGzQ8gAZ8YVp9+sW6eaH4CvDqCBeMSOTw3VS5yq7ArENbgIcSzCC05fZDwIDAQAB
+-----END PUBLIC KEY-----