Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 9, 2017 07:40:55

Kaisa
Зарегистрирован: 2016-11-10
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу помочь разобраться в коде_Шифр Вернама

Доброго времени суток!
Прошу помощи совершенному новичку.
Необходимо реализовать шифр Вернама. Суть: открытый текст представляем в коде, в данном случае 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)

Офлайн

#2 Янв. 9, 2017 20:26:59

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Прошу помочь разобраться в коде_Шифр Вернама

Оформите ваш код в теги code



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Янв. 9, 2017 22:37:46

Kaisa
Зарегистрирован: 2016-11-10
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу помочь разобраться в коде_Шифр Вернама

Лучше файлом.

C кодом разобралась.
Возник вопрос с вводом и выводом шифрованного и дешифрованного текста и ключа.

Отредактировано Kaisa (Янв. 10, 2017 00:12:51)

Прикреплённый файлы:
attachment Feistel.py (767 байт)

Офлайн

#4 Янв. 10, 2017 01:00:13

Kaisa
Зарегистрирован: 2016-11-10
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу помочь разобраться в коде_Шифр Вернама

Попробовала:

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)

Офлайн

#5 Янв. 10, 2017 03:00:03

wallet
Зарегистрирован: 2016-02-21
Сообщения: 50
Репутация: +  2  -
Профиль  

Прошу помочь разобраться в коде_Шифр Вернама

Kaisa

у вас классов нет поудаляйте self`ы

 def CreateKey(self,stroka,key):
def EncodeVernam(self,stroka,key):
def DecodeVernam(self,stroka,key):

Отредактировано wallet (Янв. 10, 2017 03:14:45)

Офлайн

#6 Янв. 10, 2017 03:41:10

Kaisa
Зарегистрирован: 2016-11-10
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу помочь разобраться в коде_Шифр Вернама

wallet
Спасибо!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version