java - 将 ByteArray 从 PHP 发送到 Java

标签 java php post aes url-encoding

我在将 AES 加密数据从 JAVA 发送到 PHP 时遇到问题。

我的加密函数:

public static byte[] encrypt(String input, String key, String iv) {

    byte[] raw = key.getBytes(Charset.forName("UTF8"));
    SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
    try {
        Cipher cipher = Cipher.getInstance(CIPHER_MODE);
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, new IvParameterSpec(iv.getBytes()));
        return cipher.doFinal(padString(input).getBytes("UTF-8"));
    } catch (Exception e) {
    }

    return new byte[0];
}

加密函数正在以字节数组形式返回数据 为了发送 POST 数据,我使用 apache HttpClient/HttpPost (首选,但不是必需的)

    HttpEntity params = MultipartEntityBuilder.create()
            .addTextBody("data1", new String(encodedData1, Charset.forName("UTF8")))
            .addTextBody("data2", new String((encodedData2, Charset.forName("UTF8")))
            .addTextBody("data3", "data3").build();

现在,我使用 PHP 服务器接收数据(我无法在此处添加功能)

        $data1 = filter_input(INPUT_POST, 'data1');
        $data2 = filter_input(INPUT_POST, 'data2');
        $data1decoded = DecryptAES($data1, $key, $iv);
        $data2decoded = DecryptAES($data2, $key, $iv);

将编码的 byte[] 从 JAVA 发送到 PHP 的正确方法是什么?我知道,Base64.encode 可能是最好的选择,但不幸的是(正如我之前提到的)我无法修改 PHP 服务器端代码... new String(encodedData1, Charset.forName("UTF8")) 不起作用。

在 node.js 中,我可以使用 toString('binary') 以正确的格式发送数据。

最佳答案

你不能只创建新的字符串(Java 太花哨了)。

使用

public static String byteToString(byte[] bytes) {
    StringBuilder b = new StringBuilder();
    for (byte c : bytes) {
        b.append((char) (c >= 0 ? c : 256 + c));
    }
    return b.toString();
}

使用您的示例

HttpEntity params = MultipartEntityBuilder.create()
          .addTextBody("data", byteToString(data))
          .build();

关于java - 将 ByteArray 从 PHP 发送到 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23806344/

相关文章:

php - 如何在 phar 文件代码中获取 .phar 文件的真实目录?

PHP 和 Postman Curl 无选项错误和证书处理

c - libcurl - PUT 问题后的 POST

java - 当 HTTP 响应发送到死亡的客户端时,服务器不会抛出异常

java - 用于匹配未被引号包围的逗号的正则表达式

java - 如何为 map reducer 作业在 java 中为 hadoop 输入自定义选择列读取

java - 有没有一种方法可以快速计算字符串的签名以帮助检测字符串更改?

php - MySQL 在 if 语句后停止运行查询

php - 通过post将结构化数据传递给php

php - 不使用 header 重定向从我的 PHP 将值发布到第三方支付网站