2012-04-25 65 views
0

如何创建一个密钥和IV,使加密字符串应该只包含数字和字符串characters.key和IV字符串应该包含32 characters.purpose是加密的字符串不应当包含任何特殊characters.block大小256. 现在我正在使用这样的密钥和iv。在使用这个加密之后,使用特殊字符获得加密的字符串。我们可以避免这种情况。Rijndael的256键

AES_KEY = PSVJQRk9QTEpNVU1DWUZCRVFGV1VVT0ZOV1RRU1NaWQ =

Aes_iv = YWlFLVEZZUFNaWlhPQ01ZT0lLWU5HTFJQVFNCRUJZVA =

+0

256位的块大小是相当不寻常的,因为它不是AES的一部分。 – CodesInChaos 2012-04-25 16:46:50

+0

我使用这篇文章。指定的代码://blog.djekldevelopments.co.uk/ P = 334 问题是解密是不是在PHP工作,如果输入contanins之类的特殊字符内“<” – user922834 2012-04-25 16:59:35

+1

那博客作者显然是?困惑。声称使用AES-256,但他使用Rijndael,块大小为256位。 – CodesInChaos 2012-04-25 17:02:55

回答

2

你需要Base64编码输出。这将确保它只是可打印的ASCII码,并且是存储/传输加密数据的标准。

你希望你的密钥和IV的是完全随机的。仅仅因为你的钥匙中没有特殊字符,并不意味着你的输出中不会有特殊字符。绝对没有关系。它看起来像你的钥匙和四是在那里base64编码。确保你使用的是原始密钥和IV。

这里是如何做到这一点在C#。假设你的AES输出是一个字节数组:

 string encoded = System.Convert.ToBase64String(aesOutput); 

如果它是一个字符串:

 byte[] encodedBytes = System.Text.Encoding.ASCII.GetBytes(aesOutput); 
     string base64encoded = System.Convert.ToBase64String(encodedBytes); 

您可以使用System.Convert.FromBase64String(encodedData)转换回它的原始输出。

+0

打败了我。 +1 – 2012-04-25 16:45:44

+0

我的疑问是,如果我们不使用特殊字符的关键和四,然后我们得到 – user922834 2012-04-25 17:10:11

+0

问题是解密不工作在PHP如果输入包含特殊字符像'<' – user922834 2012-04-25 17:15:07