2012-04-22 86 views
0

是否可以將BigInteger轉換爲接口密鑰?BigInteger to Key

http://docs.oracle.com/javase/7/docs/api/java/security/Key.html

我想實現的RSA算法的,和我產生了自己的密鑰,而不是使用的KeyPairGenerator操作系統。但是,使用密碼加密我的消息時,需要一個密鑰。我曾嘗試將BigInteger投射到Key,但這沒有奏效。

+1

是的,這是可能的。 – 2012-04-22 19:11:22

+0

道歉 - 我已經添加了更多的細節問題。 – Joseph 2012-04-22 19:15:26

+1

當然,'Key'不是'BigInteger',所以你不能投。用Java進行轉換不是轉換運算符(除了原始類型)。你需要知道實現你想要實例化的'Key'的具體類,這可能只是你研究的開始。 – 2012-04-22 19:29:33

回答

0

下面是從模數和公開指數創建RSAPublicKey實現的示例。

KeyFactory factory rsa = KeyFactory.getInstance("RSA"); 
BigInteger n = ... ; /* modulus */ 
BigInteger e = ... ; /* public exponent */ 
RSAPublicKeySpec spec = new RSAPublicKeySpec(n, e); 
RSAPublicKey pub = (RSAPublicKey) factory.generatePublic(spec); 
Cipher enc = Cipher.getInstance("RSA"); 
enc.init(Cipher.WRAP_MODE, pub); 
byte[] encryptedContentKey = enc.wrap(secret); 

的RSA密鑰對是私有密鑰公鑰,其中的每一個包括在BigInteger對象的形式的幾個數字。一對中的每個鍵共享相同的「模數」。公鑰有一個「公開指數」,私鑰有一個「私人指數」。爲了計算效率,私鑰通常以「中國剩餘定理形式」存儲,其中包括附加數字。

如果您正在加密,您需要將PublicKey傳遞給Cipherinit()方法。

如果您正在解密,您需要將PrivateKey傳遞給Cipherinit()方法。

(一些供應商允許你使用一個Cipher執行簽名操作,並使用正確的填充,當你扭轉鑰匙,但是不建議這樣做或必要時Signature類表達你的意圖更加清晰。)