2009-01-19 74 views
14

我需要創建一個數據庫列,它將存儲使用三重DES加密的字符串。我如何確定加密字符串列的長度?加密字符串的長度

(答案比三重DES其它算法也歡迎。)

回答

21

塊密碼諸如DES,3DES和AES只能在字節塊進行操作。DES和3DES上的上的16個字節的塊的8個字節和AES塊進行操作。

爲了解決這個問題,你通常在加密之前對你的明文應用一個可逆的填充,它通常是「PKCS」-padding(也叫PKCS5-或PKCS7-padding)。

PKCS填充至少添加一個字節,以使填充文本的長度可以被塊長度(3DES的8個字節)整除。填充字節的值是添加的字節數。 FX。 ABCDEF填充到ABCDEF0505050505,0011223344556677填充爲0011223344566770808080808080808.請注意,這很容易刪除:您只需查看填充字節的最後一個字節,驗證它是否在1和塊長度之間,並刪除該字節數從最後(驗證每個被刪除的字節具有正確的值)。

最後,要回答你的問題:假設你使用的是帶有CBC加密和PKCS-填充3DES - 你大概是 - 長度爲n的字符串加密的長度是:

n + 8 - (n % 8) 
1

Triple DES使用三個56位DES密鑰,給168個密鑰。它的塊大小是64位

+0

請詳細說明。例如,如果我有一個長度爲100個字符的字符串,我將如何計算加密字符串的長度? – 2009-01-19 10:46:54

+0

(string.length/8)+ 1,假設爲8位字符 – Keltia 2009-01-19 10:58:14

+0

長度以字符爲單位(如果您願意,也可以是字節),因此length/8使用64位塊。 – Keltia 2009-01-19 11:01:05

4

使用Triple DES不會更改字符串的長度,但會將其舍入到下一個64位邊界。如果你打算「顯示」它,你將不得不編碼它(如Base64雖然

至於其他算法,很難回答,因爲有很多塊密碼將總是填補輸入以匹配他們塊大小而許多流密碼也不會。