哪種對稱的加密算法用於加密電子郵件地址(短消息)?我希望密文長度與paintext相當。用哪種對稱加密算法來加密電子郵件地址(短消息)?
回答
對稱塊密碼產生與輸入相同的長度,以塊大小的倍數(對於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個字節進行比較以進行驗證。
我知道的可能比你討價還價多,但是這個計劃中的每一步都有一個理由。
順便說一下,你會發現很多關於在數據庫中存儲鹽的危險的文字,甚至維基百科上的條目延續了這種誤解(談話頁面對主要文章聲明有幾處反駁)。如果你仔細閱讀那些關於存儲*鹽漬哈希*,而不是*加密*文本的文本。清除加密文本的鹽文本是可以的,並用於許多加密方案。 – 2009-10-19 21:25:56
即使您對散列進行了加密,使用未加密的散列函數來保護消息的完整性也是不安全的。更好的是使用MAC。另外,在加密後應用MAC比在加密之前應用它更容易出錯。 – abc 2009-10-20 10:51:51
@ abc:是的,你是對的。一個HMAC比一個普通的散列更好,它使用從原始密鑰和IV使用的祕密。會導致相同的大小。 – 2009-10-20 15:10:03
我會建議看着PGP。
ROT13或替換密碼可能工作(密鑰可以更改或交換)。保持原始文本長度的加密不是那麼好。
鮑比
根據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
但我不確定這是你要找的。也許你可以澄清你的問題。
如果您確實希望將密文的長度與電子郵件地址相比較,則可以使用mode like CFB or OFB中的分組密碼,該密碼允許一次加密一個字節。
但是,我不推薦它,因爲這會給攻擊者一些關於消息的信息(消息多長時間?)。使用類似3DES或AES的算法,在CBC模式下使用PKCS#5填充的16字節塊,most email addresses will be encrypted in two blocks.
我看到明文/密文的長度存在一些混淆。實際上,如果使用對稱加密算法,這些長度非常相似。
考慮分組密碼(例如AES)。它將128位塊加密成128位塊。因此,如果您的明文正好是128位(或其倍數),則在任何操作模式下的AES將產生具有相同長度的密文。如果您的明文長度不是128位的倍數,那麼它將被填充到完整塊,並且密文將稍微更長(最多127位)。你仍然可以通過使用一些技巧,如ciphertext stealing來避免這種情況。
如果使用流密碼,加密過程只是將明文的位(或字節)與密鑰流的位(或字節)異或,然後密文的長度根據定義等於長度的明文。
要直接回答您的問題,如果您不需要任何特定格式的加密電子郵件,只需使用AES即可。 如果您希望加密的電子郵件也採用電子郵件的格式,您可能需要檢查Format-Preserving Encryption的工作原理。
@Bobby:ROT13不是加密算法。
- 1. SuiteCRM電子郵件加密
- 2. 如何使用JQuery加密電子郵件地址
- 3. 使用java加密電子郵件地址
- 4. ProtectedData使用哪種加密算法?
- 5. 對稱密鑰加密算法
- 6. 你推薦哪種C加密框架用於對稱和非對稱加密?
- 7. php - 我應該加密電子郵件地址嗎?
- 8. 值得加密數據庫中的電子郵件地址嗎?
- 9. Java加密:哪種方法可以讓我獲得更短的消息?
- 10. 使用Java中的對稱密鑰byte []加密消息
- 11. 散列/電子郵件加密
- 12. 加密Microsoft.Exchange.WebServices.Data中的電子郵件
- 13. 自定義非對稱加密算法
- 14. 使用電子郵件地址更改散列(加密密碼)的更好方法
- 15. 使用rot13和tr命令獲得加密的電子郵件地址
- 16. 打開電子郵件彈出輸入密鑰命中電子郵件地址
- 17. SSL使用哪種對稱密鑰算法?
- 18. 要使用哪種加密算法以及在哪裏存儲密鑰?
- 19. WCF消息加密
- 20. RabbitMQ消息加密
- 21. 解密加密郵件(我加密)
- 22. 加密IP地址
- 23. 使用哪種加密方法?
- 24. 單個用戶的多個電子郵件地址和密碼
- 25. 該電子郵件發送給哪個電子郵件地址?
- 26. 使用gpg加密方法發送和接收電子郵件
- 27. 使用密碼加密消息java
- 28. 使用密鑰加密消息
- 29. 非對稱加密密鑰
- 30. 關於加密密碼和電子郵件檢索的建議
請詳細解釋一下這個問題:我想將密文長度與paintext相比較。 – backslash17 2009-10-19 13:39:16
按可比較的長度,我不是說它的長度應該是相同的,但它不應該長10倍。 – maciejka 2009-10-19 18:13:57