0
これは私のコードです:PHP - Openssl_decryptエラー:間違った最後のブロック長(AES 256 CBCモードの暗号化/復号化)
function decrypt($code)
{
$key = '3552ef55ecdf04324..'; // 64 bytes length
$iv = 'd20818af907b59c3b15d258dd3969770'; // 32 bytes length
$key = hash("sha256", $key,true); // 32 bytes length
$iv = md5($iv,true); // 16 bytes length
echo strlen(base64_decode($code)); // 80 bytes
//return openssl_decrypt(base64_decode($code), 'aes-256-cbc', $key, 0 ,$iv); // return false
$output = openssl_decrypt(base64_decode($code), 'aes-256-cbc', $key, 0 ,$iv);
return openssl_error_string();
}
私は迅速/アンドロイドを使用して暗号化し、私はPHPを使用して復号化します。
openssl_error_string()メソッドは、 "エラー:0606506D:デジタルエンベロープルーチン:EVP_DecryptFinal_ex:間違った最終ブロック長"を返します。
暗号化の速さとアンドロイドのキーとivは同じであることに注意してください。 ここで問題が見つかりません。誰でも?ありがとう。
あなたはPKCS#7(旧姓のPKCS#5)のパディングを指定していますか?暗号化されたデータはブロック長(AESの場合は16バイト)の倍数ですか?私は、デバッグをより困難にするステップを組み合わせないことを常にお勧めします。 Hexは暗号化されたデータ( 'base64_decode($ code)')をダンプしますが、それはあなたの考えではないかもしれません。 – zaph
PKCS#7パディングを指定しています。暗号化されたデータは、ブロック長(80バイト)の倍数です。
@zaph –暗号化されたデータ($コード)されています:ここでhexdumpがある** q7zq1SIaVt3rrTAXlsiEbRbIwx/MB/FxG2PzcYUYsLjRm/O + 36Cjw0XSYnbczJRThayIdxFg1hK0UtvSLem9O/ahRlrsVFVUBI8AYAnPr8I = ** 平文でなければなりません:** a18ac4e6fbd3fc024a07a21dafbac37d828ca8a04a0e34f368f1ec54e0d4fffb ** @zaph –