I made a low cipher for my autologin system to encrypt user passwords.
I will make it harder to decrypt with autokey methods etc.
Feel free to use this version if you want.:
class VIGENERE:
def __init__(self):
self.table = []
def CreateTable(self, start_char="a", end_char="z", shift=0):
try:
ord(start_char)
except:
start_char = chr(start_char)
try:
ord(end_char)
except:
end_char = chr(end_char)
start, end = ord(start_char)-(shift+1), ord(end_char)+1
for j in range(end-start):
j += shift
self.table.append([])
for i in range(start+1, end):
self.table[j-shift].append(chr(i+j if i+j < end else i+j-(end-start)))
#print(chr(i+j if i+j < end else i+j-(end-start)), end=" ")
#print("")
def Check(self, value, row):
for j in enumerate(row):
if j[1] == value:
return j[0]
else:
return False
def CreateKey(self, data, key):
long_key = ""
x = -1
#print("Creating long key from '{0}' to '{1}'...".format(key, data))
for k in range(len(data)):
x += 1
try:
long_key += key[x]
except:
x = 0
long_key += key[x]
#print("Created long key : '{0}'".format(long_key))
return long_key
def Encrypt(self, data, key):
encrypted = ""
err = ""
key = self.CreateKey(data, key)
for char in enumerate(data):
col_char_pos = self.Check(char[1], self.table[0])
row_char_pos = self.Check(key[char[0]], self.table[0])
if col_char_pos != None and row_char_pos != None:
#print("Encrypting '{0}' to '{1}'...".format(char[1], self.table[row_char_pos][col_char_pos]))
encrypted += self.table[col_char_pos][row_char_pos]
else:
if not col_char_pos:
err += "This character: '{0}' is not in this row: '{1}'".format(char[1], self.table[0]) + "\n"
if not row_char_pos:
err += "This character: '{0}' is not in this row: '{1}'".format(key[char[0]], self.table[0]) + "\n"
return err
return encrypted
def Decrypt(self, data, key):
decrypted = ""
err = ""
key = self.CreateKey(data, key)
for char in enumerate(data):
col_char_pos = self.Check(char[1], self.table[0])
row_char_pos = self.Check(key[char[0]], self.table[0])
if col_char_pos != None and row_char_pos != None:
#print("Decrypting '{0}' to '{1}'".format(char[1], self.table[0][self.Check(self.table[row_char_pos][self.Check(char[1], self.table[row_char_pos])], self.table[row_char_pos])]))
decrypted += self.table[0][self.Check(self.table[row_char_pos][self.Check(char[1], self.table[row_char_pos])], self.table[row_char_pos])]
else:
if not col_char_pos:
err += "This character: '{0}' is not in this row: '{1}'".format(char[1], self.table[0]) + "\n"
if not row_char_pos:
err += "This character: '{0}' is not in this row: '{1}'".format(key[char[0]], self.table[0]) + "\n"
return err
return decrypted
if __name__ == "__main__":
cipher = VIGENERE()
cipher.CreateTable("a", "z", 70)
encrypted = cipher.Encrypt("abcdyz", "tfkusgfhzenmaue")
decrypted = cipher.Decrypt(encrypted, "tfkusgfhzenmaue")
print(encrypted, decrypted)