Cryptography with Python 3.6



我一直在研究密码学问题。我试图用OrderedDict编写的第一个代码是这样的。

from collections import OrderedDict
alphabet = OrderedDict(
    [(u'a', u'ç'), (u'b', u'd'), (u'c', u'e'), (u'ç', u'f'), (u'd', u'g'), (u'e', u'g'), (u'f', u'h'),
     (u'g', u'i'), (u'g', u'i'), (u'h', u'j'), (u'i', u'k'), (u'i', u'l'), (u'j', u'm'), (u'k', u'n'),
     (u'l', u'o'), (u'm', u'ö'), (u'n', u'p'), (u'o', u'r'), (u'ö', u's'), (u'p', u'ş'), (u'r', u't'),
     (u's', u'u'), (u'ş', u'ü'), (u't', u'v'), (u'u', u'y'), (u'ü', u'z'), (u'v', u'a'),
     (u'y', u'b'), (u'z',u'c'), (9, '')])

text = 'öğtjçdç9dğp9grnvrt9jyuğbkp9içokoğr9pyp9nçtkbğt9iypoğtk9gycğpoğgkikpk9gybgyö9ağ9uğpkp9kekp9drboğ9dkt9urty9
            jçcktoçgkö9içokoğr9gç9uvçmç9dçuoçöçn9kekp9vğn9bçşöçp9iğtğnğp9
                çpçjvçtk9dyogyiyp9ağ9dy9öğvkp9grubçukpk9rnybçdkogkikp9
                    çoirtkvöçoçtk9kuvğgkikp9gkogğ9nrgoçöçp9ağ9dçuoçtkpç9çpçjvçt9
                        ağ9ngvççmnçç9bçcçtçn9nrgoçtkpk9uktnğvkp9kphr9çgğtğukpğ9öçko9çvöçpgkt9jçgk9irtğbkö9uğpk'
out = []
for k, v in alphabet.items():
    for i in list(text):
        if i == v:
            out.append(alphabet[v])
outlast = (''.join(out))
print(outlast)

我无法比较"文本"和字母值的列表。我想"文本的每个元素(i)比较值,如果是'i==值' 将i附加到'out'列表中,但作为键! 我正在使用 PyCharm 2017.2.2 你能帮我吗?

实际上密码学密钥是3。 "土耳其字母表上升3倍"

这是错误的输出:

ffffffffffffffffffffffffffffffffffffffffffffgggggggggggiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijllllllllllmmmmmmööpppppppppppprrrrrrrrrrrrrrrrrrsssssssssssşşşşşşşşşşşşşşşşşşşşşşşşşşşştttttttttttttüvvvvvvvvvvvvvvvvvvvvyyyyyyyyyyyyaaaaaaaaaaabbbbbbbbbbbbççççdddddddddeee

预期输出:

merhaba ben doktor huseyin galileo nun kariyer gunleri duzenledigini duydum ve senin icin boyle bir soru hazirladim galileo da staja baslamak icin tek yapman gereken anahtari buldugun ve bu metin dosyasini okuyabildigin algoritmalari istedigin dilde kodlaman ve baslarina anahtar ve kdtaajkaa yazarak kodlarini sirketin info aderesine mail atmandir hadi goreyim seni

不知道为什么需要 OrderedDict,元组列表效果很好。下面是代码的外观。

alphabet = [(u'a', u'ç'), (u'b', u'd'), (u'c', u'e'), (u'ç', u'f'), (u'd', u'g'), (u'e', u'g'), (u'f', u'h'),
     (u'g', u'i'), (u'g', u'i'), (u'h', u'j'), (u'i', u'k'), (u'i', u'l'), (u'j', u'm'), (u'k', u'n'),
     (u'l', u'o'), (u'm', u'ö'), (u'n', u'p'), (u'o', u'r'), (u'ö', u's'), (u'p', u'ş'), (u'r', u't'),
     (u's', u'u'), (u'ş', u'ü'), (u't', u'v'), (u'u', u'y'), (u'ü', u'z'), (u'v', u'a'),
     (u'y', u'b'), (u'z',u'c'), 
(' ', '9')]    #'9' should be quoted and be the second element of the tuple
text = 'öğtjçdç9dğp9grnvrt9jyuğbkp9içokoğr9pyp9nçtkbğt9iypoğtk9gycğpoğgkikpk9gybgyö9ağ9uğpkp9kekp9drboğ9dkt9urty9
            jçcktoçgkö9içokoğr9gç9uvçmç9dçuoçöçn9kekp9vğn9bçşöçp9iğtğnğp9
                çpçjvçtk9dyogyiyp9ağ9dy9öğvkp9grubçukpk9rnybçdkogkikp9
                    çoirtkvöçoçtk9kuvğgkikp9gkogğ9nrgoçöçp9ağ9dçuoçtkpç9çpçjvçt9
                        ağ9ngvççmnçç9bçcçtçn9nrgoçtkpk9uktnğvkp9kphr9çgğtğukpğ9öçko9çvöçpgkt9jçgk9irtğbkö9uğpk'
out = []
for t in list(text): #outer loop is over the text 
    for v in alphabet:  #and inner loop is to search char in the alphabet
        if t == v[1]:
            out += v[0]
outlast = (''.join(out))
print(outlast)

输出。

mrhaba bn deoktor husyin ggalilo nun kariyr ggunlri deuznldeiggini deuydeum v snin icin boyl bir soru hazirladeim ggalilo dea staja baslamak icin tk yapman ggrkn anahtari buldeuggun v bu mtin deosyasini okuyabildeiggin alggoritmalari istdeiggin deilde kodelaman v baslarina anahtar v kdetaajkaa yazarak kodelarini sirktin info adersin mail atmandeir hadei ggoryim sni

您的alphabet定义中仍然存在一些错误,我将它们留给您修复。

最新更新