gpt4 book ai didi

java - 在 Java 中实现加密,同时保持位串长度

转载 作者:行者123 更新时间:2023-12-02 12:43:44 25 4
gpt4 key购买 nike

我正在尝试找出一种在我用 Java 为 Android 编写的程序中实现 Blowfish(或任何可行的加密方案)的方法。

我有一个句子,比如“我是一只狗”,我想加密它。

但是,在加密之前,我使用自己的 5 位字符表示形式对句子进行编码。

这是我自己制作的,就像 a = "00110"和 'the' = "11001"

现在我有一个可以被 5 整除的编码,看起来像

“00011101001101011010”

有没有办法实现 Blowfish 来加密这个二进制字符串,同时保持位字符串的长度。

即上面的位串有 20 位长。我希望加密的位串也有 20 位长。

Blowfish 可以做到这一点吗?这可能吗?

感谢您的帮助!

最佳答案

对于任何分组密码,密文必须至少与分组大小一样大。对于 Blowfish 来说这是 64 位,这意味着至少有 64 位输出。

如果你的明文比你的 block 大小长,那么你可以使用密文窃取获得相同的密文大小:https://en.m.wikipedia.org/wiki/Ciphertext_stealing

不知道为什么要这样做编码,它肯定不会增加安全性。此外,Blowfish 是一种过时的算法:AES 是更好的选择,但其 block 大小为 128。

流密码将允许您获得与明文大小完全相同的密文大小,但我不知道在 Java 中实现了什么好的方法。无论你做什么,请远离 rc4:它存在真正的安全问题。请参阅eSTREAM可能具有足够安全性的流密码的页面。另外,您必须never re-use a key对于流密码。

编辑:@CommonsWare 指出了 clever solution来自马丁·博德维斯。对我来说它看起来是正确的,但我认为您不会找到一个开箱即用的实现。还要记住,每个密文都必须与 IV 配对,IV 的长度与 block 大小相同(河豚为 64 位)。您绝对不应该重复静脉注入(inject)。我的总体感觉是,虽然这是一个聪明的解决方案,但如果您不必自己实现类似的东西,您可能会过得更好(实现加密是危险的:犯最小的错误很容易失去安全属性)。

关于java - 在 Java 中实现加密,同时保持位串长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44854925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com