有人遞給我這個代碼片斷作爲例子,我試圖讓它多了幾分「現代」:如何將mcrypt_decrypt轉換爲PHP中的openssl_decrypt?
$key='09KzF2qMBy58ZWg137N$I4h6UwJvp!ij';
$encrypted='Chttex_vuYYEK-oKQfwYrVCZYbnNh3tMgwGuK-VOsvt7TjF5M6MIcsE6e8DynZrHuxrmtmIpiN215WygdO-hzXnmx45RXzBWdxk_MkIvNoI=';
$encrypted = urlsafe_b64decode($encrypted);
$decrypted = decrypt($encrypted, $key);
$inflated = gzinflate($decrypted);
echo 'Decrypted: '.$inflated."<br />";
function urlsafe_b64decode($data) {
return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT));
}
function decrypt($data, $key)
{
return mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_ECB);
}
我在PHP7並試圖此使用OpenSSL轉換。我拿串,並通過現有的「urlsafe_b64decode」功能運行它,然後創造了另一個「解密」功能:
function decrypt($string, $key)
{
return openssl_decrypt($string, 'AES-256-ECB', $key);
}
我認爲這將是一個相當簡單的1對1的轉換,但它總是返回「假」。任何想法我可能做錯了什麼? 在此先感謝!
編輯: 由於我使用的服務是一個.NET店,這裏是他們的.NET例如用於加密,如果有幫助的。
Public Shared Function Encrypt(ByVal data As Byte()) As Byte()
Dim encrypted As Byte()
Using rijAlg = New System.Security.Cryptography.AesManaged()
rijAlg.Key = Encoding.ASCII.GetBytes("encryptionkeyhere")
rijAlg.Padding = System.Security.Cryptography.PaddingMode.None
rijAlg.Mode = System.Security.Cryptography.CipherMode.ECB
Dim encryptor = rijAlg.CreateEncryptor(rijAlg.Key, rijAlg.IV)
Using msEncrypt = New MemoryStream()
Using csEncrypt = New System.Security.Cryptography.CryptoStream(msEncrypt, encryptor, System.Security.Cryptography.CryptoStreamMode.Write)
csEncrypt.Write(data, 0, data.Length)
End Using
encrypted = msEncrypt.ToArray()
End Using
End Using
Return encrypted
End Function
更新2 所以我更新了我的本地服務器有mcrypt的,並且能加密的字符串從我的初始代碼段進行解碼。這是所期望的迴應:「會話ID = 7bf727043d85e6963e640fb541d886a7454f8091 &的requestId = 1488925528」
googleing和計算器,荷蘭國際集團和實驗後,我仍然無法正確解密字符串中使用OpenSSL的。它甚至有可能嗎?
爲什麼不簡單地使用Mcrypt解碼你的字符串,然後用OpenSSL重新加密它? –
不幸的是,它是一個PHP7服務器,我無法安裝mcrypt擴展或更改ini文件。 – TerryMatula
不要使用ECB模式,這是不安全的,請參閱[ECB模式](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_Codebook_.28ECB.29),向下滾動到企鵝。 取而代之的是將CBC模式與隨機IV一起使用,只是將加密數據與IV一起用於解密,並不需要保密。 – zaph