5

Java および PHP ファイルを含むアプリがあります。Java ファイルは PHP ファイルにコンテンツを送信し、これはすべて HTTP によって Java ファイルに応答を送信します。JSON形式の応答があります。

情報を暗号化し、反対側でデコードしたいのですがjava->phpphp->javaこれが最も重要です)、その方法がわかりません。

編集:私はBLOWFISHを試しています.PHP(データを暗号化してJavaに送信する)とJava(データを取得してデコードする)の私のコードは次のとおりです。

PHP

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

ジャワ

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アプリケーションについては、ここを参照してください: 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/

上記が失敗した場合、私にはわかりませんが、最後の手段は自分で作成することです.それが実際にどれほど安全であるかは決してわかりませんか?

于 2012-06-20T18:09:40.700 に答える
0

"blowfish"の代わりに" blowfish/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);
}
于 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 に答える