Форум сайта python.su
Нужно сделать простенькую без всяких там регулярок шифровку/дешифровку строки.
Так, чтобы алгоритм был многоразовый, то есть строку пользователь сам вводил, но шифровка, например меняла каждый второй символ на предыдущий
типа: “большое спасибо!” на “обьлош епссаби!о” и обратно.
Помогите новичку, пожалуйста!
Офлайн
from __future__ import unicode_literals def crypt(str,n=7): return "".join([chr(ord(x)+n) for x in str]) def decrypt(str,n=7): return "".join([chr(ord(x)-n) for x in str])
Отредактировано Singularity (Ноя. 29, 2013 21:14:32)
Офлайн
для второго питона и юникодной символов надо вместо chr юзать unichr
Офлайн
rockyобычная перестановка символов, наглядно нужно(
без всяких там регулярок
Офлайн
import random s = "большое спасибо!" res = "" for x in s.split(): res += ''.join(random.sample(s,len(s)))
Отредактировано Singularity (Ноя. 29, 2013 22:42:14)
Офлайн
Singularity
а дешифровать обратно можно?
Офлайн
При чём здесь “всякие там регулярки”, может я чего-то не знаю? Что не так с первым примером?
Если используется `random`, то `random.seed(…)` вам в помощь.
Как-то так:
import random import operator as O # константа, единая для шифрования и дешифрования SEED = 42 def crypt(s): assert type(s) is unicode, type(s) random.seed(SEED) return u''.join(random.sample(s, len(s))) def decrypt(d): assert type(d) is unicode, type(d) random.seed(SEED) i = random.sample(range(len(d)), len(d)) return u''.join(map(O.itemgetter(1), sorted(zip(i, d))))
Отредактировано bw (Ноя. 30, 2013 07:01:21)
Офлайн
предложу совсем иной подход
import zlib s='большое спасибо' s_c=zlib.compress(s) s_d=zlib.decompress(s_c) print s_c print s_d
x����¾
�/�\��[.6^�a��q(9�
большое спасибо
Офлайн
Офлайн
Если вдруг, захотите шифровку покруче - юзайте модуль pycrypto. Код всё равно займет пару строчек.
Ещё интересный вариант, но чтобы попроще - использовать табицу преобразования символов.
Например:
shifr = {'a':'-', 'b':1, 'c':'z'} text = 'baba' newtext = '' for symbol in text: newtext += shifr[symbol] print newtext
Офлайн