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
$
它似乎只对某些字母进行了不正确的加密/解密。到底是怎么回事?
简短的回答--这两行需要修正:
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时,加密和描述一直运行得很好。加密工作正常,它实际上加密了要存储的信息。虽然当解密它时,我得到了一个异常,就像这样:填充块损坏。我已经检查了字符串,并且它与其他设备上的字符串一致(出于测试目的使用相同的密钥),这意味着它完全相同。问题是我