2011-02-10 67 views
2

我需要加密文本(16個字符),最好使用AES,並且我需要限制結果加密文本的長度(14或16個字符)。加密只能是字符和數字(不是'=','?',...)是否有可能?使用AES限制加密結果

我需要從密文(加密)中找回原始文本。

有沒有辦法使用RijndaelManaged(System.Security.Cryptography )來做到這一點?

+0

當你說「加密必須只是字符和數字」,你的意思是原始文本或結果? – 2011-02-10 20:09:49

+0

@ jon-skeet結果。如果有必要,我不需要使用RijndaelManaged,我可以使用別的東西,但我寧願使用AES。 – Evandro 2011-02-10 20:41:38

回答

4

密碼文本需要至少與純文本一樣長(在熵的意義上)。你不能無損地壓縮任意文本。因此,如果將輸出限制爲log2(10 + 2 * 26)* 16 = 95位,則輸入的熵不會超過該值。這與AES無關,這是一個適用於所有無損編碼的數學限制。

什麼是角色? A byte a char或unicode-codepoint?

AES還有一個額外的問題,即它是塊密碼,最小輸出大小等於塊大小,128位。由於輸出是隨機的,因此加密後不能壓縮。這已經超出了你的限制。大多數加密模式都會添加一些額外的填充。

有將任意長度輸入映射到常量輸出的功能。它們被稱爲散列函數。但是,遵循pidgeon-hole-principle原則,它們將多個輸入映射到輸出。所以你無法取回所有可能輸入的輸入。