当前位置: 首页 > 知识库问答 >
问题:

C#和PHP具有不同的AES加密结果

钮鸿煊
2023-03-14

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


        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();

结果:13A6DAD3119F29A8C4BF6D5BD11564E4E1A93F85B7F2AD9E8E97756688754DE32A23ADE41DFD9F76186D8E25E66D0DCF458ECAA026F16463811C48FC814E50B10FF57FDDB0C0761088D1AC4DDDAE749CC77FD402A2B8E005A43AEEC914E6F9


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;


结果:99D84F4A728Affe97E05B5153CB5D4842D7396CC9B26D807AFD08E0F1E904A4E9F43B7D2C35151C6E609230879D120AE180C18BB461B071E79AFD98FFEC09E29ADDF9CDDEAAABF6BDEF174A7781B538DD7F67E577810C261F5E6E07CB1B5B2416B80D7A59FADBF66F960968614191

我不能理解这两个代码的区别。我想他们必须有相同的输出,但不是。输出。

共有1个答案

骆英纵
2023-03-14

您应该打包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;
 类似资料:
  • 问题内容: PHP功能: Java函数 } 返回null。 请注意,我们不允许更改PHP代码。有人可以帮助我们在Java中获得相同的结果吗?非常感谢。 问题答案: 如果您不只是简单地将例程中的可能内容吞噬掉,那么您将对发生的事情有了更好的了解。如果函数正在返回,那么显然发生了异常,您需要知道它是什么。 实际上,例外是: 可以肯定的是,您的纯文本长度只有11个Java字符,按照您的默认编码,它将为1

  • 我目前正在将我的C#AES-GCM密码代码转换为PHP。然而,经过一些研究,我的PHP系统加密的文本不能被C#one解密。我想知道这两种代码是否有区别: C#带弹跳壳: 下面是PHP系统: 有没有人能告诉我,PHP代码中是否有遗漏或不同之处,导致它们的工作方式有所不同?或者PHP函数和BouncyCastle函数之间是否存在某种内部差异,从而使它们有所不同?

  • 我正在加密字符串“AAAAAAAAAAAAAAAAAAAAAAAA”(一个16字节的UTF8字符串)使用AES 128 CBC与空白iv和密钥(16 0),并得到不同的结果 在PHP中: 第一位(粗体)与PHP相同,但PHP值有一个额外的“a=”,然后节点值有一个额外的“heuidae8z4dk0hu7p2z+1c” 我承认我对这里发生的事情很不确定--我错过了什么? 编辑...但不是那么不稳定,

  • 我试图在Android和PHP端使用AES加密/解密数据,并累犯空答案。 首先,我在Android中生成了对称密钥: 在服务器端,我试图解密数据。我可以解密(从RSA)秘密的AES密钥,并得到它的字符串表示。在客户端(Android)和服务器端(PHP)上是一样的。但是如何使用这个字符串AES密钥来解密数据呢?我尝试了这个(PHP): PHP中的结果: 怎么啦?

  • 我有一个 API,要求我对通过 AES 密码发送给它的数据进行编码。 但是,我得到的唯一示例代码是 Node.js 代码。 我想,用PHP重新实现它有多难? 显然很难。 下面您可以看到这两种方法,但您也可以看到不同的结果。 有人知道哪里出了问题吗? 结果:3522ca23 结果:8faa39d2

  • 我工作在AES256能够加密/解密之间的iOS和PHP使用不安全的渠道。 我见过许多类似的问题,围绕着密钥大小、模式(CBC或ECB)、随机iv的使用等。但是在这种情况下,我发现了以下奇怪的行为。 两种环境中的配置:-键:32字节(256位)-块大小:128位(标准)-iv:16字节(用于测试的静态)-模式:CBC 如果我加密一个16或32字节的文本(以匹配AES块大小),Swift和PHP中的结