Esempio n. 1
0
 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)
Esempio n. 2
0
 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
Esempio n. 3
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
Esempio n. 4
0
 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')
Esempio n. 5
0
    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()
Esempio n. 6
0
    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')
Esempio n. 7
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')
Esempio n. 8
0
    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
Esempio n. 9
0
    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')
Esempio n. 10
0
 def __conn__(self):
     try:
         self.__dbconn = sqlite3.connect(self.__dbname)
     except Exception as e:
         console_log(get_line_cur().f_lineno, e)