从单独方法调用时,getKey(alias,keyPassword)返回密钥的空值

认识古吉拉特邦:

我正在尝试检索Java密钥存储区中的存储密钥。我写了下面的代码。

public class clientEncryptionUtility
{

    public static void generateKeyAndStoreOnKeyStore(String _keyStorePassword, String _keyStorePath, String _keyPassword, String keyAlias) throws Exception // take the keystore path, alias, password
    {
        KeyStore keyStore = KeyStore.getInstance("JCEKS");
        char[] keyStorePassword = _keyStorePassword.toCharArray();
        String path = _keyStorePath;
        FileInputStream fis = new FileInputStream(path);
        //load keystore
        keyStore.load(fis, keyStorePassword);
        //Loading the KeyStore object
        KeyStore.ProtectionParameter protectionParam = new KeyStore.PasswordProtection(keyStorePassword);

        //Generate the symmetric key for encryption
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");

        SecureRandom secureRandom = new SecureRandom();

        int keyBitSize = 128;

        keyGenerator.init(keyBitSize, secureRandom);

        SecretKey secretKey = keyGenerator.generateKey();   //Secret encryption key is genereated

        //setting the password for the key stored in keystore
        System.out.println("Algorithm used to generate key : "+secretKey.getAlgorithm()); 

        char[] keyPassword = _keyPassword.toCharArray();

        KeyStore.ProtectionParameter entryPassword = new KeyStore.PasswordProtection(keyPassword);

        KeyStore.SecretKeyEntry secretKeyEntry = new KeyStore.SecretKeyEntry(secretKey);

        keyStore.setEntry(keyAlias, secretKeyEntry, entryPassword);
        SecretKey newSecretKey = (SecretKey) keyStore.getKey(keyAlias, keyPassword);
        String stringKey = newSecretKey.toString();
        System.out.println("The encryption key at the alias is: " + stringKey);
    }
    public static void getKeyFromKeyStore(String _keyStorePassword, String _keyStorePath, String keyAlias, String _keyPassword) throws Exception
    {
        KeyStore keyStore = KeyStore.getInstance("JCEKS");
        char[] keyStorePassword = _keyStorePassword.toCharArray();
        String path = _keyStorePath;
        FileInputStream fis = new FileInputStream(path);

        //load keystore
        keyStore.load(fis, keyStorePassword);
        char[] keyPassword = _keyPassword.toCharArray();
        SecretKey secretKey = (SecretKey) keyStore.getKey(keyAlias, keyPassword);
        // Key key = keyStore.getKey(keyAlias, keyPassword);
        String stringKey = secretKey.toString();
        System.out.println("The encryption key at the alias is: " + stringKey);

    }
}

-如果我调用generateKeyAndStoreOnKeyStore()方法,并存储密钥并在同一函数中检索密钥,则检索密钥。

-但是,如果我从另一个方法getKeyFromKeyStore()中执行相同的操作,其中我只是试图从梯形畸变中检索别名处的密钥,则会得到nullPointerException。

我哪里错了?

总统詹姆斯·波尔克(James K. Polk):

不幸的是,从javadocs尚不清楚您必须调用该KeyStore.store(...)方法以持久保存对密钥库的更改。一旦generateKeyAndStoreOnKeyStore()退出,该KeyStore实例创建有超出范围和密钥库所做的任何未保存的更改消失。

KeyStore.store(...)进行更改后调用方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python:为什么在while循环内调用的函数返回的值不同于单独调用时的返回值?

从不同方法调用时,DirectoryInfo返回不同的值

Java-当在类外部调用而不是从内部调用时返回正确值的方法?

对象模拟不起作用(其为空)并在方法调用时返回 NullPointerException

Flutter:Geolocator返回在空值上调用了“ compareTo”方法

C#–模拟使用Moq第二次调用时返回不同值的方法

如何在第一次调用时模拟方法以返回值X,在其余调用时返回Y?

从“ VisitLambda”调用时,重写“ System.Linq.Expressions.ParameterExpression”类型的节点必须返回相同类型的非空值

一个方法从 onCreate 调用时返回空对象,但在 onClick 方法中返回正确的值

我的单独方法不断返回错误的值

Flask-递归函数调用时会忽略默认参数(在单独的调用之间累积的值)

如何在函数调用时解开返回值?

DataFrame.to_dict如何在调用时返回不同的值?

numpy.reciprocal在重复调用时返回不同的值

JavaScript这个函数会在每次调用时返回变化的值

Laravel:控制器方法在调用时接收空参数

方法调用返回空值

GetKey方法在dataSnapshot中返回null

函数在控制台中调用时返回值,但在函数声明后调用时不会返回

在异步方法中使用时,SignalR调用不返回

方法在第一次调用时返回 undefined

声纳:由于被调用方法的返回值可能导致空指针取消引用

数组返回正确的值,但稍后调用时将所有值返回为“ undefined”

NSURLSessionUploadTask作为单独的方法,但是将数据返回给调用

静态类方法在类外部调用时返回对象,但在不同类内部调用时返回空对象

调用时ECS CLI密钥对错误

GetKey 的 Azure KeyVaultClient 密钥

动态密钥的调用方法

在LAMBDA对象返回值的方法调用