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)