2017-05-30 40 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。

相關問題