Здесь мы будем использовать пакет под названием 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.
Спасибо.