2011-03-22 43 views
0

我正在帮助需要将AES加密值发送给客户的人。客户没有指定分组密码模式,填充或如何生成密钥。他们已经只有​​这样说:什么密码模式/填充默认值或AES加密的常见用途将用于.NET?

然后,使用AES加密 加密该字符串256的关键尺寸,长度为零(或长度16 字节数组如果在DOTNET)和键 的 矢量“XXX”。

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

回答

2

在.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 

     } 
+0

感谢从.NET端的代码示例。我认为没有任何东西直接为密钥输入字符串。我同意SHA-256对散列字符串键是最好的。不幸的是,似乎他们甚至不打算这么做。我设法通过他们提供的例子进行了一些猜测(当然我不能包括这个)。我将它们的输出与CBC模式匹配,使用PKCS#7填充和字符串的原始字节后跟零的键。对他们来说这不是一个好主意,但不在我们的控制之下。 – WhiteFang34 2011-03-23 00:45:04