#! /usr/bin/env python3
from fractions import gcd
class CharRow():
__row = ''
records = []
def __init__(self, row):
self.__row = row
def append(self, item):
self.records = self.records + [item]
@property
def recstr(self):
return ''.join(self.records)
def __str__(self):
return self.__row
def __eq__(self, other):
return str(self) == str(other)
def __ne__(self, other):
return str(self) != str(other)
def __gt__(self, other):
return str(self) > str(other)
def __lt__(self, other):
return str(self) < str(other)
class Dice():
__text = ''
def __init__(self, text):
self.__text = text
@property
def text(self):
return self.__text
def single(self, keyword):
return self.__dice(keyword, self.text)
def __dice(self, keyword, text):
"""
Perform dice encryption
"""
kwlist = [CharRow(c) for c in keyword]
i = 0
for c in text:
if not i < len(kwlist):
i = 0
kwlist[i].append(c)
i += 1
return ''.join([t.recstr for t in sorted(kwlist)])
def double(self, keyword1, keyword2):
"""
Perform double encryption
"""
if gcd(len(keyword1), len(keyword2)) != 1:
print('WARNING: Insecure keys')
return self.__dice(keyword2, self.single(keyword1))
text = input('Text: ')
kw1 = input('Keyword 1: ')
kw2 = input('Keyword 2: ')
d = Dice(text)
single = d.single(kw1)
print('Single encoding: ' + single)
single = d.double(kw1, kw2)
print('Double encoding: ' + single)