我正在开发一个Java跨平台客户端应用程序,它将使用Bouncy Castle API加密的PBEWITHSHA256AND128BITAES-CBC-BC将敏感信息存储在本地文件中。
以下代码:
public static void main(String[] args) throws NoSuchAlgorithmException {
Security.addProvider(new BouncyCastleProvider());
for (Provider provider : Security.getProviders()) {
for (Provider.Service service : provider.getServices()) {
System.out.println(provider.getName() + ": " + service.getAlgorithm());
}
}
SecretKeyFactory.getInstance("PBEWITHSHA256AND128BITAES-CBC-BC");
}
给了我以下例外:
SUN: NativePRNG
SUN: SHA1PRNG
SUN: SHA1withDSA
[...]
BC: PBEWITHSHAAND192BITAES-CBC-BC
BC: PBEWITHSHAAND256BITAES-CBC-BC
BC: PBEWITHSHA256AND128BITAES-CBC-BC
BC: PBEWITHSHA256AND192BITAES-CBC-BC
BC: PBEWITHSHA256AND256BITAES-CBC-BC
BC: DESMAC
[...]
Exception in thread "main" java.security.NoSuchAlgorithmException: PBEWITHSHA256AND128BITAES-CBC-BC SecretKeyFactory not available
at javax.crypto.SecretKeyFactory.<init>(DashoA13*..)
at javax.crypto.SecretKeyFactory.getInstance(DashoA13*..)
at TestBouncyCastle.main(TestBouncyCastle.java:47)
这很奇怪,因为PBEWITHSHA256AND128BITAES-CBC-BC被列为可用服务。
在Bouncy Castle维基上,有note:
注意:要充分利用必须安装的提供程序 您正在使用的JVM中的无限制策略文件 - 这些可以是 从http://java.sun.com下载。
如果我理解正确,我需要在客户端JRE中安装一个文件。我想避免在应用程序中提供JRE。有办法吗?
谢谢!