2016-01-14 71 views
3

是的,這是一個重複this question。但是,答案是錯誤和誤導。答案建議將密鑰寫入其他應用程序可以訪問該文件的文件中。如果我沒有弄錯,keystore的目的是generate and store private keys that can only be seen by your app,所以我甚至不知道爲什麼答案在這個問題上被接受。如何將密鑰保存到密鑰庫?

另一個問題is about encryption and decryption但不是真的關於將數據保存到密鑰庫。

另一個在這裏might be what I'm looking for但如果我沒有弄錯,CipherOutputStream類似於FileOutputStream但它在數據寫入之前先加密數據。從文檔:

該類包裝輸出流和密碼,以便寫入方法通過密碼發送數據,然後將它們寫入底層輸出流。

我想知道這裏是不是一個使用密鑰工具生成的(我猜它是不同的,除非我是錯的),但一個在android 4.3介紹。無論哪種方式,我想學習以編程方式將私鑰保存在密鑰庫中。

aditional的信息

好了,我發現,一旦你撥打KeyPairGeneratorthis app證明就可以自動生成密鑰。但我想要做的是在我的服務器中生成一個密鑰(因爲我的應用程序處於脫機狀態,偶爾會在線連接),然後將該密鑰作爲條目保存在密鑰存儲區中。我現在的問題是創建條目然後保存它。原因是,我想爲我的應用程序創建一個鍵,如api鍵。如果我使用keystore生成的密鑰,那麼每次爲不同的設備創建它時都會有所不同。

+0

保存密鑰是什麼意思?你想添加新的密鑰? – AndroidMechanic

+0

是的,我想要生成新密鑰,然後將這些密鑰保存到密鑰庫,以便只有我的應用才能訪問它。 – hehe

+0

我現在在'KeyStore'類中檢出'store'方法,並希望得到我正在尋找的答案。 – hehe

回答

0

適用年齡的keytool應用程序運如Java的一部分,可提供 一切來生成私鑰和證書標誌從Java密鑰庫 請求的功能,但最基本的功能,導入 已有的私鑰和外部生成證書,仍然忽略 。

終於在Java 6中修復了這個問題。

解決方案是將您現有的證書和密鑰轉換爲 PKCS12文件,然後使用keytool功能將一個 密鑰庫與另一個合併。 Java 6中能治療PKCS12文件作爲 密鑰庫,所以把這個在一起,你會得到這樣的:

keytool -importkeystore -deststorepass changeit -destkeypass changeit 
-destkeystore my-keystore.jks -srckeystore cert-and-key.p12 -srcstoretype PKCS12 -srcstorepass cert-and-key-password -alias 1 

Refer this page for more details

+0

感謝您的回答。我猜這是不同於[android 4.3](http://developer.android.com/about/versions/android-4.3.html)中介紹的那個?我想你使用那個簽名你的apk,對嗎? – hehe

0

嘗試使用Keystoreexplorer(一個簡單的程序)管理證書和商店。首先使用keytool創建它作爲@Androidmechanic suggegest,然後使用keystoreexplorer將其添加到密鑰庫