は私が一例として、このコードスニペットを渡された、と私はそれがもう少し「現代」を作るしようとしている:私はPHP7によPHPでmcrypt_decryptを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);
}
とこの使用のopensslを変換しようとしています。私はそれはかなり単純に1対1の変換であってもよいが、その常に「返すだろうと思った
function decrypt($string, $key)
{
return openssl_decrypt($string, 'AES-256-ECB', $key);
}
:私は文字列を取り、既存の「urlsafe_b64decode」関数を介して実行し、別の「復号化」関数を作成しました偽 "です。私が間違っているかもしれない何かアイデア? ありがとうございます!
編集: 私が使用しているサービスは、.NETショップですので、それがすべてで助けている場合、ここでは、暗号化するための.NETのために彼らの例です。 2
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
更新はだから私はmcryptのを持っている私のローカルサーバーを更新し、私の最初のコードスニペットから暗号化された文字列をデコードすることができました。私はまだ正確にOpenSSLを使用して文字列を復号化することができないんだ、googleingとstackoverflowの-INGのと実験した後、「セッションID = 7bf727043d85e6963e640fb541d886a7454f8091 & requestid = 1488925528」
:これは、所望の応答です。それも可能ですか?
あなたの文字列を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