如何在客户端(CryptoJS)和服务器(Crypto Node.js)之间建立 Diffie Hellman 连接
How to make Diffie Hellman connection between client(CryptoJS) and server(Crypto Node.js)
我正在尝试在服务器和客户端之间建立连接。我使用 elliptic.js 创建 ECDH 密钥并尝试加密解密消息。密钥在服务器和客户端上都是相同的。服务器之间一切正常,但服务器和客户端之间存在很多问题。
为了使客户端能够破译来自服务器的消息,我做了很多工作。但我无法在客户端进行正确的加密。服务器不理解它。连客户都看不懂
我的客户端使用 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
经过多次尝试,我决定也使用 Crypto-JS 重新制作服务器端。这个决定是完全正确的。一切正常。
cipherData(data, secret) {
let encrypted = CryptoJS.AES.encrypt(data, secret).toString();
let b64 = CryptoJS.enc.Base64.parse(encrypted);
encrypted = b64.toString(CryptoJS.enc.Hex);
return encrypted;
}
decipherData(encryptedData, secret) {
let data;
try {
let b64 = CryptoJS.enc.Hex.parse(encryptedData);
let bytes = b64.toString(CryptoJS.enc.Base64);
data = CryptoJS.AES.decrypt(bytes, secret);
data = data.toString(CryptoJS.enc.Utf8);
} catch (e) {
console.log('Error decrypting data: ' + e)
}
return data;
}
我正在尝试在服务器和客户端之间建立连接。我使用 elliptic.js 创建 ECDH 密钥并尝试加密解密消息。密钥在服务器和客户端上都是相同的。服务器之间一切正常,但服务器和客户端之间存在很多问题。
为了使客户端能够破译来自服务器的消息,我做了很多工作。但我无法在客户端进行正确的加密。服务器不理解它。连客户都看不懂
我的客户端使用 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
经过多次尝试,我决定也使用 Crypto-JS 重新制作服务器端。这个决定是完全正确的。一切正常。
cipherData(data, secret) {
let encrypted = CryptoJS.AES.encrypt(data, secret).toString();
let b64 = CryptoJS.enc.Base64.parse(encrypted);
encrypted = b64.toString(CryptoJS.enc.Hex);
return encrypted;
}
decipherData(encryptedData, secret) {
let data;
try {
let b64 = CryptoJS.enc.Hex.parse(encryptedData);
let bytes = b64.toString(CryptoJS.enc.Base64);
data = CryptoJS.AES.decrypt(bytes, secret);
data = data.toString(CryptoJS.enc.Utf8);
} catch (e) {
console.log('Error decrypting data: ' + e)
}
return data;
}