我正在尝试加密数据,并使用256位的河豚将它们发送到服务器,但我不知道密钥大小的合适提供商是什么。我尝试更改CFB32和CFB8,但不起作用,我尝试了iv与8,16和32,但它不起作用。我已经尝试过OAEPWithSHA-256和MGF1Padd,它也不起作用。当我使用blowfish/ECB/PKCS1Padd时,它给我的消息是找不到任何提供者支持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);发布于 2014-03-17 16:01:08
如果您在尝试使用密钥大小为256时出现"java.security.InvalidKeyException:非法密钥大小“,那么您需要下载适用于您的JDK/JRE的JCE无限强度管辖策略文件。无限策略将允许您使用大于predefined limits的密钥大小(blowfish为128位)。OracleJDK7unLimitedJCE策略可以从here下载,请确保阅读归档文件中包含的readme.txt并按照说明进行操作。
如果您得到了错误的IV长度:"java.security.InvalidAlgorithmParameterException: be ? bytes length“,那么您的实际IV数组长度与Cipher.getInstance()参数中指定的模式和填充所期望的IV长度不匹配。对于"Blowfish/CFB8/NoPadding“,IV应该是8字节长,但是在您的代码中创建了一个16字节长的IV数组。
如果你有一些其他的问题,那么你真的应该更新你的问题,并指定实际的问题是什么,以及实际的异常是什么(最好使用堆栈跟踪)。
发布于 2017-08-25 08:38:24
对于256位密钥大小,需要在项目中添加JCE jar,参考代码将为此工作。
Jar:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
BlowfishUtility:https://github.com/NikhilPareek88/BlowfishUtility
https://stackoverflow.com/questions/22449053
复制相似问题