C#和PHP具有不同的AES加密结果 [英] C# and PHP have different AES encryption results

查看:437
本文介绍了C#和PHP具有不同的AES加密结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有相同的数据和加密密钥,相同的算法,相同的模式但结果不同。

C#代码:

I have same data and encryption key, same algorithm, same mode but different result.
C# Code:



        string encKey = "0F777D55FDB154E7D8754C3C0E660A65";
        string dataToEncrypt = "FF01083131323233333434FF020102FF030E3230313630313230313635353032FF040C313132323333343435353636FF05083131323233333434FF060F6D6173746572706173735F75736572FF070101FF080104800000000000000000000000";
        using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
        {
            using (System.Security.Cryptography.AesManaged AES = new System.Security.Cryptography.AesManaged())
            {
                AES.KeySize = 128;
                AES.BlockSize = 128;
                AES.Key = StringToByteArray(encKey);
                AES.IV = StringToByteArray("00000000000000000000000000000000");
                AES.Padding = System.Security.Cryptography.PaddingMode.None;
                AES.Mode = System.Security.Cryptography.CipherMode.CBC;

                byte[] bytesToBeEncrypted = StringToByteArray(dataToEncrypt);
                using (var cs = new System.Security.Cryptography.CryptoStream(ms, AES.CreateEncryptor(), System.Security.Cryptography.CryptoStreamMode.Write))
                {
                    cs.Write(bytesToBeEncrypted, 0, bytesToBeEncrypted.Length);
                    cs.Close();
            }
            encryptedData = ByteArrayToString(ms.ToArray());
        }
    }
    Console.WriteLine(encryptedData);
    Console.ReadLine();



<强>结果: 13A6DAD3119F29A8C4BF6D5BD11564E4E1A93F85B7F2AD9E8E97756688754DE32A23ADE41DFD9F76186D8EB25E66D0DCF458ECAA026F16463811C48FC814E50B10FF57FDFDB0C0761088D1AC4DDDAE749CC77FD402A2B8E005A43AEEC914E6F9

Result : 13A6DAD3119F29A8C4BF6D5BD11564E4E1A93F85B7F2AD9E8E97756688754DE32A23ADE41DFD9F76186D8EB25E66D0DCF458ECAA026F16463811C48FC814E50B10FF57FDFDB0C0761088D1AC4DDDAE749CC77FD402A2B8E005A43AEEC914E6F9



PHP代码:



    $inputText = "FF01083131323233333434FF020102FF030E3230313630313230313635353032FF040C313132323333343435353636FF05083131323233333434FF060F6D6173746572706173735F75736572FF070101FF080104800000000000000000000000";
    $inputKey  = "0F777D55FDB154E7D8754C3C0E660A65";
    $inputText = pack("H*", $inputText);
    $inputKey = pack("H*", $inputKey);
    $iv = "0000000000000000";
    $encryptedData = openssl_encrypt($inputText, "aes-128-cbc", $inputKey, OPENSSL_RAW_DATA, $iv);
    $encryptedData = implode("", unpack("H*", $encryptedData));
    print $encryptedData . PHP_EOL;



结果,
结果:
99d84f4a728affe97e05b5153cb5d4842d7396cc9b26d807afd08e0f1e904a4e9f43b7d2c35151c6e609230879d120ae180c18bb461b071e79afd98ffec09e29addf9cddeaafaabf6bdef174a7781b538dd7f67e577810c261f5e6e07cb1b5be2416b80d7a59fadbf66f960968614191


Result: 99d84f4a728affe97e05b5153cb5d4842d7396cc9b26d807afd08e0f1e904a4e9f43b7d2c35151c6e609230879d120ae180c18bb461b071e79afd98ffec09e29addf9cddeaafaabf6bdef174a7781b538dd7f67e577810c261f5e6e07cb1b5be2416b80d7a59fadbf66f960968614191

我无法理解这两个代码的区别。我认为它们必须具有相同的输出,但是没有。
输出。

I can not understand the difference of these two codes. I think they must have same output, but not. output.

推荐答案

您应该打包 iv

<?php
    $inputText = "FF01083131323233333434FF020102FF030E3230313630313230313635353032FF040C313132323333343435353636FF05083131323233333434FF060F6D6173746572706173735F75736572FF070101FF080104800000000000000000000000";
    $inputKey  = "0F777D55FDB154E7D8754C3C0E660A65";
    $inputText = pack("H*", $inputText);
    $inputKey = pack("H*", $inputKey);
    $iv = pack("H*", "00000000000000000000000000000000");
    $encryptedData = openssl_encrypt($inputText, "aes-128-cbc", $inputKey, OPENSSL_RAW_DATA, $iv);
    $encryptedData = substr(implode("", unpack("H*", $encryptedData)),0,192);
    print $encryptedData . PHP_EOL;

这篇关于C#和PHP具有不同的AES加密结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆