DES,RSA加密和解密

时间:2017-10-22 11:33:21

标签: python encryption cryptography rsa des

所以我决定增强加密和解密的python技能,并试图编写一个执行以下命令的python程序:

  • 生成1024位私钥和公钥
  • 使用DES算法加密私钥
  • 将加密的私钥保存到文件
  • 将公钥保存到文件
  • 使用公钥通过RSA算法加密文件

我一直收到错误:

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);

1 个答案:

答案 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)