2009-10-19 111 views

回答

1

對稱塊密碼產生與輸入相同的長度,以塊大小的倍數(對於AES通常爲8字節或16字節)。由於輸出始終是塊大小的倍數(實際上輸出始終與輸入大小相同,並且輸入必須是塊大小的倍數),因此您無法知道純文本的原始大小。通用加密方案通過添加填充方案(如PKCS,ISO 10126或ANSI X923)來解決此問題。這些方案將有關原始明文長度的信息放在最後一個塊中。

如果明文大小是8的倍數(16位表示AES),則會在加密的文本中再添加一個塊。如果原始大小不是塊大小的倍數,則加密後的大小將四捨五入到下一個多塊大小。

爲此,您應該爲每條記錄添加一個鹽值。鹽(或初始化向量,是正確的)具有與塊相同的大小。通常存儲在加密塊的前面。

最後,您應該簽名驗證的加密值,所以您應該添加一個SHA摘要,另外20個字節,否則無法確定解密值是否正確。所以總體大小(考慮AES):16字節(鹽)+(明文大小+ 20(散列))+(16-(明文大小+ 20)%16)。

因此,對於[email protected](長度22),加密大小將爲16 + 22 + 20 +(16-10)= 64。要解密您將前16個字節作爲鹽,解密remaininginf 48,輸出長度爲42,您將SHA 42-20 = 22個字節進行解密,並將解密文本與解密文本的最後20個字節進行比較以進行驗證。

我知道的可能比你討價還價多,但是這個計劃中的每一步都有一個理由。

+0

順便說一下,你會發現很多關於在數據庫中存儲鹽的危險的文字,甚至維基百科上的條目延續了這種誤解(談話頁面對主要文章聲明有幾處反駁)。如果你仔細閱讀那些關於存儲*鹽漬哈希*,而不是*加密*文本的文本。清除加密文本的鹽文本是可以的,並用於許多加密方案。 – 2009-10-19 21:25:56

+0

即使您對散列進行了加密,使用未加密的散列函數來保護消息的完整性也是不安全的。更好的是使用MAC。另外,在加密後應用MAC比在加密之前應用它更容易出錯。 – abc 2009-10-20 10:51:51

+0

@ abc:是的,你是對的。一個HMAC比一個普通的散列更好,它使用從原始密鑰和IV使用的祕密。會導致相同的大小。 – 2009-10-20 15:10:03

1

我會建議看着PGP

0

ROT13或替換密碼可能工作(密鑰可以更改或交換)。保持原始文本長度的加密不是那麼好。

鮑比

2

根據Little known features: Symmetric encryption with PGP/GPG

兩個PGP的一個鮮爲人知的功能,並 GPG的是,他們還可以做對稱加密 。只需密碼 需要 - 沒有公鑰或私鑰是 涉及。這是一個快速和骯髒的方式 獲得強大的加密,即使是一個 新手可以使用。

要加密對稱加密 一個文件,語法是:

pgp --symmetric filename 

gpg --symmetric filename 

結果是與 相同的名稱與原始和「.pgp」 或「.gpg」追加的二進制文件。

如果加密的文件必須粘貼 到電子郵件 (而不是作爲附件添加)的身體, 你要使用輸出的純ASCII 形式:

pgp --symmetric --armor filename 

gpg --symmetric --armor filename 

結果是結束在「.ASC」 使用 通常‘-d’開關進行

解密的純文本文件:

pgp -d filename 

gpg -d filename 

但我不確定這是你要找的。也許你可以澄清你的問題。

1

將密碼結果與純文本相比並不是一個好主意,具有不同長度是加密的一部分。

今天我會建議你的最安全的加密算法之一:AES

但忘了具有相當規模!

2

如果您確實希望將密文的長度與電子郵件地址相比較,則可以使用mode like CFB or OFB中的分組密碼,該密碼允許一次加密一個字節。

但是,我不推薦它,因爲這會給攻擊者一些關於消息的信息(消息多長時間?)。使用類似3DES或AES的算法,在CBC模式下使用PKCS#5填充的16字節塊,most email addresses will be encrypted in two blocks.

2

我看到明文/密文的長度存在一些混淆。實際上,如果使用對稱加密算法,這些長度非常相似。

考慮分組密碼(例如AES)。它將128位塊加密成128位塊。因此,如果您的明文正好是128位(或其倍數),則在任何操作模式下的AES將產生具有相同長度的密文。如果您的明文長度不是128位的倍數,那麼它將被填充到完整塊,並且密文將稍微更長(最多127位)。你仍然可以通過使用一些技巧,如ciphertext stealing來避免這種情況。

如果使用流密碼,加密過程只是將明文的位(或字節)與密鑰流的位(或字節)異或,然後密文的長度根據定義等於長度的明文。

要直接回答您的問題,如果您不需要任何特定格式的加密電子郵件,只需使用AES即可。 如果您希望加密的電子郵件也採用電子郵件的格式,您可能需要檢查Format-Preserving Encryption的工作原理。

@Bobby:ROT13不是加密算法。