当前位置: 首页 > 知识库问答 >
问题:

Vigenere密码破坏了一些

蒋华美
2023-03-14
import sys
if not len(sys.argv) == 4:
    print "Not enough arguments."
    print "Usage: python vigener.py <encrypt/decrypt> 'ciphertext' 'key'"
    sys.exit()
mode = sys.argv[1]
ctext = sys.argv[2]
key = sys.argv[3]
if mode == "encrypt":
    print "Encrypting using vigener cipher..."
elif mode == "decrypt":
    print "Decrypting using vigener cipher..."
else:
    print "Unknown function '"+str(mode)+"'."
    print "Usage: python vigener.py <encrypt/decrypt> 'ciphertext' 'key'"
MAGIC_NUMBER = 96
ctext = ctext.lower()
repeated_key = ( key * (1+len(ctext)/len(key)) )[:len(ctext)]
if mode == "encrypt":
    ctext = ctext.replace(" ", "{")
    nums = [ord(ltr)-MAGIC_NUMBER for ltr in ctext]
    rk_nums = [ord(ltr)-MAGIC_NUMBER for ltr in repeated_key]
    enc_nums = [(num+rk_nums[ nums.index(num) ]) % 27 for num in nums]
    enc_ltrs = [chr(num+MAGIC_NUMBER) for num in enc_nums]
    print "".join(enc_ltrs)
elif mode == "decrypt":
    enc_nums = [ord(ltr)-MAGIC_NUMBER for ltr in ctext]
    rk_nums = [ord(ltr)-MAGIC_NUMBER for ltr in repeated_key]
    dec_nums = [(num-rk_nums[ enc_nums.index(num) ]) for num in enc_nums]
    dec_nums2 = [ (num + 27 if num < 1 else num) for num in dec_nums]
    dec_ltrs = [chr(num+MAGIC_NUMBER) for num in dec_nums2]
    dec_str = "".join(dec_ltrs)
    dec_str = dec_str.replace("{", " ")
    print "".join(dec_str)

下面是我的终端输出:

$ python vigener.py encrypt 'this is confidential' 'secretkey'
Encrypting using vigener cipher...
lmljeljeagsiliyslltq
$ python vigener.py decrypt 'lmljeljeagsiliyslltq' 'secretkey'
Decrypting using vigener cipher...
thts ts conftfenttal
$

它似乎只对某些字母进行了不正确的加密/解密。到底是怎么回事?

共有1个答案

袁泰
2023-03-14

简短的回答--这两行需要修正:

enc_nums = [(x + y) % 27 for (x, y) in zip(nums, rk_nums)]
...
dec_nums = [(x - y) % 27 for (x, y) in zip(enc_nums, rk_nums)]

长答案:您的代码使用list.index()的方式是一个逻辑错误。

假设我们正在进行加密,明文是'banana',key是'secretkey'。在旧代码中,发生的情况如下:

nums = [2, 1, 14, 1, 14, 1]      # 'banana'
rk_nums = [19, 5, 3, 18, 5, 20]  # 'secret'
enc_nums = [
  ( 2 + rk_nums[nums.index( 2)]) % 27,
  ( 1 + rk_nums[nums.index( 1)]) % 27,
  (14 + rk_nums[nums.index(14)]) % 27,
  ( 1 + rk_nums[nums.index( 1)]) % 27,
  (14 + rk_nums[nums.index(14)]) % 27,
  ( 1 + rk_nums[nums.index( 1)]) % 27 ]
enc_nums = [
  ( 2 + rk_nums[0]) % 27,
  ( 1 + rk_nums[1]) % 27,
  (14 + rk_nums[2]) % 27,
  ( 1 + rk_nums[1]) % 27,
  (14 + rk_nums[2]) % 27,
  ( 1 + rk_nums[1]) % 27 ]
 类似资料:
  • 我有一个文本文件,我已经加密使用移位,但我需要加密加密的文本再次,但这一次使用vigenere密码。然后我需要解密加密的文本(首先是vigenere,然后是Shift),但所有的大小写字母以及黑色空格、引号、逗号和句号都需要保持不变。我已经完成了移位、加密和解密,剩下的就是Vigenere了。下面显示的是我加密Vigenere的类,我还没有写解密,因为我被卡在加密步骤。谢谢你。

  • 最近,我一直在尝试教育自己如何使用Vigenere密码进行加密和解密。 我已成功加密该邮件,以下是我为实现加密所采取的步骤: 加密密钥:设置 消息:绝密 步骤1:键的数字表示为18、4、19(使用下表) E:P x k->C是加密函数 D:C x K->P为解密函数 明文:绝密 多谢了。

  • 问题内容: 当我尝试创建此错误时出现: 错误(E_UNKNOWN)::遇到意外错误MongoError:Server.insert(/ Users / oscargallon / Documents / developer / sails / reyesmagoswebpae / node_modules / sails- mongo / node_modules / mongodb / node

  • 我通过anaconda使用tensorflow cpu,在使用命令之后 gpu安装 我收到以下错误信息 File"",第1行,在runfile('C:/用户/g/桌面/大师-项目/高斯ROC示例/神经网络工作Example.py',wdir='C:/用户/g/桌面/大师-项目/高斯ROC示例') 文件“C:\ProgramData\Anaconda3\lib\site packages\spyde

  • 我正试图使Filepond工作,但CSS中的这一行似乎破坏了它-在ul选择器中。 我试着对页面的整个部分进行核化,直到Filepond起作用,将目标锁定在css上,最后在ul{}中找到前面提到的行。我可以把其他的东西都抹掉,只留下那条线,而文件孔仍然坏了,所以我肯定这是问题所在,但我不知道是怎么回事。 我尝试使用Chrome的检查器功能查看运行时页面源代码,但在那里找不到溢出。 然后我使用Note

  • 这是我第一次在这里寻求帮助,我的部门(政府)已经在市场上发布了一些应用程序(Google Play),直到昨天,当我在Nexus上获得Jelly Bean 4.2时,加密和描述一直运行得很好。加密工作正常,它实际上加密了要存储的信息。虽然当解密它时,我得到了一个异常,就像这样:填充块损坏。我已经检查了字符串,并且它与其他设备上的字符串一致(出于测试目的使用相同的密钥),这意味着它完全相同。问题是我