Skip to content

Commit 88e2f1c

Browse files
committed
add rsa sample
1 parent 4c65469 commit 88e2f1c

File tree

5 files changed

+131
-0
lines changed

5 files changed

+131
-0
lines changed

samples/node/crypto/.vscode/launch.json

+20
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,26 @@
8080
"externalConsole": false,
8181
"sourceMaps": false,
8282
"outDir": null
83+
},
84+
{
85+
"name": "Run rsa.js",
86+
"type": "node",
87+
"request": "launch",
88+
"program": "${workspaceRoot}/rsa.js",
89+
"stopOnEntry": false,
90+
"args": [],
91+
"cwd": "${workspaceRoot}",
92+
"preLaunchTask": null,
93+
"runtimeExecutable": null,
94+
"runtimeArgs": [
95+
"--nolazy"
96+
],
97+
"env": {
98+
"NODE_ENV": "development"
99+
},
100+
"externalConsole": false,
101+
"sourceMaps": false,
102+
"outDir": null
83103
}
84104
]
85105
}

samples/node/crypto/rsa-key.pem

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
-----BEGIN RSA PRIVATE KEY-----
2+
Proc-Type: 4,ENCRYPTED
3+
DEK-Info: AES-256-CBC,D7404CE12F8B7A5F5AAC950F4ED928DF
4+
5+
J1rhNZQFt2qodd5GRqUj1dB/fuGJNcZhIGHg1lsimtWXmnhbUML+qez2P0Q1MuI1
6+
tOcAIO4neNMZRhvVYXfjL3Rze8gAdvCx/W5xAOU37WCYsCuOiY3dkA9rAd6y+oZt
7+
sIPi5ubAfpr9AMqam3KE9JjcJTETHyE9nFgylulgucPgchTpuarApZf8IJsNuerW
8+
3HhtYCTdfUPXU815JVQNXFJ2z0qNkX6cCTn9AVoY1b7Eao3XRBSDfXf2E/cvkm48
9+
gzfz2p248UE/C3DJTjhxfI3MX2OvykkyOWumUdcKt6GOUdyQSJ3EbpuClR2NOv3Z
10+
8gBNsmz2nglGNE90+4IgaoMWr5Q6hZ17tqFXckJQAy8DKxC69+OygkhZMX8TF+rQ
11+
Cut7i3cyra8u4J1Y7QwVqbKwnfQZ+bFSaH8LFQKNWW9EhzRMXEPhhFltp/mEuowe
12+
itBjGOJgrfHsbRUOPAZ8zVXcqSn5bQCeQRZMcW8WKZ3zxnk5HZydgv6N+VXCSee9
13+
Vcq2f3H4Ub/mC0iubVu1e7rA/pNQBPlWCUYcoDdpNiHqbudZtbYvbqgcUNxTLWSp
14+
okMil1GhKkOvHgCLAH6iCPdyBVsnCTfp53gxCRvJtD9XaLgBMCN4e3B2dMG16Dm5
15+
IrfRSocRgUYawhHqDGu6nn6tlNQc+B6ASwXvK9Pxq9Z+KM071p1D3UJJtXhB8wsU
16+
qvCdjnPYxTKMChs979zWGq1YBtFnSWUjEFdHnm0ygpfFzu0d0LOSU0Kew7ygmWgH
17+
QBr8I8cveHhAZuMyPn6HfJO/O1ILm7ecBCuLIHuOylUmLIQJPCZ8y7qUeWEnak/0
18+
Q4uxrzBGij9jHF2dY8r7e6M7pRlktD+LFATauG5A0U7oscMjxmGS2bYWdAXC52Dg
19+
Enrl1ojdpdHACPDhwWE+CFXM0siR6SdkuwPsU/g1P7hwJctqCRKmpLfH1+4C6akD
20+
u8+E9Ya3wXbiaLn/T4Hw9E9yMbuOUWnEyJMI+musxMeUhhm5lS6P7gPhTQT0YHXk
21+
+p7stM3+5OQVTxNzFE5g3L61TXYTZwx6ITpFUDXroPsNnNTAXWwZFnxDj+MDPPqw
22+
GDP1LK0nuA0FfNcrKvPX3pEI/EcrfoUZ6DtaCOU+AmyFsS7xSA6Ae+YjCol2Y7sC
23+
+WaIpEZzAbvHrVFfWQdVpo9VURKxtud4ZaPf9mUYugLfqMv8mnwMk5N13WU9qOmn
24+
i/9w/GB6Hl7QO7FOacLa3hxicl9N8a2o7pH9NUXx1Wt7APOXmbPSnXHAlk+G1+ex
25+
nuCmBjRaHJjJ0sWo49lcUz+TjTSvNaYOzAJgi+EQdxEu6O5b4EPouBD+MYqY+lPZ
26+
BjKFwPgLVB0XNyOatVZcoKalZnylzEoRo2WfLL0Blm1yglxsZPS1dUOOY6v0swJY
27+
O6PaQiLm4rEcGFTfWiQ38KSEDi0Dwt2ddwr1O/27wF77R6L9uybToOgbe9SVOemT
28+
/ldVF8/MpSJ3AhQTV4eDrXTLpCR35P1TkTPIdLvV6jklXNpY40Y3YB+Vurr8W8ZU
29+
n1L5q0fUWs5DulUyxn1tRC3FRnrBw/bgpACz7GKewNP4Tf8xWtWwYYP6KHS4S5+4
30+
-----END RSA PRIVATE KEY-----

samples/node/crypto/rsa-prv.pem

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
-----BEGIN RSA PRIVATE KEY-----
2+
MIIEowIBAAKCAQEAkutKlptlsXWe4od+se7M0I6xQ7CcKuN+B7LUmT3toMWTThXd
3+
fEUjbtkZsQAd/NRw9kCSNkUqFoKHHe1YUEa+fhdjdL6rLRL+K9O3hV5EUHL6CykC
4+
+UbjxQ4EOi7fScAv7f1g9jAD6vtI+Rml44uUzCMzhsoToRpYamebnaDLI28/hs7Z
5+
VhdcbWX61XZnhhT2hmB4IeWSpRiNU4nyBtdCrFPS5Ad2m0HPrfqWnELvfw0sT6Hc
6+
zhtefv9nFcJuqWTBanA0y6i8m5jjXOqO6J5S/qUgDVRcozt3GEAx0AgpGBRYGnXO
7+
MEMNTsiYwsGrAw2VJxX9SjmYmE47XAFaTEYL9QIDAQABAoIBABqe/cXqZHPSTzbW
8+
vFM7ZOtJX79XKgTvca+tbK5TtVITWsykU5yn3nLAbdJPph9g0xMbwiKJR8YKYrc+
9+
gWkSWIP6cu/9eIDTVzDTzQYifZhiLQKGrN5ERRM4pfVw9s6jP0wNRFt3ec5DOAbC
10+
6fcgHJccrcJ3rTTc1DZ7jYvzTbuer4g35KX/iqtQ5C414oQE7nTri1+HGRIJwLgo
11+
ipQQgsJwTRMiFNEG2EdyBPTQSxbiP3yMJeCwUeD072F9L8Vjqjj5yHDZAydm2R16
12+
jfvngwsSDHygwE+CQl8K9lPy2DN5yuRSQuZzSY61Uf+BrboUN5xJILQ8jvGzSpK6
13+
t9BNCUUCgYEAw7aUDhqut3yGqPNSD6F10TlMURzJxTgiX90q/BXIZaVqaoh0Duv7
14+
19n4zSHEZIeDzxb5jSir0aJ3zs9ScFPYL4M43lP1tICmF9GQhn04N4wYq8g6Y6U2
15+
LV+ci8OlI/sv4u9lRLVMJHYNZZSAR65/tnEfBb8moJUO7ES/upcJfb8CgYEAwCzw
16+
5XLlCl+2ARUJ61RePwXZ9hqBZFP1UgxM7CQrfv4X4Bo6/0cG0YN10xNKkZ/f+cz7
17+
0TZzkb/Gg9nGAP60WkUfSq7xRO7GuDivLTV+UV9swIb0qECZyAW+oZD20VLqqI9O
18+
NZrSsS8o1AGdsaJAAnFlCrNLo/75SHNYa5+pC0sCgYAorex8OgOS0+lReLHX2eGZ
19+
SWWZfnhZ698JOflTSFvM9OL3ncEx0M8aAI58ZMZjdt9ozge01X1RJ4nrjKBABM1s
20+
osPRQnZRvGPJk5+MtL5YnWALZKTuTUrDh5oMWvAaWH2Nl+DetShMc9U5BfLb82NM
21+
Upr2INMwkYr2hRus9vPcFQKBgQCmHbLWA6zsfLNM2CzM2Q7ml15DF8JFQTXLiIpt
22+
jQ50JZvpwYLB61l/fY05uXE50+K9gW0i+ViI4ibtDi/T6FdpuFpGKlav6V6pG4aB
23+
I75fBIdzHLUbQ0wq1Jxl+HMBmhTxQ36tY3lAY619JTB0vfVqpy5aQ4Xc6qf88oe5
24+
8DclZQKBgGUSimhD1NCcslkIBUzE1UFT3Y5LJBoVSRXUr/n60Np30+SIH/6kU2Qw
25+
MXgxC7sod22uV/rehIZggaPJXPn6c1BJBAw04tvOKu3YUeFngjuE9ZUzQJ8IHxvD
26+
PI3jkHqJBV3xba1eqHCA2SOJ3s5EZHOHCOnZQLePBVUTfYLPSaPt
27+
-----END RSA PRIVATE KEY-----

samples/node/crypto/rsa-pub.pem

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
-----BEGIN PUBLIC KEY-----
2+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkutKlptlsXWe4od+se7M
3+
0I6xQ7CcKuN+B7LUmT3toMWTThXdfEUjbtkZsQAd/NRw9kCSNkUqFoKHHe1YUEa+
4+
fhdjdL6rLRL+K9O3hV5EUHL6CykC+UbjxQ4EOi7fScAv7f1g9jAD6vtI+Rml44uU
5+
zCMzhsoToRpYamebnaDLI28/hs7ZVhdcbWX61XZnhhT2hmB4IeWSpRiNU4nyBtdC
6+
rFPS5Ad2m0HPrfqWnELvfw0sT6Hczhtefv9nFcJuqWTBanA0y6i8m5jjXOqO6J5S
7+
/qUgDVRcozt3GEAx0AgpGBRYGnXOMEMNTsiYwsGrAw2VJxX9SjmYmE47XAFaTEYL
8+
9QIDAQAB
9+
-----END PUBLIC KEY-----

samples/node/crypto/rsa.js

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/**
2+
* HOW TO GENERATE RSA KEY
3+
*
4+
* 1. generate RSA keypair:
5+
*
6+
* $ openssl genrsa -aes256 -out rsa-key.pem 2048
7+
* (enter password to protect the RSA key)
8+
*
9+
* 2. export private key:
10+
*
11+
* $ openssl rsa -in rsa-key.pem -outform PEM -out rsa-prv.pem
12+
* (enter password)
13+
*
14+
* 3. export public key:
15+
*
16+
* $ openssl rsa -in rsa-key.pem -outform PEM -pubout -out rsa-pub.pem
17+
* (enter password)
18+
*/
19+
20+
const
21+
fs = require('fs'),
22+
crypto = require('crypto');
23+
24+
function loadKey(file) {
25+
return fs.readFileSync(file, 'utf8');
26+
}
27+
28+
let
29+
prvKey = loadKey('./rsa-prv.pem'),
30+
pubKey = loadKey('./rsa-pub.pem'),
31+
message = 'Hello, world!';
32+
33+
// encrypt by private key, then decrypt by public key:
34+
let enc_by_prv = crypto.privateEncrypt(prvKey, Buffer.from(message, 'utf8'));
35+
console.log('encrypted by private key: ' + enc_by_prv.toString('hex'));
36+
37+
let dec_by_pub = crypto.publicDecrypt(pubKey, enc_by_prv);
38+
console.log('decrypted by public key: ' + dec_by_pub.toString('utf8'));
39+
40+
// encrypt by public key, then decrypt by private key:
41+
let enc_by_pub = crypto.publicEncrypt(pubKey, Buffer.from(message, 'utf8'));
42+
console.log('encrypted by public key: ' + enc_by_pub.toString('hex'));
43+
44+
let dec_by_prv = crypto.privateDecrypt(prvKey, enc_by_pub);
45+
console.log('decrypted by private key: ' + dec_by_prv.toString('utf8'));

0 commit comments

Comments
 (0)