服务器如何从Android应用程序获取对称密钥?

时间:2017-05-30 02:36:43

标签: android encryption aes aes-gcm

我正在处理有关加密的Android应用程序。以下代码用于生成GCM密钥:

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 这是因为KeyStore应该是唯一知道该密钥的人。但我真的很困惑:我的服务器需要该密钥来解密Android应用程序中的文件。但是我无法从KeyStore中获取密钥!有没有办法将密钥发送到服务器?

1 个答案:

答案 0 :(得分:1)

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