繁体   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