Java:如何从String创建RSA公钥

Mar*_*aux 8 java rsa encryption-asymmetric

我有RSA公钥的字节数组.我在互联网上发现我可以使用以下代码创建一个真正的PublicKey对象:

PublicKey publicKey = 
    KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(bytes));
Run Code Online (Sandbox Code Playgroud)

但每次运行此代码时,我都会使用该密钥获取加密数据的另一个结果.我确定我要加密的数据总是相同的,表示密钥的字节数组也是如此.

这是正常的吗?

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

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());
Run Code Online (Sandbox Code Playgroud)

这可能是非对称加密算法的一部分?

谢谢.

SLa*_*aks 7

RSA是非确定性的.

您可以通过选择非随机填充模式使其确定性; 但是,这不安全.