为什么我们无法解密 java 中使用 ECB/PKCS1 使用 RSA 加密在 python 中加密的数据

Why we are unable to decrypt the data in java that is encrypted in python using RSA Encryption using ECB/PKCS1

这里是加密python

中数据的代码
from Crypto.Cipher import AES
from Crypto.PublicKey import RSA
from Crypto.Hash import SHA256
from base64 import b64decode
import base64


mode = AES.MODE_CBC
key_bytes="HTj9bAAAMg9XxK6uLs4JGg==" # random 128 bit key generated 
iv_bytes = "SECRETKEY"
cipher = AES.new(key_bytes, mode, iv_bytes)


def pad(text):
byteNum = len(text)
packingLength = 8 - byteNum % 8
appendage = chr(packingLength) * packingLength
data=text + appendage
return data


plain_text="some text to encrypt"
data = pad(plain_text)
encrypted_bytes = cipher.encrypt(data)
encrypted_string = base64.urlsafe_b64encode(encrypted_bytes)
encrytid = open("encryptid.txt",'w')      #writting encrypted data for ref
encrytid.write(encrypted_string)
encrytid.close()
keys = b64decode('HTj9bAAAMg9XxK6uLs4JGg==')
key = (open('public.pem', 'rb').read())   #reading public.pem data
rsakey = RSA.importKey(key)
rsakey = PKCS1_OAEP.new(rsakey)
encrypted = rsakey.encrypt(keys)
                        #print ("enc: ", encrypted)
encrypt_aes = base64.b64encode(encrypted)

这里是 java 用于解密以上输出的代码:

当我们尝试使用 java 解密数据时,出现以下错误:

错误

javax.crypto.BadPaddingException: Decryption error
 at sun.security.rsa.RSAPadding.unpadV15(Unknown Source)
 at sun.security.rsa.RSAPadding.unpad(Unknown Source)
 at com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:363)
 at com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:389)
 at javax.crypto.Cipher.doFinal(Cipher.java:2121)

有人可以提出解决问题的可能方案吗...

您在 Python 中使用 OAEP 进行加密,在 Java 中使用 PKCS#1 填充进行解密。这两个是不同的 RSA 加密方案,即使它们都存在于 PKCS#1 v2.1 和 2.2 标准中。您也应该在 Java 中使用 OAEP(默认使用 SHA-1)。它应该存在于 Oracle JRE 中。

当我们修复键和 iv 值时,我们得到了错误,然后我们使用随机函数生成它们。 然后还有一件事,密钥和 iv 是我们不应该传递的两种不同格式。我在 java 中解密数据时遇到错误... 最终通过所需步骤解决了问题....