我有一个R脚本,该脚本调用系统调用,将敏感数据作为参数传递给Python脚本。我想在传递参数之前使用RSA加密这些参数。然后在Python脚本中解密它们。
R:
# main.R
library(PKI)
key <- PKI.genRSAkey(2048L)
PKI.save.key(key, target = "privkey.pem")
msg <- charToRaw("password")
msg.e <- PKI.encrypt(msg, key)
result = system2("python", args = c("dostuff.py", msg.e), stdout = TRUE)
print(result)
Python:
# dostuff.py
import Crypto
from Crypto.PublicKey import RSA
import ast, sys
key = RSA.importKey(open('privkey.pem').read())
encrypted = sys.argv[1]
decrypted = key.decrypt(ast.literal_eval(str(encrypted)))
print("Decryption returned:", decrypted) # decrypted != "password" :(
尝试此操作时,会得到一长串数字(不是“密码”),或者当我尝试b64decode时,它会出错(binascii.Error:填充不正确)。通常由于不正确地读取和解码二进制,十六进制及其字符串表示形式而导致许多不同的错误。
PKI.encrypt
需要原始输入的事实是问题的一部分。我不确定Python如何读取它,如何转换它,并在返回R时解释结果。