我使用它进行加密:http://msdn.microsoft.com/en-us/library/system.security.cryptography.rijndaelmanaged.aspx
有没有办法可以预测加密文本的样子?我正在将加密的输出转换为文本,因此我可以将其存储在数据库中。
我只想确保数据库列的大小足够大。
我将文本输入限制为20个字符。
答案 0 :(得分:10)
您使用的是SQL Server 2005还是以上版本?如果是这样,您可以使用VARCHAR(MAX)
或NVARCHAR(MAX)
作为列类型。
如果你想要更准确一点......
RijndaelManaged
的最大块大小为256位(32字节)。
你的最大输入大小是20个字符,所以即使我们假设每个字符有4个字节的最坏情况,那也只能达到80个字节,然后将最多填充到96个字节。加密过程。
如果在加密输出上使用Base64编码,将从96个加密字节创建128个字符。如果您使用十六进制编码,那么将从96个加密字节创建192个字符(如果您在十六进制字符串前面添加“0x”,则可能会添加几个额外字符)。在任何一种情况下,200字符的列宽应该给你足够的余量。
(注意:这些只是我头脑中的计算。我还没有证实它们实际上是正确的!)
答案 1 :(得分:3)
对于没有在线找到信息的未知加密算法,我会写一个小测试程序,加密一组最大长度的随机字符串,在输出中找到最长的长度,然后乘以一个基于的安全系数输入长度变化的可能性有多大,测试程序的结果有多精确。
一般来说,你可能会在1.5倍 - 2倍的输入长度范围内。
答案 2 :(得分:2)
对于此特定算法,密文的长度为
((length+16)/16)*16
这是为了满足块大小和填充要求。
我建议您在密文中添加一个随机IV,这样就需要另外16个字节。
但是,如果要将此作为char放在数据库中,则必须对其进行编码。这将进一步增加它。
对于base64,将其乘以4/3。对于十六进制,加倍。
答案 3 :(得分:0)
加密永远不会增加超出所需最小填充的数据大小。
如果它''扩展'数据,它可能不是一个非常好的加密算法。