2017-05-30 65 views
2

我正在研究有关加密的Android应用程序。而下面的代码用于生成GCM键:服务器如何从android应用程序获取对称密钥?

KeyGenerator generator=KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore"); 
generator.init(
     new KeyGenParameterSpec.Builder("myfirstkey!", 
       KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT) 
       .setBlockModes(KeyProperties.BLOCK_MODE_GCM) 
       .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE) 
       .setRandomizedEncryptionRequired(false)//use my own iv. I'll change it. 
       .setKeySize(128) 
       .build()); 
generator.generateKey(); 

,我打算这个关键首先发送到我的服务器,这样我可以测试GCM是否工作。所以,我用这个代码拿到钥匙:

byte[] bkey=sKey.getEncoded(); 

当然,我失败了,我得到一个错误:

java.lang.NullPointerException: Attempt to read from null array. 

根据这样一个问题:Calling .getEncoded() on SecretKey returns null 这是因为密钥库应该是唯一的一个知道这个关键。但我真的很困惑:我的服务器需要这个密钥来解密来自Android应用程序的文件。但我无法从KeyStore获得密钥!有没有办法将密钥发送到服务器?

回答

1

我不了解GCM,但如果您需要一个可以四处移动的密钥,您应该查看javax.crypto包,它具有非常类似的API。

相关问题