如何在客户端(CryptoJS)和服务器(Crypto Node.js)之间建立Diffie Hellman连接

问题描述 投票:0回答:1

我正在尝试在服务器和客户端之间建立连接。我用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

node.js encryption cryptography cryptojs diffie-hellman
1个回答
0
投票

经过多次尝试,我决定使用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;
    }
© www.soinside.com 2019 - 2024. All rights reserved.