gpt4 book ai didi

java - 通过 Java 传输到 Node.js 来加密和解密数据

转载 作者:行者123 更新时间:2023-12-02 07:41:48 25 4
gpt4 key购买 nike

我正在尝试将数据从 Java (Android) 发送到 Node.js 应用程序,但加密不起作用并且 Node.js 无法正确解密,而且我真的不知道我在做什么我在做什么。

Java:

                    // Encrypt
byte[] input = jo.toString().getBytes("UTF-8");

MessageDigest md = MessageDigest.getInstance("MD5");
byte[] thedigest = md.digest(ENCRYPTION_KEY.getBytes("UTF-8"));
SecretKeySpec skc = new SecretKeySpec(thedigest, "AES/ECB/PKCS5Padding");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skc);

byte[] cipherText = new byte[cipher.getOutputSize(input.length)];
int ctLength = cipher.update(input, 0, input.length, cipherText, 0);
ctLength += cipher.doFinal(cipherText, ctLength);
String query = Base64.encodeToString(cipherText, Base64.DEFAULT);
然后

query 被发送到我们的服务器,并且 jo 是一个 JSONObject

在 Node 中,我正在做:

        var decipher = crypto.createDecipher('aes-128-ecb', encryption_key);
console.log("System: " + new Buffer(fullBuffer, "base64").toString("binary") );

chunks = []
chunks.push( decipher.update( new Buffer(fullBuffer, "base64").toString("binary") , 'hex', 'utf-8') );
chunks.push( decipher.final('utf-8') );
var txt = chunks.join("");

console.log("System: " + txt);
js = JSON.parse(txt);
console.log("System: " + js);

fullBuffer是接收到的正确传输的POST数据

最佳答案

加密和身份验证对于调试来说是残酷的,因为您犯的任何错误都会导致整个输出随机化。建议:

  1. 切换到非加密转换(例如 Base64 或 gzip),以便您可以看到输出的样子。
  2. 尝试找出哪一半坏了。捕获服务器输出并使用 openssl 或 python 对其进行解码。使用其中之一生成一些好的输入并将其填充到您的客户端中。
  3. CBC 比 ECB 安全得多。
  4. 如果这些都没有帮助,请进入低级加密和解密,确保 key 和密文在内容和长度上完全匹配,并仔细观察算法选择。

关于java - 通过 Java 传输到 Node.js 来加密和解密数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11477175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com