2012-04-22 29 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类表达你的意图更加清晰。)