2014-09-30 85 views
0

作爲加密和保存數據的一部分,我們使用openssl的AES算法生成KEY。Keystore - 從命令行進入Keystore的自定義SecretKey條目

openssl enc -aes-256-cbc -P -nosalt 

Openssl的已產生KEY & IV值,它們被存儲在純文本文件。因爲將密鑰存儲在普通文檔中是不安全的標準,所以將其移至Keystore。

因此,我們通過執行下面的命令使用keytool生成了一個Keystore。

keytool -genseckey -keyalg AES -alias aesstore -keysize 256 -keypass changeit -storetype jceks -keystore hello.jceks -storepass changeit 

這個密鑰庫擁有一個隨機祕密密鑰。所以,我們希望將我們的KEY & IV值移動到密鑰庫,以便我們可以從那裏獲取並使用它們來加密數據。我在下面找到了將定製KEY值存儲到Keystore的鏈接,但沒有找到IV值。

http://java.dzone.com/articles/secret-key-import-java

因此,如果任何人對如何既KEY & IV值存儲到密鑰庫中。任何想法,請大家分享。

此外,我們正在尋找一種方法,我們可以從命令行本身將定製密鑰傳遞給密鑰庫。

在此先感謝。

回答

1

每次在操作模式中使用密鑰時,IV應該是唯一的。因此,用鑰匙存儲IV沒有多大意義。如果你不得不使用散列函數從密鑰中提取CBC的IV,但是你只能用密鑰加密一次並生成IV。

通常會產生一個隨機的IV並將其加到密文的前面。當使用密碼時,他們通常與隨機鹽配對。如果爲每個加密操作生成一個新的隨機鹽,那麼指定完全隨機的IV將是虛假的。在那種情況下,IV可能來源於鹽。在這種情況下,salt通常是以密文爲前綴的。

所以你正在尋找一個選項來存儲一個持久的IV,而IV已被定義爲每個加密更改。這就是爲什麼您在密鑰存儲實現中找不到解決方案的原因。

+0

你好,有人在家嗎? – 2014-10-03 13:42:51

+0

感謝您的回覆。我瞭解到,IV是關鍵存儲實施中不斷變化的價值。目前,我們面臨的問題是,我們一直在使用持續的KEY和IV值來加密和保存數據。如果我們將KEY移到Keystore,那麼我們加密的數據與以前的同一個字符串的加密數據不匹配,因爲IV值不同。因此,爲了解決這個問題,我認爲唯一的解決方案是,從Keystore中提取密鑰並在持久IV的幫助下對數據進行加密。請建議。 – user3119077 2014-10-06 06:47:39

+1

你應該改變你的協議,並最終存儲一個密鑰。但是現在你可以從中解脫出來並將IV存儲爲例如AES-128密鑰。然後你用'aesKey.getEncoded()'返回字節。 AES密鑰由完全隨機的數據組成,只會在輸入時返回字節。 – 2014-10-06 07:29:30