由於mcrypt被認爲已經過時,我的任務是升級當前代碼以使用openssl。聽起來很簡單,但...經過幾天的嘗試和失敗,我覺得瘋了。使用openssl解密mcrypt
我對你的問題是:你有沒有辦法用以前用mcrypt加密過的openssl數據解密?我已經閱讀了很多關於這個問題的文章,其中大多數人都說在運行mcrypt之前,必須先手動填充數據。 問題是已加密的mcrypt-ed數據(使用mcrypt提供的自動填充空值)並駐留在數據庫中,因此對其進行修改是不可能的和/或期望的。
提及:
- 所使用的算法是Rijndael的-128 CBC與一個32字節的密鑰(所以我使用AES-256-CBC加入OpenSSL)。
- 我爲php(php-crypto)使用openssl包裝。
- 我已經設法通過簡單地剝離結束解碼字符(如果它們不是字母數字)來使逆操作起作用(使用mcrypt解碼openssl)。
- 在mcrypting之前手動填充數據,然後使用openssl解密它就像一個魅力,但這不是問題。
一些代碼片段:
// Simple mcrypt encrypt, decrypt with php-crypto example
// This doesn't work and produces a "Finalizing of cipher failed" error
$data = "This is a text";
$strMcryptData=mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv);
$algorithm = 'aes-256-cbc';
$cipher = new Cipher($algorithm);
$sim_text = $cipher->decrypt($strMcryptData, $key, $iv);
// Simple mcrypt encrypt with padding, decrypt with php-crypto
// Works and produces the correct text on decryption
$pad = $blocksize - (strlen($data) % $blocksize);
$text = $data;
$text .= str_repeat(chr($pad), $pad);
$strPaddedData=mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $text, MCRYPT_MODE_CBC, $iv);
$sim_text = $cipher->decrypt($strPaddedData, $key, $iv);
是的,它應該是可能的。您可能需要提供您的代碼才能幫助您。不要忘記添加示例輸入,輸出和預期輸出。如果你不想,那麼我不知道你在找什麼樣的答案。 –
另請參閱[將我的加密庫從Mcrypt升級到OpenSSL](http://stackoverflow.com/q/43329513/608639)和[準備在PHP 7.2中刪除Mcrypt](http://stackoverflow.com/q/ 42696657/608639) – jww