【问题标题】:What level of encryption is this in Bouncy Castle在 Bouncy Castle 中这是什么级别的加密
【发布时间】:2013-01-20 05:58:04
【问题描述】:

我遇到了一些使用 Bouncy Castle 加密数据的代码,但我找不到任何文档来说明正在使用哪种算法来加密数据或密钥使用了多少位。我也找不到 Bouncy Castle 的讨论论坛。有谁知道这是使用什么算法以及密钥有多少位?

BlowfishEngine blowfishEngine = new BlowfishEngine();
CBCBlockCipher cbcBlockCipher = new CBCBlockCipher(blowfishEngine); 

KeyParameter key = new KeyParameter(key);

BufferedBlockCipher cipher = new PaddedBlockCipher(cbcBlockCipher);

cipher.init(true, key);

int size = cipher.getOutputSize(data.length);
byte[] result = new byte[size];
int olen = cipher.processBytes(data, 0, data.length, result, 0);
olen += cipher.doFinal(result, olen);

if (olen < size)
{
  byte[] tmp = new byte[olen];
  System.arraycopy(result, 0, tmp, 0, olen);
  result = tmp;
}

【问题讨论】:

  • 好吧,算法本身 - 显然 - Blowfish。并且密钥的大小取决于给KeyParameter 构造函数的密钥的大小。可以在此处找到包的文档:bouncycastle.org/docs/docs1.5on/index.html(尽管您的 java 代码无法正常工作,因为您引入了名为 key 的第二个变量)。
  • 谢谢。我在这里减少了代码的大小,并移动了一些东西来压缩这里。它确实适用于我的原始源文件。我没有加密经验,所以我不知道 Blowfish 是一种算法,即使我阅读了 Bouncy Castle 网站上的课程描述。那么如果这个人输入一个 8 个字符的密钥,这意味着数据是用 64 位加密的(每个字符 1 个字节)?所以如果他们想要 256 位,他们必须输入 32 个字符?
  • 嗯,我想是的,但应该都可以从我链接的 API 文档中获得。

标签: encryption bouncycastle


【解决方案1】:

算法为Blowfish,运行于Cipher Block Chaining操作模式。 Blowfish 允许从 32 位到 448 位的各种密钥大小。也就是说,它使用 64 位块大小(它可以在一个段中加密的数据量),它不如 AES 等密码中的 128 位块大小安全。否则,Blowfish 是一种非常安全的密码,只要您使用 128 位或更大的密钥大小。

也就是说,它在重新加密操作时性能不是很好(重新加密需要很长时间,这就是为什么它的密钥调度是 bcrypt 的基础)。最好的选择是使用 AES-256(将 BlowfishEngine 替换为 AESEngine)。

就密钥大小而言,根据您的 cmets,您似乎正在尝试直接使用密码作为加密密钥。这是一个非常糟糕的做法,并且很容易暴力破解你的加密。您应该改为使用密码来驱动像 PBKDF2 这样的密钥派生函数,这将为您提供更安全、更长的密钥。查看this answer 以了解使用 Java 中的 BouncyCastle 执行此操作的好方法。

【讨论】:

    猜你喜欢
    • 2011-08-20
    • 2021-11-04
    • 2018-10-06
    • 2013-09-25
    • 2021-08-03
    • 1970-01-01
    • 2011-01-26
    • 2015-06-13
    • 2011-02-11
    相关资源
    最近更新 更多