从密钥库(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,再次创建了项目,一切都和以前一样正常。非常奇怪的错误:(。谢谢!