PHPスクリプトからJavaクライアントに情報を送るシンプルで安全な方法を実装したかったのです。私はすでにここでいくつかの実装を見てきましたが、これまでには何も働いていなかったので、今や不満を感じています。PHPで単純なAESを暗号化し、Javaで解読する
PHP:
function enc3($plaintext) {
$length = 16;
$key = openssl_random_pseudo_bytes($length);
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key,
$plaintext, MCRYPT_MODE_CBC, $iv);
echo base64_encode($ciphertext);
echo "\n".base64_encode($iv);
echo "\n".base64_encode($key);
}
enc3("test");
のJava:私は編集のビットを使用し、最後の一つは、この一つです
public static byte[] decrypt(byte[] key, byte[] initVector, byte[] encryptedValue) {
try {
IvParameterSpec iv = new IvParameterSpec(initVector);
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/NOPADDING");
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
byte[] original = cipher.doFinal(encryptedValue);
return original;
} catch (Exception ex) {
Logger.getLogger(MainGUI.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
...
byte[] encpryted = Base64.getDecoder().decode(rd.readLine());
byte[] iv = Base64.getDecoder().decode(rd.readLine());
byte[] key = Base64.getDecoder().decode(rd.readLine());
byte[] output = decrypt(key, iv, encpryted);
そして私が手:
javax.crypto.IllegalBlockSizeException: Input length not multiple of 16 bytes
キーもちろん、そこではデバッグ用です。もちろん、動作しているときには削除してクライアントに格納します。何が最善の方法であるかわからない、どういうわけか、私は隠れた方法でそれを隠すことを考えていた。サーバーはそれをどのように作り出すかも知っている。しかし、私はそれがメモリに読み込み可能になると思います。
PHP 7.1.0を使用している場合、 'mcrypt_encrypt()'は廃止されました。 –
いいえ私はPHP7を使用していません。PHP5.6.22-2です。 –
'encryptedValue'の長さを確認しましたか? – SubOptimal