• python使用pysqlcipher3对sqlite数据库进行加密


    python对很多项目都需要对sqlite数据库的数据进行加密,最流行的加密方式是使用pysqlcipher3,当前使用的python版本为3.7,本博文是直接使用pysqlcipher3在项目上的应用,使用的是已编译好的pysqlcipher3包,如果你需要pysqlcipher3,在后面有下载地址,下载后,可以直接使用,不需要再进行编译

    界面代码如下

    一、相关代码
    1、连接sqlite数据库文件配置
    1. DB_TYPE_MYSQL = 'MYSQL'
    2. DB_TYPE_SQLITE = 'SQLITE'
    3. DB_TYPE = DB_TYPE_SQLITE # 当前数据类型
    4. # SQLITE_URL = 'sqlite:///D:/dd/aippw.db3' #sqlite连接地址
    5. # SQLITE_URL = 'sqlite+pysqlcipher://:123123@/D:/dd/mydb.db3' #sqlite连接地址,文件生成在d:\dd\目录
    6. SQLITE_URL = 'sqlite+pysqlcipher://:123123@/mydb.db3' #sqlite连接地址,文件生成在当前目录
    2、连接数据库session
    1. class SqlHelper:
    2. engine: Engine = None
    3. session: Session = None
    4. def __init__(self):
    5. Session = sessionManager.get_session(db_type=Constant.DB_TYPE)
    6. self.session = Session()
    7. self.engine = sessionManager.get_engine(db_type=Constant.DB_TYPE)
    8. def add(self, obj):
    9. self.session.add(obj)
    10. self.session.commit()
    11. def delete(self, obj):
    12. self.session.delete(obj)
    13. self.session.commit()
    14. def update(self, obj):
    15. self.session.merge(obj)
    16. self.session.commit()
    17. def upsert(self, model):
    18. self._upsert(model)
    19. self.session.commit()
    20. def query(self, model):
    21. return self.session.query(model)
    3、界面代码
    1. class UserPage(object):
    2. def __init__(self):
    3. self.root = tkinter.Tk()
    4. self.root.title("用户管理")
    5. Utils.set_screen(self.root, 450, 200)
    6. self.page = tkinter.Frame(self.root, width=850, height=650)
    7. self.page.pack(side='top')
    8. self.user = User()
    9. self.user.userId = tkinter.StringVar()
    10. self.user.username = tkinter.StringVar()
    11. self.user.phone = tkinter.StringVar()
    12. self.msg = tkinter.StringVar()
    13. self.userName_find = tkinter.StringVar()
    14. self.userName_find.set('请输入用户名称')
    15. tkinter.Label(self.page, text='用户名称:', font=('Terminal', 12)).grid(row=1, column=1)
    16. tkinter.Entry(self.page, textvariable=self.user.username, width=20).grid(row=1, column=2, columnspan=2)
    17. tkinter.Label(self.page, text='用户电话:', font=('Terminal', 12)).grid(row=2, column=1, pady=5)
    18. tkinter.Entry(self.page, textvariable=self.user.phone, width=20).grid(row=2, column=2, columnspan=2)
    19. tkinter.Button(self.page, text='保存', font=('Terminal', 12), command=self.save).grid(row=3, column=2,)
    20. tkinter.Entry(self.page, textvariable=self.userName_find, width=20).grid(row=5, column=1, columnspan=4,pady=30)
    21. tkinter.Button(self.page, text='查询', font=('Terminal', 12), command=self.get_User).grid(row=5, column=4,columnspan=1)
    22. tkinter.Label(self.page, textvariable=self.msg, font=('Terminal', 12)).grid(row=6, column=1)
    23. self.root.mainloop()
    24. # 查询基础配置
    25. def get_User(self):
    26. session = SqlHelper().session
    27. results = session.query(User).where(User.username==self.userName_find.get()).all()
    28. string = ''
    29. for row in results:
    30. string = ' '+ '用户ID:' + str(row.userId) + ' 用户名称:' + row.username + ' 电话:' + row.phone
    31. messagebox.showinfo('提示信息', string)
    32. session.close()
    33. def save(self):
    34. sql_helper = SqlHelper()
    35. saveUser = User()
    36. saveUser.username = self.user.username.get();
    37. saveUser.phone = self.user.phone.get()
    38. sql_helper.update(saveUser)
    39. messagebox.showinfo('提示信息','保存成功')
    4、main方法
    1. if __name__ == '__main__':
    2. print('sqlalchemy版本:', sqlalchemy.__version__)
    3. Utils.init_sys_user
    4. UserPage()
    5. print_hi('系统启动完成')
    二、测试
    1、运行main

    2、输入数据

    这个时候,会在工程目录生,mydb.db3的sqlite文件,此文件已加密,密码为123123,后面会用

    3、查询,在查询框,输入 张三,正确反回数据

    三、用工具查看mydb.db3数据库文件

    1、安装DB.Browser.for.SQLite-3.12.2-win64.msi这个软件(最后下载地址里面有),安装后桌面上有 DB Browser (SQLCipher) 这个图标,双击打开

    2、打开数据库

    里面有,我们刚刚创建的表,以及里面插入了数据

    四:下载

    链接:https://pan.baidu.com/s/1v0bwhFiu4J8kwr5ThafKZw?pwd=5xdi 
    提取码:5xdi

  • 相关阅读:
    SpringSecurity - 启动流程分析(四)
    多线程环境下的单例模式
    MySQL之查询性能优化(四)
    SpringBoot使用EasyExcel类一键导出数据库数据生成Excel,导入Excle生成List<>数据(作者直接给demo项目)
    湖南省2022年成人高考招生全国统一考试考生须知
    Git 传文件到github
    mysql字段类型与oracle字段类型对应关系
    第五十七章 学习常用技能 - 查看Globals
    使用Jmeter虚拟化table失败
    Apache开启SSL(https)访问网站配置
  • 原文地址:https://blog.csdn.net/hekf2010/article/details/134265104