簡體   English   中英

用Java實現加密,同時保持位串長度

[英]Implementing encryption in Java whilst maintaining bitstring length

我試圖找出一種方法,可以在用Java for Android編寫的程序中實現Blowfish(或任何可行的加密方案)。

我有一個要加密的句子,例如“我是狗”。

但是,在加密之前,我使用自己的5位字符表示形式對句子進行編碼。

這是我自己制作的,就像一個=“ 00110”和'the'=“ 11001”

所以現在我有一個可以被5整除的編碼,看起來像

“ 0001110100110101011010”

有沒有一種方法可以實現Blowfish來加密此二進制字符串,同時又保持位字符串的長度。

也就是說,上面的位串是20位長。 我希望加密的位字符串也為20位長。

河豚魚有可能嗎? 有可能嗎?

謝謝你的幫助!

對於任何分組密碼,密文必須至少與分組大小一樣大。 對於河豚來說,這是64位,這意味着至少有64位輸出。

如果您的純文本長於塊大小,則可以使用竊取密文來獲得相同的密文大小: https : //en.m.wikipedia.org/wiki/Ciphertext_stealing

不知道為什么要這樣編碼,它肯定不會增加安全性。 另外,Blowfish是一種過時的算法:AES是更好的選擇,但塊大小為128。

流密碼將允許您獲得與純文本大小完全相同的密碼文本大小,但是我不知道用Java實現的任何好的密碼文本大小。 無論您做什么,都請遠離rc4:它確實存在安全問題。 有關應具有足夠安全性的可能流密碼,請參閱eSTREAM頁面。 同樣,您絕不能為流密碼重復使用密鑰

編輯 :@CommonsWare指出了來自Maarten Bodewes的聰明解決方案 在我看來,這是正確的,但我認為您不會找到一個開箱即用的實現。 還請記住,每個密文都必須與IV配對,IV的長度與塊大小相同(河豚為64位)。 您永遠不應重復靜脈輸液。 我的總體感覺是,盡管這是一個聰明的解決方案,但是如果您不必自己實現類似的東西,您可能會變得更好(實現加密是危險的:通過犯最小的錯誤很容易失去安全性)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM