使用 php 和 java 加密内容


Encrypt content with php and java

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

我想加密信息并在另一边解码它,java->phpphp->java(这是最重要的),但我不知道该怎么做。

编辑:我正在尝试河豚,这是我在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
同意 SSL 的

用途的评论,请参阅此处有关使用 SSL 证书和加密连接到 HTTPS/SSL 站点的客户端 Java 应用程序: 接下来 http://www.mkyong.com/java/java-https-client-httpsurlconnection-example/您可能想要一个 HTTPS/SSL PHP 服务器,这应该会有所帮助: http://cweiske.de/tagebuch/ssl-client-certificates.htm 或者使用此开源库: http://nanoweb.si.kz/

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

您可能

希望使用相同的算法进行解码/解密,即"河豚/ECB/nopadding"而不是"河豚"。

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);
}

如果你不想要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 或其他东西对其进行转换。应该提供相当好的安全性。