我正在尝试加密数据并使用 256 位 Blowfish 将它们发送到服务器,但我不知道 key 大小的正确提供者是什么。我尝试更改 CFB32 和 CFB8,但不起作用 我尝试使用 8 16 和 32 进行 iv,但不起作用。我尝试过 OAEPWithSHA-256AndMGF1Padding 也不起作用。 当我使用blowfish/ECB/PKCS1Padding时,它给我消息找不到任何提供者支持blowfish/ECB/PKCS1Padding。
// Create a Blowfish key
KeyGenerator keyGenerator = KeyGenerator.getInstance("Blowfish");
// Now set the keysize to 256 bits
keyGenerator.init(256);
Key key = keyGenerator.generateKey();
System.out.println("Done generating the key.");
// Create a cipher using that key to initialize it
Cipher cipher = Cipher.getInstance("Blowfish/CFB8/NoPadding");
//Cipher encrypter = Cipher.getInstance("Blowfish/C/NoPadding");
System.out.println("good here");
SecureRandom random = new SecureRandom();
byte[] iv = new byte[16];
random.nextBytes(iv);
IvParameterSpec spec = new IvParameterSpec(iv);
cipher.init(Cipher.ENCRYPT_MODE, key,spec);
最佳答案
如果您在尝试使用 256 key 大小时收到“java.security.InvalidKeyException:非法 key 大小”,则需要为您的 JDK/JRE 下载 JCE 无限强度管辖策略文件。无限制策略将允许您使用大于 predefined limits 的 key 大小。 (河豚为 128 位)。 Oracle JDK 7无限制JCE策略可以下载here ,请务必阅读存档中包含的 readme.txt 并按照说明进行操作。
如果您收到“java.security.InvalidAlgorithmParameterException:错误的 IV 长度:必须是 ??? 字节长”,则实际 IV 数组长度与模式和填充中指定的所需 IV 长度不匹配Cipher.getInstance() 参数。对于“Blowfish/CFB8/NoPadding”,IV 应为 8 字节长,但在代码中您创建了一个 16 字节长的 IV 数组。
如果您还有其他问题,那么您应该真正更新您的问题并指定实际问题是什么以及实际异常(最好是堆栈跟踪)是什么。
关于java - java中的256位Blowfish加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22449053/