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