如何使用rsa privatekey解密数据

时间:2009-06-16 09:06:55

标签: java encryption rsa

我正在使用JAVA 我的朋友使用SYMBIAN

我和我的朋友有相同的rsa模数。如果我使用公钥加密数据,那么我的朋友能够解密相同的数据。但如果我的朋友使用公钥加密数据,那么我无法解密数据。我得到一个错误,因为“数据必须从零开始”

public static byte[] encrypt(byte[] encrptdByte) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
    byte[] encryptionByte = null;
    Cipher cipher = Cipher.getInstance("RSA");
    cipher.init(Cipher.ENCRYPT_MODE, publicKey);
    encryptionByte = cipher.doFinal(encrptdByte);
    return encryptionByte;
}

public static void decrypt(byte[] encrptdByte) throws NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException {
    byte[] encryptionByte = null;
    Cipher cipher = Cipher.getInstance("RSA");
    cipher.init(Cipher.DECRYPT_MODE, publicKey);
    encryptionByte = cipher.doFinal(encrptdByte);

    System.out.println("Recovered String     :::  " + new String(encryptionByte));
}

由于 苏尼

2 个答案:

答案 0 :(得分:6)

decrypt函数使用publicKey - 它来自何处?请注意,使用公钥加密的数据必须使用相应的私钥解密,而不能使用相同的公钥解密。诸如RSA之类的非对称加密具有密钥对的概念,其中该对中的每个密钥可以解密用另一个密钥加密的数据,这与诸如AES的对称加密相反,其中相同的密钥用于加密和解密。

答案 1 :(得分:2)

要添加上一篇文章,使用不对称加密大规模加密/解密数据是不切实际的(因为它明显慢于对称加密)。非对称加密(如RSA)的最实际用途是加密用于加密数据的对称密钥(用于AES或类似算法),以及签署消息摘要的安全散列(SHA-256等)。 / p>

加密邮件通常密封在“信封”中,该信封包含加密邮件以及用于加密的密钥。密钥当然是使用收件人公钥加密的,从而确保只有私钥的持有者才能检索密钥。

最后,消息的发送者可以选择性地计算消息的安全散列,并使用发送者的私钥对其进行加密。收件人解密加密的哈希(使用发件人的公钥),并与计算的哈希进行比较,以验证发件人的身份。