Я пытаюсь установить соединение между сервером и клиентом. Я создаю ключи ECDH с помощью elliptic.js и пытаюсь зашифровать-расшифровать сообщения. Секретные ключи одинаковы как на сервере, так и на клиенте. Между серверами все в порядке, но между сервером и клиентом много проблем.
Я много работал, чтобы заставить клиента расшифровывать сообщения с сервера. Но я не могу сделать правильное шифрование на клиенте. Сервер не понимает этого. Даже клиент этого не понимает.
Мой клиент использует Crypto JS (я пытался использовать forge и sjcl, но мне было сложно их понять), а сервер использует Crypto.
Есть мои функции на клиенте:
cipherData(data, secret){
let encrypted = CryptoJS.AES.encrypt(data, secret).toString();
return encrypted;
}
decipherData(encryptedData, secret) {
let data;
try {
//make tranformations because of little features in crypto (node) - it uses empty salt array
let ct = CryptoJS.enc.Hex.parse(encryptedData);
let salt = CryptoJS.lib.WordArray.create(0); // empty array
data = CryptoJS.AES.decrypt({ciphertext: ct, salt: salt}, secret);
data = data.toString(CryptoJS.enc.Utf8);
} catch (e) {
console.log('Error decrypting data: ' + e)
}
return data;
}
На сервере есть мой код:
cipherData(data, secret, algorithm = 'aes256'){
const cipher = crypto.createCipher(algorithm, secret);
let encrypted = cipher.update(data,'utf8', 'hex');
encrypted += cipher.final('hex');
return encrypted;
}
decipherData(encryptedData, secret, algorithm = 'aes256'){
const decipher = crypto.createDecipher(algorithm, secret);
let data = decipher.update(encryptedData,'hex', 'utf8');
data += decipher.final('utf8');
return data;
}
Может быть, кто-то может мне помочь?
Например, вычисленный секретный ключ (в шестнадцатеричном формате): e6922091e78adce7cff10e01b4eb949317e56ece3597a7daa23c819c6882a955