2014-04-06 74 views
5

我在我的應用程序中使用RSA加密技術。要存儲生成的公鑰,我將其轉換爲字符串,然後將其保存在數據庫中。Java中的字符串的密鑰RSA

Key publicKey=null; 
    Key privateKey=null; 

    KeyPair keyPair=RsaCrypto.getKeyPairRSA(1024); 
    publicKey=keyPair.getPublic(); 
    privateKey=keyPair.getPrivate(); 



    String publicK=Base64.encodeToString(publicKey.getEncoded(), Base64.DEFAULT); 
    String privateK=Base64.encodeToString(privateKey.getEncoded(), Base64.DEFAULT); 

我保存字符串publicKprivateK。 我的問題是,當我想用​​RSA加密/解密文本並使用我保存的字符串格式的密鑰時,我不知道如何將其轉換爲Key

public static String encrypt(Key publicKey, String inputText){ 
    byte[]encodedBytes=null; 
    String encryptedText=""; 
    try { 
     Cipher cipher=Cipher.getInstance("RSA"); 
     cipher.init(Cipher.ENCRYPT_MODE, publicKey); 
     encodedBytes=cipher.doFinal(inputText.getBytes()); 
    } catch (Exception e) {Log.e("Error", "RSA encryption error"); } 

    encryptedText=Base64.encodeToString(encodedBytes, Base64.DEFAULT); 
    return encryptedText; 
} 

你有什麼想法嗎? 非常感謝

+0

請,請,請不要將未加密的私鑰存儲在數據庫中。如果您必須存儲稱爲託管的私鑰,並且您應該使用只有您的應用程序已知的對稱密鑰對它們進行加密。 – KyleM

+0

謝謝,是的,我正在考慮這個問題。您能否給我一個建議,在應用程序中存儲密鑰的最佳方式是什麼?謝謝 – rgreso

+0

使用受密碼保護的Java密鑰庫。查找Java keytool ... – KyleM

回答

7

要publicK(字符串)轉換爲公共密鑰做如下:

byte[] keyBytes = Base64.decode(publicK.getBytes("utf-8")); 
X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes); 
KeyFactory keyFactory = KeyFactory.getInstance("RSA"); 
PublicKey key = keyFactory.generatePublic(spec); 

要轉換privateK(字符串)私鑰做如下:

byte[] keyBytes = Base64.decode(privateK.getBytes("utf-8")); 
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes); 
KeyFactory fact = KeyFactory.getInstance("RSA"); 
PrivateKey priv = fact.generatePrivate(keySpec); 
+0

謝謝你的回答。 Eclipse向我展示了一個錯誤:對於Base64類型,方法decodeBase64(byte [])未定義。你可以幫我嗎?非常感謝 – rgreso

+0

@rgreso試試這段代碼。 – Rahil2952

+0

感謝您的回答,但它仍然顯示錯誤,這次它需要另一個參數:類型Base64中的方法decode(byte [],int)不適用於參數(byte [])。你有什麼主意嗎?非常感謝您的時間 – rgreso

1

未能進行能夠對之前的帖子發表評論。我想知道什麼

PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(clear); 
0

是「明確的」我只能假設行:

PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(clear); 

與「清晰」的意思是「keyBytes」