所以我决定增强加密和解密的python技能,并试图编写一个执行以下命令的python程序:
我一直收到错误:
import Crypto
from Crypto.PublicKey import RSA
from Crypto.Cipher import DES
# Generate Private Key
private = RSA.generate(1024)
m = open('mykey.pem','w')
m.write(private.exportKey('PEM'))
#Get public key
public = private.publickey()
pr = RSA.importKey(open('mykey.pem', 'r'))
#DES encryption
password= '01234567'
des= DES.new(password,DES.MODE_ECB)
des_cipher= des.encrypt(pr)
f = open('privatekey.dat','w')
l = open('publickey.dat','w')
s=open('encrypted.dat','w')
w = open('encrypt.dat', 'r')
war = w.read()
f.write(des_cipher)
l.write(public)
#RSA encryption
enc_data = public.encrypt(war)
s.write(enc_data)
f.close()
l.close()
s.close()
w.close()
m.close()
我的代码:
ScaleTransform st = new ScaleTransform(1.7, 1.7);
TransformGroup gt1 = new TransformGroup();
gt1.Children.Add(rectangle.RenderTransform);
gt1.Children.Add(st);
答案 0 :(得分:0)
RSA.importKey()
采用字符串,而不是文件。阅读文件:
pr = RSA.importKey(open('mykey.pem', 'r').read())
或使用上下文管理器正确关闭文件:
with open('mykey.pem', 'r') as keyfile:
pr = RSA.importKey(keyfile.read())
将文件用作上下文管理器,无需在最后对每个文件调用close
。
来自RSA.importKey()
documentation:
importKey(externKey, passphrase=None)
导入以标准格式编码的RSA密钥(公共或私人一半)。
[...]
参数:
externKey
(字符串) - 要导入的RSA密钥,编码为字符串。
接下来,您无法加密RSA私钥对象。您只能加密字节,因此再次导出私钥。您需要填充字符串(最好使用PKCS#7标准)到块长度的倍数:
plaintext = pr.exportKey('PEM')
remainder = len(plaintext) % des_cipher.block_length
if remainder:
# add padding
pad_length = des.block_length - remainder
plaintext += chr(pad_length) * pad_length
des_cipher = des.encrypt(remainder)