我正在尝试加密数据并使用256位blowfish将它们发送到服务器再见,但我不知道密钥大小的正确提供商是什么。我试图改变CFB32和CFB8但是不起作用我试过用8 16和32但是它不起作用。我试过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);
答案 0 :(得分:2)
如果你得到" java.security.InvalidKeyException:非法密钥大小"当尝试使用256的密钥大小时,您需要为JDK / JRE下载JCE Unlimited Strength Jurisdiction Policy Files。无限制策略允许您使用大于predefined limits的密钥大小(128位用于河豚)。 可以下载Oracle JDK 7无限制JCE策略here,确保阅读存档中包含的readme.txt并按照说明进行操作。
如果你得到" java.security.InvalidAlgorithmParameterException:错误的IV长度:必须是???字节长"然后,实际的IV数组长度与Cipher.getInstance()参数中指定的模式和填充所期望的IV长度不匹配。对于" Blowfish / CFB8 / NoPadding" IV应该是8个字节长,但在你的代码中你创建一个16字节长的IV阵列。
如果您还有其他一些问题,那么您应该更新您的问题并指定实际问题是什么以及实际异常(最好是堆栈跟踪)是什么。
答案 1 :(得分:0)
对于256位Keysize,需要在项目中添加JCE jar,并且引用的代码将适用于此。
JCE Jar:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
BlowfishUtility:https://github.com/NikhilPareek88/BlowfishUtility