1

私と職場の男は、1) 文字列をごちゃまぜにし、2) 文字列をごちゃまぜにする基本的な Python プログラムを作成しようと決心しました。アイデアは、私たちがお互いに絶対的なゴミを送ることができるというものでした.

私の最初の試み(私はこれがひどいです):

x = ("This is the text")
x1 = x.replace("a","r")
x2 = x1.replace("b","w") 
x3 = x2.replace("c","z")  #Do this for the whole alphabet 
print(x3)                 #both upper and lower case

次に、同じことを行いますが、スクランブルを解除するために前に戻ります....それは機能しますが、それも長いです....

この記事のコード: http://gomputor.wordpress.com/2008/09/27/search-replace-multiple-words-or-characters-with-python/は、次のようにメソッドを作成することを提案しています。

def replace_all(text,dic):
    for i,j in dic.iteritems():
        text = text.replace(i,j)
    return text

reps = {'a':'r','b':'w','c':'z'} #for the whole alphabet again (yawn)
x = ("This is the text")

txt = replace_all(x, reps)
print(txt)

これは機能しますか?iteritems() が他の場所で評判が悪いのを見たことがありますか??

4

6 に答える 6

2

Python 2 で作業している場合、rot13 は組み込みのコーデックです。

>>> 'This is the text'.encode('rot13')
'Guvf vf gur grkg'
>>> 'Guvf vf gur grkg'.decode('rot13')
u'This is the text'

http://docs.python.org/2/library/codecs.html

于 2013-06-28T17:13:20.873 に答える
2

ドラムロールお願いします.....

>>> msg="The quick brown fox jumps over the lazy dog"
>>> cyphertext = ' '.join(w[1:]+'-'+w[0]+'ey' for w in msg.split())
>>> cyphertext
'he-Tey uick-qey rown-bey ox-fey umps-jey ver-oey he-tey azy-ley og-dey'
>>> ' '.join(w[-3] + w[:-4] for w in cyphertext.split())
'The quick brown fox jumps over the lazy dog'

「the」と「quick」の非標準的な扱いと、「ey」と「ay」の接尾辞に関する混乱の可能性があることに注意してください。

于 2013-06-28T16:58:51.853 に答える
0

ここでは、楽しむための基本的で非常に安全でない暗号をいくつか紹介します! ところで、グーグルで調べていたら、基本的な暗号システムに関するノースイースタン大学の素敵なスライドを見つけました。また、私のレタリングの習慣が wiki や他の人と異なっていたら、申し訳ありません。私は自分の習慣に従うだけです。

シフト暗号

シフト暗号には、整数リング (たとえば、通常 0 から 25 までの番号が付けられたアルファベットの文字 AZ であり、通常、これを Z26 と呼びます) と整数キー ( と呼びましょう) がありますk。このリングを構築するために、剰余算術を使用します。つまり、基本的には、モジュラスを と呼びましょうnが 26 の場合、数値は 0 から 25 の間になるだけです。任意の平文文字を と呼びましょうm。、モジュロ、およびビオラに追加kすることにより、それを!暗号文の文字があります。それを と呼びましょう。mnc

数学的に言えば: c ≅ m + k (mod n). そして論理的に、m ≅ c - k (mod n). プログラムでそれを置くには:

def encrypt(m, k, n):
    return (m + k) % n

def decrypt(c, k, n):
    return (c - k) % n

置換暗号

置換暗号は、シフト暗号よりもはるかに解読が困難ですが、英語の多くの特性を利用して簡単に解読できます。必要に応じて Google で検索してくださいfreq.c

置換暗号は同じリングで構成され、平文文字から暗号文文字へのマッピングが行われます。たとえば、A = G, B = Q, C = E, D = Tなどです。これには辞書が本当に便利です: k = {'A' : 'G', 'B' : 'Q', ...}. 復号化する場合は、辞書を逆にすることができます。

def encrypt(m, k):
    return k[m]

def decrypt(c, k):
    for key, value in k.items():
        if value == c: return key

アフィン暗号

この暗号は、剰余乗算をシフト暗号に追加します。鍵はと互いに素a, baなければならないペアになりn、剰余乗法逆数を持つようになります。暗号化するには、(モジュラー的に)乗算mしてからa(モジュラー的に)加算しbます。互いに素である を選択することは明確ではありません。基本的に、とaの最大公約数が 1 であることを確認する必要があります。an

数学的c ≅ (am + b) mod nに: したがってm ≅ a^-1(c - b) mod n. プログラムで:

def encrypt(m, a, b, n):
    return (a*m + b) % 25

そして、このモジュラー乗法逆行列を見つけるための巧妙な解決策を書くつもりはありません...これには拡張ユークリッドアルゴリズムを使用できますが、nが非常に小さい場合は、ブルートフォースする方が簡単です.

def getModularMultiplicativeInverse(a, b, n):
    for x in range(2, n):
        if (a * x) % n == 1:
            return x

def decrypt(c, a, b, n):
    return (getModularMultiplicativeInverse(a, b, n) * (c - b)) % n

これらはほんの一部の例にすぎません...コードではなく、おしゃべりです。

于 2013-06-29T01:39:51.917 に答える