服务器如何从 android 应用程序获取对称密钥?
How can a server get symmetric key from android application?
我正在开发一个关于加密的 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.
根据这个问题:
那是因为 KeyStore 应该是唯一知道该密钥的人。但我真的很困惑:我的服务器需要那个密钥来解密来自 Android 应用程序的文件。但是我无法从 KeyStore 中获取密钥!有没有办法将密钥发送到服务器?
我不知道 GCM,但如果你需要一个可以四处移动的密钥,你应该查看 javax.crypto
包,它有一个非常相似的 API。
我正在开发一个关于加密的 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.
根据这个问题:
我不知道 GCM,但如果你需要一个可以四处移动的密钥,你应该查看 javax.crypto
包,它有一个非常相似的 API。