私はPHPにjava decrypterコードを移植しています。 - それはAES/CBC/NoPadding(128) アルゴでデータを暗号化していますJava javax.cryptoとPHP openssl_decryptが同一ではありません
- encrypted.data: は、私は3つのファイルを持っています。
- aes.key - 秘密鍵です。
- initialization.vector - それは初期化ベクトル
は、私が解読されたデータのためのJava持つjavax.cryptoパッケージの使用AES/CBC/NoPadding(128)アルゴリズムで使用link
でこちらを見ています。
- のOpenSSLライブラリのバージョン2.4.4 LibreSSL
- OpenSSLのヘッダーバージョン2.4.4 LibreSSL
PHPバージョン7.1.0 PHP情報(OpenSSLを)使用します
私のコード例:
マイ・ジャワ・コード:
0必要に応じてマイポータブルPHPコード
<?php
$AesKeyData = file_get_contents('./Cipher2PHP/aes.key');
$InitializationVectorData = file_get_contents('./Cipher2PHP/initialization.vector');
$EncryptedData = file_get_contents('./Cipher2PHP/encrypted.data');
$decrypted = openssl_decrypt(
$EncryptedData,
'AES-128-CBC',
$AesKeyData,
OPENSSL_NO_PADDING,
$InitializationVectorData
);
printf("Your data: %s\n", $decrypted);
Javaコードは動作します。 PHPコードは、不一致で動作します。
Javaコード出力:
Your data: My very secure data. Very secure
Process finished with exit code 0
PHPコード出力:
Your data: �j��2��䈤�n�h�/sEH�,/-��-�^[
Process finished with exit code 0
Base64でエンコードされたDATAS:
PHP:
Base64 AES Key: "Kl/LF5HSL7YCRbPYNp7QssJzcVY/vx88nt9rEYJaXQo="
Base64 InitializationVector: "QXF/8HO4te38LhhuFP9+hA=="
Base64 EncryptedData: "eA1w+ysqsHIdaXsQRSgt9nLPDj7ILcqyZdCW3wDBcy0="
Decrypted Result: "xmqJ0TKgx+SIpP1u/hNoyS9zRUjEAAEsLy251S2hXls="
ジャワ:
コンソールでBase64 AES Key: "Kl/LF5HSL7YCRbPYNp7QssJzcVY/vx88nt9rEYJaXQo="
Base64 InitializationVector: "QXF/8HO4te38LhhuFP9+hA=="
Base64 EncryptedData: "eA1w+ysqsHIdaXsQRSgt9nLPDj7ILcqyZdCW3wDBcy0="
Decrypted Result: "TXkgdmVyeSBzZWN1cmUgZGF0YS4gVmVyeSBzZWN1cmU="
ファイル:
./Cipher2PHP mac$ file -I *
aes.key: application/octet-stream; charset=binary
initialization.vector: application/octet-stream; charset=binary
encrypted.data: application/octet-stream; charset=binary
./Cipher2PHP mac$ xxd aes.key
0000000: 2a5f cb17 91d2 2fb6 0245 b3d8 369e d0b2 *_..../..E..6...
0000010: c273 7156 3fbf 1f3c 9edf 6b11 825a 5d0a .sqV?..<..k..Z].
./Cipher2PHP mac$ xxd initialization.vector
0000000: 4171 7ff0 73b8 b5ed fc2e 186e 14ff 7e84 Aq..s......n..~.
./Cipher2PHP mac$ xxd encrypted.data
0000000: 780d 70fb 2b2a b072 1d69 7b10 4528 2df6 x.p.+*.r.i{.E(-.
0000010: 72cf 0e3e c82d cab2 65d0 96df 00c1 732d r..>.-..e.....s-
./Cipher2PHP mac$ xxd -b aes.key
0000000: 00101010 01011111 11001011 00010111 10010001 11010010 *_....
0000006: 00101111 10110110 00000010 01000101 10110011 11011000 /..E..
000000c: 00110110 10011110 11010000 10110010 11000010 01110011 6....s
0000012: 01110001 01010110 00111111 10111111 00011111 00111100 qV?..<
0000018: 10011110 11011111 01101011 00010001 10000010 01011010 ..k..Z
000001e: 01011101 00001010 ].
./Cipher2PHP mac$ xxd -b initialization.vector
0000000: 01000001 01110001 01111111 11110000 01110011 10111000 Aq..s.
0000006: 10110101 11101101 11111100 00101110 00011000 01101110 .....n
000000c: 00010100 11111111 01111110 10000100 ..~.
./Cipher2PHP mac$ xxd -b encrypted.data
0000000: 01111000 00001101 01110000 11111011 00101011 00101010 x.p.+*
0000006: 10110000 01110010 00011101 01101001 01111011 00010000 .r.i{.
000000c: 01000101 00101000 00101101 11110110 01110010 11001111 E(-.r.
0000012: 00001110 00111110 11001000 00101101 11001010 10110010 .>.-..
0000018: 01100101 11010000 10010110 11011111 00000000 11000001 e.....
000001e: 01110011 00101101
両方の出力を提供できますか?あなたのIV/Keyはどのフォーマットですか?結果をJavaの文字列に変換するのではなく、両方でbase64として出力してみてください。バイナリデータと文字列は、幸せな暗号化を行いません。 –
ええ、どれが期待する出力を提供していますか?入力(キー、iv、暗号文/暗号文)も同様に役立ちます。それ以外の場合は、適切なコードを特定できないため、これをトピックとしてクローズする必要があります。 –
私はbase64データを追加しました。 –