2014-10-30 81 views
1

我已經創建了一個祕密密鑰,並需要將其存儲在數據庫中,所以我將它轉換爲字符串,之後,我想從數據庫中取回這些密鑰,所以有什麼可能的方式來找到它?執行從字符串鑄造到鍵

KeyGenerator keyGenerator = KeyGenerator.getInstance("RC4"); 
SecretKey secretKey = keyGenerator.generateKey(); 
Cipher cipher = Cipher.getInstance("RC4"); 
String mainKey=secretKey.toString(); 
String cipherkey=cipher.toString()); 
+0

你可以存儲它而不轉換爲字符串 – 2014-10-30 11:28:36

+0

你不應該保存你的字符串格式,它也不安全。 – 2014-10-30 11:31:10

+0

MyDog如何在不使用數據類型的情況下保存?如果我保存沒有轉換什麼將是列的數據類型 – 2014-10-30 11:35:17

回答

0

商店祕密密鑰

SecretKey secretKey = keyGenerator.generateKey(); 
    byte[] secretKeyBytes=secretKey.getEncoded(); 
再次

將其轉換成密鑰使用本

SecretKey secretKey= new SecretKeySpec(secretKeyBytes, 0, secretKeyBytes.length, "RC4"); 
0

您對字符串的轉換幾乎肯定是錯誤的。沒有標準密鑰類別覆蓋toString(),所以您的輸出不會是關鍵數據。

要將您的密鑰轉換爲字符串,請使用getEncoded()獲取關鍵字節,然後決定如何將這些字符表示爲文本。一個常見的選擇可能是對它們進行十六進制編碼(參見DatatypeConverter類)。

要從字符串恢復,首先將其轉換回字節數組(例如十六進制解碼)。然後,你可以重新創建你的鑰匙:

SecretKey secretKey = new SecretKeySpec(keyBytes, "RC4"); 

不要試圖存儲Cipher對象,你試圖在你的示例代碼做。這沒有意義。將其轉換爲字節,並使用BLOB數據類型的數據庫後

+0

親愛的鄧肯請給我有效的代碼RC4加密和解密 – 2014-10-30 11:49:28

+1

@LokeshKumar對不起,我不是一個免費的編碼服務。我試着回答你最初提出的問題。如果你是谷歌,你會發現很多例子。 – 2014-10-30 11:50:19

0

使用下,這是可用KeyGenerator類別:

char[] key = encodeHex(aesKey.getEncoded()); 

byte[] key = aesKey.getEncoded(); 

樂意提供幫助。

+0

嗨Lokesh,如果答案是有用的,然後使用向上的箭頭來投票,否則如果你的問題還沒有解決,那麼讓我知道這個問題。 – LearnAndHelp 2014-11-03 15:48:50