c# - AES 管理的加密值总是以 ==?

标签 c# encryption-symmetric

我已经用网上的几种方法编写了一个加密例程。我目前正在测试加密并注意到每个加密值都以 '==' 结尾?

有谁知道为什么会这样?

这是我正在使用的代码。键是一个 32 个字符的值,IV 是一个 16 个字符的值。

private static readonly byte[] key = Encoding.Default.GetBytes(getKey());
    private static readonly byte[] iv = Encoding.Default.GetBytes("$ruVe4E!eM#kupuc");

    /// <summary>
    /// 
    /// </summary>
    /// <param name="val"></param>
    /// <returns></returns>
    public static string Encrypt(string val)
    {
        string result = string.Empty;

        var aes = getEncryptionType();

        using (MemoryStream msEncrypt = new MemoryStream())
        {
            using (ICryptoTransform encryptor = aes.CreateEncryptor(key, iv))
            {
                using(CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                {
                    using(StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                    {
                        swEncrypt.Write(val);
                    }
                }
            }
            result = Convert.ToBase64String(msEncrypt.ToArray());
        }
        aes.Clear();
        return result;
    }

getEncryptionType 返回一个 AESManaged 类,如下所示:

private static AesManaged getEncryptionType()
    {
        AesManaged aes = new AesManaged();
        aes.Mode = CipherMode.CBC;
        aes.Padding = PaddingMode.PKCS7;
        return aes;
    }

目前测试方法是这样的:

Random rnd = new Random();

                for (int i = 0; i < 50000; i++)
                {
                    int random = rnd.Next(1147483647, int.MaxValue);
                    Guid guid = dal.getToken(CryptoService.Encrypt(random.ToString()));

                    if (i % 100 == 0)
                        addLog(string.Format("{0} new values added", i.ToString()), LogType.Dialog);
                }

最佳答案

这是 base 64 编码的标准。有关详细信息,请阅读维基百科文章的“填充”部分。

http://en.wikipedia.org/wiki/Base64

关于c# - AES 管理的加密值总是以 ==?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17195513/

相关文章:

c# - 为什么我的 WPF 应用程序在显示 WinForms 对话框后不能正常关闭?

c# - 如何更改表单在呈现 View 时的操作? (又名通过 ViewBag 或 ViewData)

javascript - 在此沙盒演示中使用 Libsodium.js 进行简单的 Javascript 加密

c# - Rijndael 填充或长度无效

amazon-web-services - 哪种方法适合加密大小大于 4KB 的消息?

c# - Gridview 的 Jquery 和更新面板不起作用

c# - C# 中的 Private 'set' - 无法理解它

c# - 地铁应用程序中的 ComboBox 如何获取所选文本及其相关 ID

javascript - 使用另一个字符串键 "encrypt"字符串的最简单方法?