为什么我的基本 AES256 C# 加密与在线加密器不匹配?

问题描述 投票:0回答:1

我正在编写一个简单的 AES 实现,并希望使用在线 AES 加密器进行验证。 但是,当输入相同的配置(相同的密钥、ECB 模式、256 密钥大小)时,我总是得到不同的字符串输出(对于 Base64 和十六进制)。然而,所有在线加密器都输出相同的加密字符串,因此它们是对齐的。我错过了什么?

参考在线工具:https://devglan.com/online-tools/aes-encryption-decryptionhttps://anycript.com/crypto

我的代码

using System;
using System.IO;
using System.Security.Cryptography;

namespace AesApp
{
    internal class Program
    {
        static void Main(string[] args)
        {
            using (Aes myAes = Aes.Create())
            {
                myAes.Mode = CipherMode.ECB;
                myAes.Key = Convert.FromBase64String("gHyP6i8mXqmdFK4rKsKP7EqvzfxwbtyE");

                string plaintext = "test";
                Console.WriteLine($"Plaintext : {plaintext}");

                ICryptoTransform encryptor = myAes.CreateEncryptor();

                using (MemoryStream msEncrypt = new MemoryStream())
                {
                    using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                    {
                        using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                        {
                            swEncrypt.Write(plaintext);
                        }

                        byte[] encrypted = msEncrypt.ToArray();
                        string encryptedString = Convert.ToBase64String(encrypted);
                        Console.WriteLine($"Encrypted : {encryptedString}");
                    }
                }
            }
        }
    }
}

配置:

ECB mode, 
256 key size, 
sample key string = "gHyP6i8mXqmdFK4rKsKP7EqvzfxwbtyE", 
sample plaintext to encrypt = "test",

My output =     "/Ylo00TXuzmuBNYPZy5YOA=="
Online output = "yyO1N4G9uxXJlQ8FLU3KfQ=="
c# .net encryption aes
1个回答
0
投票

256 密钥大小表示密钥长度为 256 位(32 字节)。由于示例密钥字符串的长度已经是 32 字节,因此使用 Base64 进行解码将导致密钥大小变为 192 位(24 字节)长。因此,您应该使用

Encoding.UTF8.GetBytes
等方法将键字符串转换为字节数组,而不是使用
FromBase64String

© www.soinside.com 2019 - 2024. All rights reserved.