PHPの下でMcryptを使って生成されたOpenSSLを使って値を解読できる必要があります。OpenSSLを使用して、ASCIIキーを使用したMcryptで生成された値を解読する方法は?
暗号化に使用されたキーがASCIIであることを除いて、私はこれを使用しています。
以下は、鍵がMD5の場合、OpenSSLがMcryptで暗号化された値を復号化できる実例を示すコードです。あなたが値に$key
を変更した場合
<?php
$message = 'test';
$key = md5('Quigibo');
$iv = openssl_random_pseudo_bytes(0);
$encrypted = mcrypt_encrypt(
MCRYPT_BLOWFISH,
$key,
$message,
MCRYPT_MODE_ECB,
$iv
);
$decrypted = openssl_decrypt(
$encrypted,
'bf-ecb',
$key,
OPENSSL_RAW_DATA | OPENSSL_NO_PADDING,
$iv
);
$trimDecrypted = rtrim($decrypted);
var_export(
[
'Original message' => $message,
'Encrypted' => bin2hex($encrypted),
'Decrypted' => $decrypted,
'Trim decrypted' => $trimDecrypted,
'Message length' => mb_strlen($message, '8bit'),
'Decrypted length' => mb_strlen($decrypted, '8bit'),
'Message == decrypted' => $message === $trimDecrypted
]
);
はしかし、「Quigibo」(その値のMD5ハッシュではなく)暗号化された値は、OpenSSLでデコードすることはできません。
エンコード形式はありますか?OpenSSLで使用する前にASCIIキーに適用して、値を正しく復号化できるようにしますか?
キーの長さが短すぎると、暗号化タイプに応じてmcryptでヌルが埋められます。長いASCIIキーを使用して、それが機能するかどうかを確認してください。そうであれば、これは問題であり、ライブラリの違いです。 –
[McryptからOpenSSLへの暗号化ライブラリのアップグレード](http://stackoverflow.com/q/43329513/608639)、[McryptをOpenSSLで置き換える](http://stackoverflow.com/q/9993909/608639)を参照してください。と[PHP 7.2でのMcryptの削除の準備](http://stackoverflow.com/q/42696657/608639) – jww
https://stackoverflow.com/questions/41181905/php-mcrypt-encrypt-to-openssl -encrypt-and-openssl-zero-padding-問題、OpenSSLをMcryptと同じ方法で暗号化しようとすると、ヌルパディングも問題になります。 – user2045006