【问题标题】:Trouble when generating a secretKey with Blowfish使用 Blowfish 生成密钥时出现问题
【发布时间】:2017-10-29 15:03:20
【问题描述】:

所以我正在尝试使用 bouncycastle 为 Blowfish 获取密钥:

SecretKeyFactory factory =SecretKeyFactory.getInstance("Blowfish", "BC");

但它会引发以下异常:

Exception in thread "main" java.security.NoSuchAlgorithmException: no such algorithm: Blowfish for provider BC
  at sun.security.jca.GetInstance.getService(GetInstance.java:87)
  at javax.crypto.JceSecurity.getInstance(JceSecurity.java:96)
  at javax.crypto.SecretKeyFactory.getInstance(SecretKeyFactory.java:204)
  at Main.main(Main.java:112)

我该如何解决这个问题? (当我使用“RC4”而不是“Blowfish”时也会发生这种情况,但它适用于“DES”和“AES”)

【问题讨论】:

    标签: java security cryptography bouncycastle blowfish


    【解决方案1】:

    与具有内部结构的非对称密钥不同,您实际上不需要工厂来存储“原始”秘密(对称)密钥,只需要那些使用派生算法(PBE*、PBKDF2 等)的工厂。 DES 和 DESEDE 的标准 (SunJCE) 工厂会检查/修复长度和奇偶校验 FWLIW,但 BC 工厂(加上从 1.56 开始的 AES)甚至不这样做。 RC4 和 Blowfish(以及其他)接受对位没有限制的可变长度密钥,因此即使提供了工厂 可以 做任何事情。

    只需将您的密钥材料放入 SecretKeySpec 并使用它。 与其他 *KeySpec 类型不同,SecretKeySpec 'is-a' SecretKey(确切地说是 implements该接口)并且可以在需要SecretKey 或适当的Key 的地方使用,特别是在Cipher.init(mode, key ...)


    如果您真的想生成一个密钥,而不是使用/转换现有密钥,那么无论如何您都不需要工厂。尽管有这个名字,工厂只是转换,他们不创造。要生成密钥,您需要KeyGenerator(或非对称KeyPairGenerator),并且这些密钥确实存在于BC 中的RC4(又名ARC4)和BLOWFISH,以及标准SunJCE 中,但使用名称ARCFOUR 和BLOWFISH;或者(对于原始对称)只需使用 SecureRandom 生成正确的字节数,然后使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-16
      • 1970-01-01
      • 2022-08-16
      • 2016-10-06
      • 2014-07-20
      相关资源
      最近更新 更多