我正在使用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));
}
由于 苏尼
答案 0 :(得分:6)
decrypt
函数使用publicKey
- 它来自何处?请注意,使用公钥加密的数据必须使用相应的私钥解密,而不能使用相同的公钥解密。诸如RSA之类的非对称加密具有密钥对的概念,其中该对中的每个密钥可以解密用另一个密钥加密的数据,这与诸如AES的对称加密相反,其中相同的密钥用于加密和解密。
答案 1 :(得分:2)
要添加上一篇文章,使用不对称加密大规模加密/解密数据是不切实际的(因为它明显慢于对称加密)。非对称加密(如RSA)的最实际用途是加密用于加密数据的对称密钥(用于AES或类似算法),以及签署消息摘要的安全散列(SHA-256等)。 / p>
加密邮件通常密封在“信封”中,该信封包含加密邮件以及用于加密的密钥。密钥当然是使用收件人公钥加密的,从而确保只有私钥的持有者才能检索密钥。
最后,消息的发送者可以选择性地计算消息的安全散列,并使用发送者的私钥对其进行加密。收件人解密加密的哈希(使用发件人的公钥),并与计算的哈希进行比较,以验证发件人的身份。