def __init__(self, dbname=None, dbtype=0): """"" 初始化函数 ------------ @param: dbname 数据库名 @param: dbtype 数据库类型 @return: """ "" if dbname == None: console_log(get_line_cur().f_lineno, "None database init.") return elif dbtype < 0 or dbtype >= len(self.__dbtype): console_log(get_line_cur().f_lineno, "Invalid dbtype. Auto set type: 0") dbtype = 0 path = os.path.join(os.getenv("DATAFIGPATH"), self.__dbtype[dbtype]) self.__dbname = os.path.join(path, dbname)
def setdb(self, dbname, dbtype=0): """"" 手动设置规则库名 ------------ @param: dbname 规则库名 @return: 0成功 -1失败 """ "" if dbname == None: console_log(get_line_cur().f_lineno, "None database init.") return -1 elif len(dbtype) < 0 or len(dbtype) >= len(self.__dbtype): console_log(get_line_cur().f_lineno, "Invalid dbtype. Auto set type: 0") dbtype = 0 path = os.path.join(os.getenv("DATAFIGPATH"), self.__dbtype[dbtype]) self.__dbname = os.path.join(path, dbname) return 0
def execute(self, sql, vals=None): """"" 基础执行sql语句 非安全函数 ------------ @param: sql sql语句 @param: vals 占位符下的值,元组形式 @return: 成功返回结果list 失败返回None """ "" # 建立连接 self.__conn__() if self.__dbconn == None: console_log(get_line_cur().f_lineno, "Connet to {} failed.".format(self.__dbname)) return None cur = self.__dbconn.cursor() # 执行sql语句 if type(sql) != str: console_log(get_line_cur().f_lineno, "Sql must be a string.") self.__close__() return None try: if type(vals) != tuple: cur.execute(sql) else: cur.execute(sql, vals) self.__dbconn.commit() except Exception as e: console_log(get_line_cur().f_lineno, e) self.__close__() return None # 返回结果 result = [] for uni in cur: result.append(uni) self.__close__() return result
def __init__(self, key=None): """"" 初始化函数 ------------ @param: key 传入的密钥x,限长16,不够补齐 @return: """ "" # 检查key的合发性 if key == None: return if type(key) != str: console_log(get_line_cur().f_lineno, "Invalid Key. Use default key.") # key长度超过16截断,不够补齐 elif len(key) > 16: self.__key = key[:16].encode('utf-8') else: self.__key = self.__fill_AES__(key, 'b')
def hash(self, text, salt=None): """ 加哈希值 ------------ @param: 哈希加盐 @return: 成功返回哈希值 失败返回None """ if type(text) != str: console_log(get_line_cur().f_lineno, "Invalid text.") return None if salt == None or type(salt) != str: hash_salt = self.__salt else: hash_salt = salt text = text + hash_salt self.__hash.update(text.encode('utf-8')) return self.__hash.hexdigest()
def decrypt_AES(self, text): """"" AES 解密 ------------ @param: text: 密文 @param: encode: 密文是否base64编码 @return: 成功返回明文 失败返回None """ "" if type(text) != str: console_log(get_line_cur().f_lineno, "Invalid text.") return None # 解码 text = base64.b64decode(text.encode('utf-8')) # 解密 cyphor = AES.new(self.__key, self.__mod, self.__key) m_text = cyphor.decrypt(text) return bytes.decode(m_text).rstrip('\0')
def encrypt_AES(self, text): """"" AES加密 ------------ @param: text: 明文 @param: encode: 是否base64编码 @return: 成功返回密文 失败返回None """ "" if type(text) != str: console_log(get_line_cur().f_lineno, "Invalid text.") return None # 加密 cyphor = AES.new(self.__key, self.__mod, self.__key) text = self.__fill_AES__(text) # 返回bytes c_text = cyphor.encrypt(text) # 编码 return base64.b64encode(c_text).decode('utf-8')
def isexist(self, table): """"" 表是否存在 ------------ @param: table 表名 @return: True 存在 False 不存在 """ "" if type(table) != str or table == "": console_log(get_line_cur().f_lineno, "Invalid table name.") return False # 查找表 sql = "SELECT count(*) FROM sqlite_master WHERE type=\"table\" AND name = ?" ret = self.execute(sql, (table, )) if ret == None: return False elif ret[0][0] == 0: return False else: return True
def __fill_AES__(self, text, fill=None): """"" AES加密,字节补充到16的倍数长度 ------------ @param: text 文本 @return: 成功返回文本bytes 失败返回None """ "" if type(text) != str: console_log(get_line_cur().f_lineno, "Invalid text.") return None if type(fill) != str or len(fill) != 1: fill_char = '\0' else: fill_char = fill text = text.encode('utf-8') # 补充文本长度 ext = len(text) % 16 if ext: add = 16 - ext else: add = 0 return text + (fill_char * add).encode('utf-8')
def __conn__(self): try: self.__dbconn = sqlite3.connect(self.__dbname) except Exception as e: console_log(get_line_cur().f_lineno, e)