有人递给我这个代码片断作为例子,我试图让它多了几分“现代”:如何将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