从密钥库(java)获取密钥时出错
我正面临一个非常奇怪的错误。这个错误是从今天开始发生的,它是在周五工作的,没有任何变化,至少我什么都不知道 我有一个简单的密钥库,我在其中存储一个密钥来加密一些数据。为了测试一个测试,我们创建了一个单独的应用程序来处理这个问题。代码如下:从密钥库(java)获取密钥时出错,java,keystore,Java,Keystore,我正面临一个非常奇怪的错误。这个错误是从今天开始发生的,它是在周五工作的,没有任何变化,至少我什么都不知道 我有一个简单的密钥库,我在其中存储一个密钥来加密一些数据。为了测试一个测试,我们创建了一个单独的应用程序来处理这个问题。代码如下: public static void main(String[] args) { Properties prop = new Properties(); try { prop.load(new FileInputStream(
public static void main(String[] args) {
Properties prop = new Properties();
try {
prop.load(new FileInputStream("./security/security.properties"));
String ksFile = prop.getProperty("KSFile");
String ksPassword = prop.getProperty("KSPassword");
String keyAlias = prop.getProperty("KeyAlias");
String keyPassword = prop.getProperty("KeyPassword");
prop.getProperty("CardDataEncryptionKey");
KeyStore ks;
ks = KeyStore.getInstance("JCEKS");
FileInputStream fis = null;
fis = new FileInputStream(ksFile);
ks.load(fis, ksPassword.toCharArray());
// For symmetric
char[] keycharArray = keyPassword.toCharArray();
ProtectionParameter proParam = new KeyStore.PasswordProtection( keycharArray );
KeyStore.Entry entry = ks.getEntry( keyAlias, proParam );
SecretKeyEntry aeskey = (KeyStore.SecretKeyEntry) entry;
aeskey.getSecretKey();
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
代码非常基本,只需打开security.properties中配置的密钥库。现在的问题是,我在以下行中遇到了一个错误:
KeyStore.Entry entry = ks.getEntry( keyAlias, proParam );
我重申这不是真的,只是突然开始的。文件正常,路径正常,文件已打开,但当我尝试获取KeyEntry时,我得到一个NumberFormatException,真的不知道发生了什么。这是错误堆栈跟踪:
Test at localhost:62013
Thread [main] (Suspended (exception NumberFormatException))
owns: InetAddress$Cache (id=58)
owns: Object (id=59)
Integer.parseInt(String, int) line: not available
Integer.<init>(String) line: not available
InetAddressCachePolicy.<clinit>() line: not available
InetAddress$Cache.getPolicy() line: not available
InetAddress$Cache.put(String, InetAddress[]) line: not available
InetAddress.cacheInitIfNeeded() line: not available
InetAddress.cacheAddresses(String, InetAddress[], boolean) line: not available
InetAddress.getAddressesFromNameService(String, InetAddress) line: not available
InetAddress.getLocalHost() line: not available
JarVerifier.getSystemEntropy() line: 783
JarVerifier.testSignatures(X509Certificate, CertificateFactory) line: 706
JarVerifier.access$400(X509Certificate, CertificateFactory) line: 34
JarVerifier$1.run() line: 183
JarVerifier$1.run() line: 149
AccessController.doPrivileged(PrivilegedExceptionAction<T>) line: not available [native method]
JarVerifier.<clinit>() line: 148
JceSecurity.loadPolicies(File, CryptoPermissions, CryptoPermissions) line: 316
JceSecurity.setupJurisdictionPolicies() line: 261
JceSecurity.access$000() line: 48
JceSecurity$1.run() line: 78
AccessController.doPrivileged(PrivilegedExceptionAction<T>) line: not available [native method]
JceSecurity.<clinit>() line: 76
JceSecurityManager.<clinit>() line: 65
CipherForKeyProtector(Cipher).<init>(CipherSpi, Provider, String) line: 252
CipherForKeyProtector.<init>(CipherSpi, Provider, String) line: 377
KeyProtector.unseal(SealedObject) line: 347
JceKeyStore.engineGetKey(String, char[]) line: 133
JceKeyStore(KeyStoreSpi).engineGetEntry(String, KeyStore$ProtectionParameter) line: not available
KeyStore.getEntry(String, KeyStore$ProtectionParameter) line: not available
Test.main(String[]) line: 39
在本地主机上测试:62013
线程[main](挂起(异常编号FormatException))
拥有:InetAddress$Cache(id=58)
所有者:对象(id=59)
整数.parseInt(字符串,int)行:不可用
整数。(字符串)行:不可用
InetAddressCachePolicy。()行:不可用
InetAddress$Cache.getPolicy()行:不可用
InetAddress$Cache.put(字符串,InetAddress[])行:不可用
InetAddress.cacheInitIfNeeded()行:不可用
InetAddress.cacheAddresses(字符串,InetAddress[],布尔值)行:不可用
InetAddress.getAddressesFromNameService(字符串,InetAddress)行:不可用
InetAddress.getLocalHost()行:不可用
JarVerifier.getSystemEntropy()行:783
JarVerifier.testSignatures(X509Certificate,CertificateFactory)行:706
JarVerifier.access$400(X509Certificate,CertificateFactory)行:34
JarVerifier$1.run()行:183
JarVerifier$1.run()行:149
AccessController.doPrivileged(PrivilegedExceptionAction)行:不可用[本机方法]
JarVerifier.()行:148
JceSecurity.LoadPolicys(文件、加密权限、加密权限)行:316
JceSecurity.setupJudictionPolicys()行:261
JceSecurity.access$000()行:48
JceSecurity$1.run()行:78
AccessController.doPrivileged(PrivilegedExceptionAction)行:不可用[本机方法]
JceSecurity.()行:76
JceSecurityManager.()行:65
CipherForKeyProtector(密码)。(CipherSpi,提供程序,字符串)行:252
CipherForKeyProtector.(CipherSpi,提供程序,字符串)行:377
KeyProtector.解封(密封对象)行:347
JceKeyStore.engineGetKey(字符串,字符[])行:133
JceKeyStore(keystorepi).enginegentry(字符串,KeyStore$ProtectionParameter)行:不可用
KeyStore.getEntry(字符串,KeyStore$ProtectionParameter)行:不可用
测试。主(字符串[])行:39
求求你们,给我一线希望吧!
谢谢大家! 最后这是一个日食问题,也不知道为什么会发生。我在更改域密码后开始出现此错误,即使我重新启动了Windows两次 谁知道呢!
谢谢。试着不要在调试模式下运行它,或者检查是否启用了异常断点。正如您从openjdk源代码中看到的,InetAddressCachePolicy在内部抛出NumberFormatException,但以静默方式捕获它并继续执行。由于某种原因,调试器决定在该点停止。谢谢Konstantin。您是对的,但是密钥存储条目没有加载,我需要这些信息才能使应用程序正常工作。最后,我认为这是一个日食问题。我在一个新文件夹中安装了Eclipse,再次创建了项目,一切都和以前一样正常。非常奇怪的错误:(。谢谢!