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獲得密鑰!有沒有辦法將密鑰發送到服務器?