2011-12-12 59 views
9

我有RSA公钥的字节数组。我认为我可以通过使用此代码创建一个真正的公钥对象在互联网上找到:Java:如何从字符串中创建RSA公钥

PublicKey publicKey = 
    KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(bytes)); 

但每次我运行此代码时,我得到了使用该密钥加密的数据的另一个结果。我确定我想要加密的数据总是相同的,字节数组也代表密钥。

这是正常的吗?

这里是我的代码总是产生另一个输出:

byte[] keyBytes = Base64.decodeBase64(rsa_1024_public_key); 
     // rsa_1024_public key is a constant String 

Cipher c = Cipher.getInstance("RSA"); 

PublicKey publicKey = 
    KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(keyBytes)); 

c.init(Cipher.ENCRYPT_MODE, publicKey); 

return c.doFinal(password.getBytes()); 

这大概就是非对称加密算法的一部分吗?

谢谢。

+0

RSA是非确定性的。 – SLaks

+0

@SLaks:你想发布它作为答案吗?这是正确的:D我会给35个代表点。 –

+0

其实15,我很久以前就达到了限制。 :) – SLaks

回答

7

RSA是非决定性的。

您可以通过选择非随机填充模式来确定它;但是,这不会安全。

+0

我会给下周十oke? –

+0

不要打扰;我通常每个工作日都会达到限制。 – SLaks