Форум сайта python.su
Доброго времени суток!
Прошу помощи совершенному новичку.
Необходимо реализовать шифр Вернама. Суть: открытый текст представляем в коде, в данном случае ASCII, секретный ключ представлен символами того же самого алфавита, причем размер ключа должен совпадать с размером открытого текста. Для получения шифротекста открытый текст объединяется с ключем XORом.
На просторах инета найдет код, разобран, чуточку исправлен, но он не работает.
#!/usr/bin/python2.7
# -*- coding: utf-8 -*-
import base64
# Сгенерировать ключ нужной длины
def CreateKey(self,stroka,key):
new_key=“”
count=0
for i in range(len(stroka)):
if (count==len(key)):
count=0
new_key=new_key+key
count+=1
return(new_key)
# Функция получает строку, а возвращает десятичный код этой строки
def ConvertToDec(self,stroka):
myarray=
for i in range(len(stroka)):
code=ord(stroka)
myarray.append(code)
return myarray
# Шифрование строки и ключа
def EncodeVernam(self,stroka,key):
try:
ss=“”
if (len(stroka)==len(key)):
# Получение десятичного представления
dec_stroka=ConvertToDec(stroka)
dec_key=ConvertToDec(key)
for i in range(len(dec_stroka)):
ss=ss+chr(dec_stroka^dec_key)
ss=base64.encodestring(ss)
except:
ss=“Error”
return(ss)
# Дешифрование строки
def DecodeVernam(self,stroka,key):
try:
ss=“”
if (len(stroka)==len(key)):
stroka=base64.decodestring(stroka)
dec_stroka=ConvertToDec(stroka)
dec_key=ConvertToDec(key)
for i in range(len(dec_stroka)):
ss=ss+chr(dec_stroka^dec_key)
ss=base64.decodestring(ss)
except:
ss=“Error”
return(ss)
# Конвертация в base64
stroka=base64.encodestring(stroka)
key=base64.encodestring(key)
new_key=CreateKey(stroka,key)
encode_str=EncodeVernam(stroka,new_key) # Зашифровать строку
print(encode_str)
# Конвертация в base64
key=base64.encodestring(key)
new_key=CreateKey(stroka,key)
decode_str= DecodeVernam(stroka,new_key) # Расшифровать строку
print(decode_str.decode('cp1251'))
Отредактировано Kaisa (Янв. 9, 2017 07:47:33)
Офлайн
Оформите ваш код в теги code
Офлайн
Лучше файлом.
C кодом разобралась.
Возник вопрос с вводом и выводом шифрованного и дешифрованного текста и ключа.
Отредактировано Kaisa (Янв. 10, 2017 00:12:51)
Прикреплённый файлы: Feistel.py (767 байт)
Офлайн
Попробовала:
answer = input(“Choose action:1-code,2-decode,0-exit”)
if(answer==1):
key = raw_input('Enter key: ‘)
stroka=raw_input(“Input text”)
# Конвертация в base64
stroka=base64.encodestring(stroka)
key=base64.encodestring(key)
# Сгенерировать ключ
new_key=CreateKey(stroka,key)
encode_str=EncodeVernam(stroka,new_key) # Зашифровать строку
print(encode_str)
elif(answer==2):
key = raw_input(’Enter key: ‘)
stroka=raw_input(“Input text”)
# Конвертация в base64
key=base64.encodestring(key)
# Сгенерировать ключ
new_key=CreateKey(stroka,key)
decode_str= DecodeVernam(stroka,new_key) # Расшифровать строку
print(decode_str.decode(’cp1251'))
else :
exit
Выходит ошибка:
Traceback (most recent call last):
File “C:\Users\1\workspace\Vigen�re\Vernam.py”, line 63, in <module>
new_key=CreateKey(stroka,key)
TypeError: CreateKey() takes exactly 3 arguments (2 given)
Отредактировано Kaisa (Янв. 10, 2017 01:02:49)
Офлайн
Kaisa
def CreateKey(self,stroka,key): def EncodeVernam(self,stroka,key): def DecodeVernam(self,stroka,key):
Отредактировано wallet (Янв. 10, 2017 03:14:45)
Офлайн
walletСпасибо!
Офлайн