如何使用openssl_decrypt 使用十六进制作为密钥?

时间:2021-03-15 13:29:27

标签: c# php encryption

我想在 PHP 中使用 openssl 解密一个加密的字符串,

使用以下代码在 C# 中加密字符串:

    private static MemoryStream MsEncrypt = null;
    private static CryptoStream CsEncrypt = null;
    public static string EncryptStringToBytes(string plainText, byte[] key)
    {
        using (var rijndaelConfig = new RijndaelManaged())
        {
            rijndaelConfig.Key = key;
            rijndaelConfig.Mode = CipherMode.CBC;
            rijndaelConfig.BlockSize = 128;
            rijndaelConfig.Padding = PaddingMode.Zeros;
            rijndaelConfig.GenerateIV();
            
            var encryptor = rijndaelConfig.CreateEncryptor(rijndaelConfig.Key,
                                                           rijndaelConfig.IV);
            byte[] encrypted;
            try
            {
                MsEncrypt = new MemoryStream();
                CsEncrypt = new CryptoStream(MsEncrypt, encryptor, CryptoStreamMode.Write);
                using (var swEncrypt = new StreamWriter(CsEncrypt))
                {
                    swEncrypt.AutoFlush = true;
                    swEncrypt.Write(plainText);
                }
                encrypted = MsEncrypt.ToArray();
                byte[] result = new byte[rijndaelConfig.IV.Length + encrypted.Length];
                rijndaelConfig.IV.CopyTo(result, 0);
                encrypted.CopyTo(result, rijndaelConfig.IV.Length);
                return Uri.EscapeDataString(Convert.ToBase64String(result));
            }
            finally
            {
                if (MsEncrypt != null)
                {
                    MsEncrypt.Dispose();
                }
                if (CsEncrypt != null)
                {
                    CsEncrypt.Dispose();
                }
            }
        }
    }

这是我的钥匙:“2b8958eb1da990c039933a504259059fc9c8a893447fcbb3a8c504797e637288”
这是我的字符串:“你好[[]]那里!”
这是加密值“O0wTQerC%2FQs5sFUMc3uXoSkrsJcY7toWqlsQYRYAD64%3D”
这是小提琴 (C#) 中一个有效的加密和解密函数:https://dotnetfiddle.net/9BKh5J

这是迄今为止我在 php 中尝试过的加密方法:

function decrypt($text,$key){
    $encrypted = base64_decode($text);
    $key = unpack('C*', $key);

    $key = implode('',$key);

    $decrypted = openssl_decrypt($encrypted, 'aes-128-cbc', $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING );
    return rtrim($decrypted, "\0");
}

这是php小提琴:https://paiza.io/projects/zwXd611Gw5snUclFMjebEw

但我得到一个空字符串,知道为什么吗?

0 个答案:

没有答案