JAVA中的简单RSA加密和解密消息

时间:2014-07-18 20:51:16

标签: java encryption cryptography rsa

我已经尝试了几天而根本无法使其发挥作用。如果我有私钥和公钥对。我只是尝试使用公钥加密消息,然后使用私钥解密。我的代码看起来像这样:

    String message = "Secure Message";
    KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
    keyPairGenerator.initialize(2048);

    KeyPair keyPair = keyPairGenerator.generateKeyPair();

    Key privateKey = keyPair.getPrivate();
    Key publicKey = keyPair.getPublic();

    Cipher cipher = Cipher.getInstance(publicKey.getAlgorithm());

    cipher.init(Cipher.ENCRYPT_MODE, publicKey);

    byte[] encryptData = cipher.doFinal(message.getBytes());

    cipher.init(Cipher.DECRYPT_MODE, privateKey);

    byte[] decryptData = cipher.doFinal(encryptData);

    System.out.println(encryptData.toString());
    System.out.println(decryptData.toString());

但它似乎没有起作用。我得到的输出是这样的:

    [B@4e33967b
    [B@1cdc8d59

1 个答案:

答案 0 :(得分:1)

您的代码存在两个非常小的问题,

 // System.out.println(encryptData.toString());
 // System.out.println(decryptData.toString());

 System.out.println(Arrays.toString(encryptData));
 System.out.println(new String(decryptData));
  1. 加密的字符串是二进制的。所以你可能不喜欢看到它直接映射到ASCII。它看起来像垃圾。
  2. Java数组不会覆盖Object.toString(),因此您获得Object.toString(),这基本上是hashCode(),实际上是参考地址。
  3. 我上面的第二个println()输出了预期的“安全消息”。