-1

我正在使用 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));
}

谢谢苏尼尔

4

2 回答 2

6

decrypt函数使用——publicKey它从何而来?请注意,使用公钥加密的数据必须使用相应的私钥解密,而不是使用相同的公钥。RSA 等非对称加密具有密钥对的概念,其中密钥对中的每个密钥都可以解密使用另一个密钥加密的数据,而对称加密(例如 AES)则使用相同的密钥进行加密和解密。

于 2009-06-16T10:47:00.273 回答
2

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

加密消息通常密封在一个“信封”中,其中包含加密消息以及用于加密的密钥。密钥当然是用接收者的公钥加密的,从而确保只有私钥的持有者才能取回密钥。

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

于 2009-06-16T11:04:17.277 回答