【问题标题】:What cipher mode/padding defaults or common uses of AES encryption would be used with .NET?.NET 将使用哪些密码模式/填充默认值或 AES 加密的常见用途?
【发布时间】:2011-03-22 21:35:35
【问题描述】:

我正在帮助需要使用 AES 向客户发送加密值的人。客户未指定分组密码模式、填充或如何生成密钥。他们只是这样说:

然后,使用 AES 加密此字符串 密钥大小为 256 的加密,a 长度为零的向量(或长度为 16 字节数组(如果在 dotnet 中)和密钥 “XXX”。

其中XXX键为19个字符。我假设他们正在使用.NET,因为它被提到了。熟悉 .NET 的人是否知道他们可能建议仅使用 19 个字符的字符串作为密钥?我们熟悉加密并将在我们这边使用 Java。但是,如果没有办法知道如何构造 AES 密钥以及要使用什么密码模式和填充,我们就无法再进一步了。客户没有很快回答我们的问题,所以我想我会尝试在这里提问。谢谢!

【问题讨论】:

    标签: .net


    【解决方案1】:

    .net 中的任何 Aes 类中都没有将字符串作为键的构造函数或方法。键被指定为字节数组,使得数组的长度等于键大小/8。

    人们希望他们会使用一种通用的散列算法从 19 个字符的字符串中生成密钥。最好的选择可能是字符串的 Sha256 哈希。

    只是为了让您了解 .net 中的样子......

    public void InitializeCrypto()
          {
               var utf8 = new UTF8Encoding();
               var hash = new SHA256CryptoServiceProvider();
               var aes = new AesCryptoServiceProvider();
               var iv = new byte[16];
    
               Array.Clear(iv, 0, iv.Length);
               string key = "Some19CharacterString";
               var utf8Bytes = utf8.GetBytes(key);
               aes.IV = iv;
               aes.KeySize = 256;
               aes.Key = hash.ComputeHash(utf8Bytes);
               //Do crypto work
    
          }
    

    【讨论】:

    • 感谢 .NET 端的代码示例。我认为没有任何东西可以直接将字符串作为键。我同意 SHA-256 最适合散列字符串键。不幸的是,他们似乎甚至都不愿意这样做。通过对他们提供的示例进行一些猜测(我当然不能包括在内),我设法使这项工作正常进行。我使用 PKCS #7 填充和字符串的原始字节后跟零的键将它们的输出与 CBC 模式匹配。对他们来说不是一个好主意,但我们无法控制。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 2013-09-25
    • 1970-01-01
    • 2018-02-15
    • 2010-12-31
    • 2017-08-29
    • 2018-03-09
    相关资源
    最近更新 更多