使用Blowfish生成secretKey时遇到麻烦

时间:2017-10-29 15:03:20

标签: java security cryptography bouncycastle blowfish

所以我试图使用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"和#34; AES")

1 个答案:

答案 0 :(得分:0)

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

只需将您的密钥材料放在SecretKeySpec中即可使用。与其他*KeySpec类型不同,SecretKeySpec'是一个'{{1} (确切地说是SecretKey那个接口)并且可以在需要implements或适当SecretKey的地方使用,特别是Key

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