5

我有一个带有 java 和 PHP 文件的应用程序。java 文件将内容发送到 PHP 文件,而这个将响应发送到 java 文件,通过 HTTP 一切。我有 JSON 格式的响应。

我想加密信息并在另一端对其进行解码,java->php并且php->java(这是最重要的)但我不知道该怎么做。

编辑:我正在尝试 BLOWFISH,这是我在 PHP 中的代码(加密数据并发送到 Java)和 Java(获取数据并解码)

PHP

$key = "this is the key";
$crypttext = mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $result_json, MCRYPT_MODE_ECB);
echo($crypttext);

JAVA

public String decryptBlowfish(String to_decrypt, String strkey) {
    System.out.println(to_decrypt);
    try {
        SecretKeySpec key = new SecretKeySpec(strkey.getBytes(), "Blowfish");
        Cipher cipher = Cipher.getInstance("Blowfish");
        cipher.init(Cipher.DECRYPT_MODE, key);
        byte[] decrypted = cipher.doFinal(to_decrypt.getBytes());
        return new String(decrypted);
    } catch (Exception e) {
        System.out.println(e.getMessage());
        ;
        return null;
    }
}

System.out.println(decryptBlowfish(result, "this is the key"));

我执行时的结果是:

Input length must be multiple of 8 when encrypting with padded cipher 

或者有时

Given final block not properly padded
4

3 回答 3

4

同意使用 SSL 证书和加密连接到 HTTPS/SSL 站点的客户端 java 应用程序的 SSL 的评论:http ://www.mkyong.com/java/java-https-client-httpsurlconnection -example/接下来你可能想要一个 HTTPS/SSL php 服务器,这应该会有所帮助:http ://cweiske.de/tagebuch/ssl-client-certificates.htm或者使用这个开源库: http: //nanoweb.si。千兹/

如果上述方法失败,那么我不知道,但最后的手段是自己编写,你可能永远不知道它到底有多安全?

于 2012-06-20T18:09:40.700 回答
0

您可能希望使用相同的算法进行解码/解密,即"blowfish/ecb/nopadding"而不是"blowfish"

private static final String DECRYPTION_ALGORITHM = "blowfish/ecb/nopadding";
private static final String KEY_ALGORITHM = "blowfish";
private static byte[] decrypt(byte[] keyData, byte[] valueData) throws Exception {
    SecretKeySpec keySpec = new SecretKeySpec(keyData, KEY_ALGORITHM);
    Cipher cipher = Cipher.getInstance(DECRYPTION_ALGORITHM);
    cipher.init(Cipher.DECRYPT_MODE, keySpec);
    return cipher.doFinal(valueData);
}
于 2013-08-28T21:55:26.220 回答
-1

如果你不想要 SSL,我也推荐,你可以试试这个:

$str = 'hello world'; //your input data
$pass = 'haj83kdj843j'; //something random, the longer the better
$l = strlen($pass);

for ($i=0; $i<strlen($str); $i++)
{
  $str[$i] = chr(ord($str[$i]) + ord($pass[$i % $l]));
}

用您想要的任何语言编写编码器/编码器既快速又容易。结果字符串是二进制字符串,因此您可能希望使用 base64_encode 或其他方式对其进行转换。应该提供相当好的安全性。

于 2012-06-20T18:06:22.557 回答