Здесь мы будем использовать пакет под названием hybrid-crypto-js для достижения наших целей. Hybrid Crypto JS - это набор инструментов для гибридного (RSA + AES) шифрования и дешифрования для JavaScript. Hybrid Crypto JS сочетает в себе алгоритмы шифрования RSA и AES, что позволяет эффективно шифровать и расшифровывать большие сообщения. Эта кроссплатформенная библиотека основана на Forge. Hybrid Crypto JS можно использовать в браузерах, Node.js или React Native.

Здесь мы используем этот пакет только для браузера, более подробную информацию вы можете найти в hybrid-crypto-js.

Прежде всего, мы должны загрузить файл hybrid-crypto.min.js здесь.

<script type="text/javascript" src="hybrid-crypto.min.js"></script>

Инициализация:

Как показано ниже, мы должны сначала инициализировать hybrid-crypto-js.

// Basic initialization
var crypt = new Crypt();
var rsa = new RSA();

Сгенерируйте парные ключи:

Как показано ниже, мы можем сгенерировать пару закрытых ключей и открытых ключей.

<script>
var publicKey;
var privateKey;
var encrypted;
var decrypted;
generateKeys();
function generateKeys() {
    var rsa = new RSA();
    rsa.generateKeyPair(function(keyPair) {
        publicKey = keyPair.publicKey;
        privateKey = keyPair.privateKey;
    });
    setTimeout(function () {
      console.log('publicKey', publicKey);
      console.log('privateKey', privateKey);
    }, 3000);
}

После генерации ключей мы можем зашифровать сообщение, как показано ниже.

Шифрование

здесь мы можем зашифровать наше сообщение с помощью открытого ключа, который мы сгенерировали.

function Encryption() {
    var entropy = 'Testing of RSA algorithm in javascript.';
    var crypt = new Crypt({
        rsaStandard: 'RSA-OAEP',
        entropy: entropy
    });
    var rsa = new RSA({
        entropy: entropy
    });
    var message = 'Hello, this is the demo of encryption/decryption in javascript!';
    encrypted = crypt.encrypt(publicKey, message);
    console.log('encrypted', encrypted);
}
setTimeout(() => {
    Encryption();
},3000);

Это даст результат, как показано ниже.

encrypted {"v":"hybrid-crypto-js_0.2.4","iv":"yjM7NP5g+GHA6xnB6MyhsfqIcz4dbMKWvkX49MOurJ4=","keys":{"93:7f:26:33:72:25:a4:e5:40:ab:8a:55:24:b5:77:9d:df:34:28:d9":"JHYCn+wZqsRvyYjkyogxv2iXJ2Fil/vKUoACmbZTdlT2BsXtDS12fNhFqcXgmLbmZWguZJSwT70jIua8eSxn8YK3wBUBkfe8UGnBCJUHvWk8RYNoBGiVe0xg3GNzqVGMVLwLLyuu9bc+Eq7rB3H8PVojXFIp2FW7r4z/NJE5XaPSsF5sNNbevuB9igIjW9nstvCRGpz9i3ToOugxGfMY416SxIiTqPI5GGkm7XNizkHPN/9njJTAXWZeJoF7oOStnOdVQrMoKAHOAXYV9UXZZbvaOQ2e4+HS5QHNZ94AqLahzJe0hZ+Aq+PQtLISbUwiNMZKl90k2xynLVTXsI9RcHafsLfHUkGqpWz4xitkydaMhwouDl8DRIUPsKiZDFVRT+fl2lKeBm5GAm8LRfwTCKue5gMNxkKDpcqc2Dfwd03lG81es+xqa9UHH+VZrd3dQXR1yomEVTU6D2xh9auZgjkv1UXMu60mZdjcEMVdenZc3FIIk2ajlsbmFhlA57AhfT0Q0Q9FSLMdFEnfFGta5oxIF97Ukxo4MGcVpu+mm/5XbsxnA7zS2QBue+431HgKeH/bB/+v0oQaZZiL/Dy0oAPQ+a+lxiApS4vg+oIY0WgV4QcN7/Y1Ayo1Y/ZzbQr5MKj/QhqbDI28n6ktw3gd8uobTWnnRLTb7VrRt6GOt0A="},"cipher":"MlwKY5JhLwmoOvLBCjiqE74PWpR4bnUoVLWI7bFOvrdSGSzbOY1GHWuA7efCJoL380lvrs1fOVS71Z5Dx+GEbA=="}

Расшифровка

здесь мы можем расшифровать сообщение с помощью закрытого ключа, который мы сгенерировали выше.

function Decryption() {
    var entropy = 'Testing of RSA algorithm in javascript.';
    var crypt = new Crypt({
        rsaStandard: 'RSA-OAEP',
        entropy: entropy
    });
    var rsa = new RSA({
        entropy: entropy
    });
decrypted = crypt.decrypt(privateKey, encrypted);
    console.log('decrypted', decrypted);
}
setTimeout(() => {
    Decryption();
}, 3000);

Это даст нам результат, как показано ниже.

decrypted {message: "Hello, this is the demo of encryption/decryption in javascript!", signature: undefined}

Итак, как и выше, мы можем использовать RSA для шифрования и дешифрования в javascript.

Спасибо.