Decrypt加解密 - 18570580798/study GitHub Wiki
import os import platform import paramiko
class Decrypt:
_start=32
_end=126
_special_string_record=[]
_key="mobile"
def __insert_letter(self, text, i, l):
return text[:i] + l + text[i:]
def __get_special_string_record(self, text):
special_string_record = []
for i in range(len(text)):
l = text[i]
item = []
asc=ord(l)
if asc < self._start or asc > self._end:
item.append(i)
item.append(l)
special_string_record.append(item)
return special_string_record
def __restore_special_string_record(self, text, special_string_record):
for i in special_string_record:
text =self.__insert_letter(text, i[0], i[1])
return text
def __get_vigener_key_table(self, text, key):
trim_text = ''
for l in text:
asc=ord(l)
if asc >= self._start and asc <= self._end:
trim_text += l
total_length = len(trim_text)
key_length = len(key)
quotient = total_length // key_length
reminder = total_length % key_length
key_table = quotient * key + key[:reminder]
return trim_text, key_table
def __vigener_cypher_encrypt(self, text, key=_key, is_encrypt=True):
self._special_string_record = self.__get_special_string_record(text)
trim_text, key_table = self.__get_vigener_key_table(text, key)
result = ''
for i in range(len(trim_text)):
l = trim_text[i]
asc = ord(l) - self._start
asc_key_table = ord(key_table[i]) - self._start
if not is_encrypt:
asc_key_table = -asc_key_table
result += chr((asc + asc_key_table) % (self._end - self._start + 1) + self._start)
return self.__restore_special_string_record(result, self._special_string_record)
def encrypt(self, text):
return self.__vigener_cypher_encrypt(text)
def decrypt(self, text):
return self.__vigener_cypher_encrypt(text, self._key, False)