2009-09-29 21 views

回答

10

您使用SQL Server 2005或以上版本嗎?如果是這樣,您可以使用VARCHAR(MAX)NVARCHAR(MAX)作爲列類型。

如果要更精確地有點...

RijndaelManaged的最大塊大小爲256個比特(32個字節)。

您的最大輸入大小爲20個字符,所以即使我們假設最壞的情況下每個字符4個字節,也只會達到80個字節,然後填充到最多96個字節加密過程。

如果在加密輸出上使用Base64編碼,將從96個加密字節中創建128個字符。如果使用十六進制編碼,則會從96個加密字節中創建192個字符(如果您將十六進制字符串作爲前綴加「0x」),可能會再加上一些額外字符。無論哪種情況,200個字符的列寬都會給你足夠的空間。

(注:這些只是現成的,頂級我的頭計算我還沒有證實,他們實際上是正確的!)

3

對於沒有信息的未知加密算法要在網上找到,我會寫一個小測試程序,對隨機的最大長度字符串進行加密,找出輸出中最長的長度,然後乘以基於輸入長度有多大變化的安全係數,以及測試程序的結果有多準確。

確實,一般來說,你可能會在1.5x - 2x輸入長度範圍內。

0

加密永遠不會增加超出最小填充要求的數據大小。

如果它'擴大'數據,它可能不是一個非常好的加密算法。

2

對於這個特定的算法,密文的長度將是,

((length+16)/16)*16 

這是爲了滿足塊大小和填充的要求。

我建議你也給密文添加一個隨機IV,這樣就需要另外16個字節。

但是,如果你想把它作爲數據庫中的字符,你必須對它進行編碼。這會增加更多。

對於base64,乘以4/3。對於十六進制,加倍。

+1

鑑於填充是16(字節,位,千兆); p – leppie