【问题标题】:RSA encryption: error on decryption functionRSA 加密:解密功能出错
【发布时间】:2018-05-06 09:42:48
【问题描述】:

第一次发帖。这也是我第一次在 Python 上编码。

我的 RSA 加密 python 项目真的需要帮助。

如果我将解密转换为函数,我的解密会显示我的错误密钥错误。 (错误:错误的钥匙?) 但是当我将解密功能加入我的加密功能时,它会起作用并解密我已加密的消息。

我能问一下为什么吗? (我在 Linux Ubuntu 上运行它)

 import os
 import M2Crypto

def encrypt():

   pubkey = (raw_input('Enter choosen public key:'))
   loadpub = M2Crypto.RSA.load_pub_key (pubkey + '-public.pem')

   encrypt = (raw_input('Enter message to decrypt:'))
   CipherText = loadpub.public_encrypt (encrypt, M2Crypto.RSA.pkcs1_oaep_padding)

   print "Encrypted message:"
   print CipherText.encode ('base64')
   f = open ('encryption.txt', 'w')
   f.write(str(CipherText.encode ('base64'))) #write ciphertext to file
   f.close()

def decrypt():
   privkey = (raw_input('Enter choosen private key:'))
   loadprivkey = M2Crypto.RSA.load_key (privkey + '-private.pem')

   try:
    PlainText = loadprivkey.private_decrypt (CipherText, M2Crypto.RSA.pkcs1_oaep_padding)
   except:
    print "Error: wrong key?"
    PlainText = ""

   if PlainText != "":
    print "Message decrypted by " + privkey + " :"
    print PlainText

 def first():
  print "Press 1 for encryption."
  print "Press 2 for decryption."
  qwe = (raw_input(''))
  if qwe == '1':
    encrypt()
    first()
  elif qwe == '2':
    decrypt()
    first()
  else: 
    print "Please enter a correct number"
    first()

  if __name__ == '__main__':
    first()

【问题讨论】:

  • 你能确认你在上面代码中的缩进是正确的,如果不是,修复它?在 python 中,这可能会产生很大的影响。
  • 最后好像也少了一些代码。
  • @roelofs 顺便说一句,这是正确的。新手在 Stackoverflow 上发帖,所以我不知道它会搞砸。如果在终端中运行脚本,我的代码就可以工作。我也编辑了最后一个括号部分。对不起。 :)
  • 好的,但是您可以检查问题本身的格式。接近结尾处对first()decrupt() 的调用似乎是错误的缩进。
  • @roelofs 伙计,这很尴尬。哈哈。我现在又编辑了。对错误感到抱歉。 :)

标签: python python-2.7 encryption rsa m2crypto


【解决方案1】:

在您的新 decrypt() 函数中,CipherText 成为一个新变量。您需要将您在encrypt() 中写入的文件的内容重新加载到CipherText 中。

以前,该变量仍会包含来自您的加密过程的数据(当加密和解密在同一个函数中执行时)。

【讨论】:

  • 您好!这么晚才回复很抱歉。我试图搜索如何将变量的内容重新加载到其他变量,并且它有效!谢谢!链接到我使用过的解决方案 btw (stackoverflow.com/questions/10139866/…)
  • 只需打开文件并再次读取它(你在现实生活中会做的事情)就可以了:)
猜你喜欢
  • 2012-03-13
  • 2015-03-16
  • 1970-01-01
  • 1970-01-01
  • 2012-07-13
  • 1970-01-01
  • 1970-01-01
  • 2018-09-15
  • 1970-01-01
相关资源
最近更新 更多