Мне нужно безопасно передать из браузера на сервер секретную фразу (можно и наоборот, не имеет значения где фраза генерируется, важно ее сохранить и там, и там. Я смотрю в сторону ассиметричного шифрования, но никак не могу найти упорядоченную информацию по реализации. И насколько я понял, велосипед тут нельзя изобретать. В общем сформулирую задачу примерно так:
на js клиенте генерируется пара ключей, публичный ключ передается в первом сообщении серверу.
Сервер при помощи публичного ключа шифрует секретную строку и передает ее и публичный ключ в ответе на клиент.
Клиент расшифровывает секретную строку при помощи приватного ключа.
Не спрашивайте, зачем мне это, конечная задача намного шире, но в данный момент мне нужно именно это.
Я накидал при помощи JSEncrypt код, позволяющий шифровать строку по публичному ключу и расшифровать приватным ключом. Но непонятно, что делать на стороне сервера, как используя публичный ключ расшифровать строку и почему то же самое не сможет сделать человек, перехвативший сообщения.
Знаний почти нет по этому вопросу, в идеале, если вы подскажете библиотеки с готовой реализацией, ну или статью качественную
Вот код js
const keySize = 1024;
let crypt = new JSEncrypt({default_key_size: keySize});
let publicKey = crypt.getPublicKey()
let privateKey = crypt.getPrivateKey();
function encryptData(plaintext){ //Encrypts argument with Public Key
let encrypt = new JSEncrypt();
encrypt.setPublicKey(publicKey);
return encrypt.encrypt(plaintext);
}
let encryptedString = encryptData('some secret phrase');
console.log(encryptedString);
function decryptData(encryptedString){ //Decrypts argument with Private Key
let encrypt = new JSEncrypt();
encrypt.setPrivateKey(privateKey);
return encrypt.decrypt(encryptedString);
}
console.log(decryptData(encryptedString));