Saturday, January 15, 2022

RSA encryption

public and private key pair change everytime message is sent. encrypt with public key and decrypt with private key.

PS C:\Users\zchen\Programming\node-crypto-examples-main\src> node .\asymmetric-encrypt.js
public key:  -----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0luzMXYhpLCttFV3GBEK
J8vtPmaO4l8K6LlRMWRikSK3yWGlTlhBDlYhsBztebzT0n2eI7F2luXgozVWgE0I
iHyj4PaVek3lR1iJPK9wzg5VVtPGDDCWdW86i7XJZB7QcRa74gjAIeaUD/m0gK8t
USBt9Q1Z+tkT921mswsbLlS8pytzfm4DOhHnBhoJ93UZHx/LAHU7JrA6GHBtNnb0
p47lWkMN4K7KMFTB4uMht/ZSx+ciFzzKdZVItEvcUXFdDEoUkyXz03UvXe6yirFs
RSLqw5c5VFrDddBwPkHquvLvtj992TB1Hb5rU4R4ewir2AUHtww6E0FfWesSXYLw
NQIDAQAB
-----END PUBLIC KEY-----

private key:  -----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDSW7MxdiGksK20
VXcYEQony+0+Zo7iXwrouVExZGKRIrfJYaVOWEEOViGwHO15vNPSfZ4jsXaW5eCj
NVaATQiIfKPg9pV6TeVHWIk8r3DODlVW08YMMJZ1bzqLtclkHtBxFrviCMAh5pQP
+bSAry1RIG31DVn62RP3bWazCxsuVLynK3N+bgM6EecGGgn3dRkfH8sAdTsmsDoY
cG02dvSnjuVaQw3grsowVMHi4yG39lLH5yIXPMp1lUi0S9xRcV0MShSTJfPTdS9d
7rKKsWxFIurDlzlUWsN10HA+Qeq68u+2P33ZMHUdvmtThHh7CKvYBQe3DDoTQV9Z
6xJdgvA1AgMBAAECggEAHOdmttwhgUyZgZbgt1jYCWHW5mUXKvmeOR4FjwDZHlIj
6LLXEO3Fep/RHy7KXpjYjiqeiQ8AWXmapTJWAWkUTBS8O9QF8/kyENyUdtcwa8/C
YBzXMKOYeOhgpgPDeVNWlsNl64gCRmY1YACSkcAAPQ50rWA5ReN//9ZzbxSOlo3k
KrG84lwUSdeKiAzjFIbg9rHRgoF5CCnBTjKG1IPrncwJGLNRWPiXO4UzQ6Ia6pO7
gFgEdWGG6Z6GzGt37/SAHAsMc/VUjrRLRgokHvvvjuu5XMbHpLxN+yngOram62dl
pWTTXpP8FRE2i+9k4n+NT+9LhVA5uSQ9BdpGxhGtoQKBgQD64Z41na/pr5pMe1cQ
JcI3OlR2tx84PGWqB8xVnfxSjdJ/1nh7BO+hMFrm9FvRxAQHTMiffnBcryO11v81
TOxtBdJK0Gw157srA+x10zTeZCQSMzUeu1hYEyUhe0CNARL/zNlRNcU+oQYZ3O9l
t1JrPL153q0eDb9GxJPHzbDMOQKBgQDWpmzRDN1o4zKnUXAEcI8pfTwg2Y4V+QX6
wlMnr18GdjIfY4qbmy/fvHIWCiaVGbWux7DzpXMgRkZZquNJIltfgclzFNyxx+Hf
5YZXLiVnrMOXtDpKtnaHtynGixbs62q5csgIUtBCBxouPGP7bXm0aTpSYjNp4I1S
F4kjJl273QKBgQDIjLTw/UXTU7nPq8U0Nkrj5TAB2m8NgFJwsl0oj+tVfuOnp6WW
CaMZQlNYTjxcGgpyX3H89ZEStjqgsOZAEGbq2/14KtZl3QGk6DUNFzIrGPgwyFiN
YYvElEFZW3KFhTdP3sxV+9raLtR2tkN1Fy++Y8a/dj8DSFAAXUIZNZdAGQKBgQC0
e5EpobiVldukhjw6723gw9WIBYWMAiw98aE70CCFbWKts+P6/NyfMnN3Bqf0XH7A
bFXkN+x6abyDbsXXW5Ua1CVPp2396gSJXxO7QCjhaIm5iCgvZAZ8DM2KjK8FHNlK
/zEkloVXz2L7F3o2EZHw2T3ZwYpbbx1Etldv/7V23QKBgG1pRjJ9Ut9UV3RYEoL/
Wq5wjNnQnaipjbz4VKYZ4MDWhLCkFePE2fmnskDeWyC28hX8hcyn5EyZoL7JMXt6
0k6OtXLnclAoJW53Yo+xIAnOZJq42yMk3c1sHfrropi84iC8f7xrCdj0iu23+dlI
oxCbxeFq5Jct3nZ98K9dSlfV
-----END PRIVATE KEY-----

encryption:  6aa45b77a87ec83dead6f020773f8dbbd43ab32973f79b6680c3e773a8934af8591261dfa19aba0cb99746115af84dc0e83cf5a7b47f83b226e9e4c9fb23b67187bfd82d52f43fa42b301e362571c4dfa20cdbc8fb0e58fd21ba5be14ef51622ab213617de6d0e97fe81587de2296895b87eea850653cc39828dec88ed24366e1bb1b1c85cd0f9173a1c96e152b77038e618fda2a71a979915ba09701572a86fd35a5c35ee9e273e4a435c47234bedd214868e7ea593e9a9084d3b340d2f92a965c740804fb6e9ab2e842ce0bd950411521cac0f741b26135b7e259722a061152157496ef84579a3fd400a822d12438dab9129c53593882672ecbd38f69b00b5
decryption:  the british are coming!
PS C:\Users\zchen\Programming\node-crypto-examples-main\src> node .\asymmetric-encrypt.js
public key:  -----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtRXqrm+JSuiqlMyS3ypk
2toXMlsuWxzg3vJWvvS1l/ijdTrsYRbE4JdQC218uG9nmMcLRtiF3C1GDDQDNkCK
mqOsniqEX87brXwD3kPc95dS0UoKYwRahxp4+8bEJd2lXXU/2GzH1B8oebFC640J
tZlrTdgcivM/qzArd8ai4j/Lv/UE89t5L3tDA9Vv8aJyoTYtKIv0g6iJG8jDYUxP
QSh6yZFySSkXdkAYGgJOaleRh05BektrDcLRUhCHMd4Y3RhvvKG7mCwGM2kwnNII
xIonaJmyM4RsjltP81uyclGmCI6RKVgoyeZlOteFe8tRCNjfQneZJQYDrENfQ+s6
cQIDAQAB
-----END PUBLIC KEY-----

private key:  -----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC1Fequb4lK6KqU
zJLfKmTa2hcyWy5bHODe8la+9LWX+KN1OuxhFsTgl1ALbXy4b2eYxwtG2IXcLUYM
NAM2QIqao6yeKoRfztutfAPeQ9z3l1LRSgpjBFqHGnj7xsQl3aVddT/YbMfUHyh5
sULrjQm1mWtN2ByK8z+rMCt3xqLiP8u/9QTz23kve0MD1W/xonKhNi0oi/SDqIkb
yMNhTE9BKHrJkXJJKRd2QBgaAk5qV5GHTkF6S2sNwtFSEIcx3hjdGG+8obuYLAYz
aTCc0gjEiidombIzhGyOW0/zW7JyUaYIjpEpWCjJ5mU614V7y1EI2N9Cd5klBgOs
Q19D6zpxAgMBAAECggEACnHNK2p7fLqWvCZggkarsoPJurnPnqm3vqQzpKfwoWdR
5j0TzTXG/T08/Ku/+dNTIli4qclrTxu9Yo7NcJ+gXvL5zdWd9Pi1avgwMO2xHQa5
XCDtIHDr18cLG1qHjbePBijxGcaMcAusBfjXZ0anPLYwnjjMzKbjETiiCTKHyozS
lxE0aSKpQLBHRaiiEbbpva5Ao5OKY4+bR89Jij1wlGn0fj1YCDT6qpoPF4xlvFPb
8WSwthot3kp0JRMEHiK8UVJDvecZms/wOnl17o9ZnbO0ouTeBEL9ZWU+fWc7Ls5Y
/EgxT71VrKxytppU8vtQiHvdNPJj/Z0iK+IBblUVwQKBgQDdIXoHoQTWZIBFOEtr
9QCddEtAW4Sv8bqtTgrCwCpN9l1s3cgk3p+ErjsjwqwIbIy6+PwV0rNINGfM1yum
KiqhpK9QEBYTgNjGirUhKpAtNO8rksSds4FlWbgwvJkwt7CpsCrQh+rPEj4LCxRM
wP6zS15JcVkeo0i4dRzglWry1QKBgQDRo+mNSJtrCBmbDnUsu9IW9rz8Y6Lm5lCL
YtV6s5+C7W6dwWbP4no1WXF4bmXmCzqzhmwIylg0slL/GBKUjvUgzLBMXHAO50V/
bYhrAkn5BItiVILvlM2Mdkl2Q6V7FubkU/m5DMuHF67lOOcCu1K+iFsL38ZfaqMH
9qoQIbvfLQKBgQC7Q7pf85BxLzMha4cTqawXq4B+xAIeLgv07/5U5v/sfhKoOzlf
X9ifOB2FLzsY9zRGssxofsKtBxRQeHfShCsOMLT2jGjlo1vw5051A+KNJiLVN7mi
A341IkHFpDHm++h0C2h2qGPFcKFyILPUPCx2EgGLGJ5sP8M50pPd7Stg8QKBgQC6
v+aUykJQ9VVCEH4HTIVZmZE+0E9Um4TStkdv18VX78SjWZ8JvzmYfsYbP1UcuZIg
TLW+muo6f0R6I+qhVjw9bLn8PDhCvnjljCCDGvXkk8zK2ngNjqQQ5WqJpLcsUHl8
muYRl7lS7aEKZ0c64r5SJsvcZwqjAy6aMHzMhBCFPQKBgDlkG4ramWbIuYQSARz+
OKfNdILwLtAnRS32MPhFMdljyh8Ipwa+cGxeYbnINUWNEyFT8S+6ZIYPWvbu3YqN
9QLik8NqGGskC9Ut8htUCz6Q9HL0ICZHFiD6QkOesN41dG7AWW9tag5bqMm5WLOH
keZ5m0YEMeuTAYcHdW6KUVOn
-----END PRIVATE KEY-----

encryption:  b2405679353cd61a19659834bae0fd21318983c229f2bed5745441ed55569051f705253d28ea9bdd4252c9733eb14534a4f114ef0dede6091438672b90cb18b081448b4421070a3d20991d3885433d410e4aba0871fe356759fca2a80b9920866bb4e32c99eb25174b391813d68aead98e5500d41386338f273d881276f1bdb4f874120f23d120718100fc2623fb9534ad309f1009a59f2ba68225710491bdb45483fefc780e9ea048d8775f58d56c96370d195dc9faed39161576bc1f3ad47ced5111a01032eae0a7a78e8afde457c1d054cfe34c6a496a8276997cc609ef7cf6f7209321c7df6c03a4cd2af283dcee17f481c9757fecd543586d41d6c8dda6
decryption:  the british are coming!

------------------------------
//asymmetric-encrypt.js

const { publicEncrypt, privateDecrypt } = require('crypto');
const { publicKey, privateKey } = require('./keypair');

const message = 'the british are coming!'

const encryptedData = publicEncrypt(
  publicKey,
  Buffer.from(message)
);

console.log('public key: ', publicKey)
console.log('private key: ', privateKey)
console.log('encryption: ', encryptedData.toString('hex'))


const decryptedData = privateDecrypt(
  privateKey,
  encryptedData
);

console.log('decryption: ', decryptedData.toString('utf-8'));

--------------------------------
//keypair.js

const { generateKeyPairSync } = require('crypto');

const { privateKey, publicKey } = generateKeyPairSync('rsa', {
  modulusLength: 2048, // the length of your key in bits
  publicKeyEncoding: {
    type: 'spki', // recommended to be 'spki' by the Node.js docs
    format: 'pem',
  },
  privateKeyEncoding: {
    type: 'pkcs8', // recommended to be 'pkcs8' by the Node.js docs
    format: 'pem',
    // cipher: 'aes-256-cbc',
    // passphrase: 'top secret'
  },
});

// console.log(publicKey);
// console.log(privateKey);

module.exports = {
    privateKey, publicKey
}

reference:

No comments:

Post a Comment