首页 > 数据库 >Python3 使用 sqlcipher 来增强本地数据的安全性

Python3 使用 sqlcipher 来增强本地数据的安全性

时间:2024-03-18 16:22:06浏览次数:30  
标签:Files pysqlcipher3 lib OpenSSL sqlcipher 安装 安全性 Python3

使用 sqlcipher 来增强本地数据的安全性

本文是基于 系列文章 PyQt5+SQLAlchemy做登录注册页 的补充,并不单独放在系列文中,主要讲的是,使用 sqlcipher 来保存本地密码,这比直接使用 SQLite 更安全

关于 sqlcipher,官方介绍原文如下:

SQLCipher is a standalone fork of the SQLite database library that adds 256 bit AES encryption of database files and other security features like:

  • on-the-fly encryption
  • tamper detection
  • memory sanitization
  • strong key derivation

安装环境

  • windows 10 x64
  • Python 3.8.10 64bit

第1步 安装sqlcipher

安装 sqlcipher,安装比较繁琐,你也可以使用我这里提供的文件,但是最好自己编译,安装编译依照这篇回答,点击前往

步骤描述如下:

  1. 安装 ActiveTcl 8.6,需要用到其中的 tclsh.exe
    安装后,需要添加到系统环境变量:path=C:\ActiveTcl\bin
    image

  2. 安装Microsoft Visual Studio 2017 只安装 C++ 桌面开发
    image

  3. 安装 Win64 OpenSSL v1.1.1w 除了安装路径,其他都选项不做修改
    安装后需要添加系统环境变量:
    x64 添加OPENSSL_CONF=C:\Program Files\OpenSSL-Win64\bin\openssl.cfg
    x32 添加OPENSSL_CONF=C:\Program Files(x86)\OpenSSL-Win32\bin\openssl.cfg
    image

  4. 对安装的OpenSSL 做一些修改,下面操作全在文件夹 D:\Program Files\OpenSSL-Win64\lib中执行
    复制 libcrypto.deflibcrypto.lib 为副本,并修改副本名称为libeay32.deflibeay32.lib
    复制 libssl.deflibssl.lib 为副本,并修改副本名称为ssleay32.defssleay32.lib
    image

  5. 复制文件夹 D:\Program Files\OpenSSL-Win64\include\opensslD:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.33519\include,前一个路径是 OpenSSL 安装路径,后一个路径是Visual Studio 2017安装路径

  6. 下载 sqlcipher,可直接克隆,或者下载压缩包

  7. 修改 sqlcipher 的编译文件 Makefile.msc,修改内容如下

    第1句,修改下面这句:

    TCC = $(TCC) -DSQLITE_TEMP_STORE=1
    

    修改为下面,其中的路径为 OpenSSL 安装路径:

    TCC = $(TCC) -DSQLITE_TEMP_STORE=2 -DSQLITE_HAS_CODEC -I"D:\Program Files\OpenSSL-Win64\include"
    

    第2句,修改下面这里:

    # If ICU support is enabled, add the linker options for it.
    #
    !IF $(USE_ICU)!=0
    LTLIBPATHS = $(LTLIBPATHS) /LIBPATH:$(ICULIBDIR)
    LTLIBS = $(LTLIBS) $(LIBICU)
    !ENDIF
    # <</mark>>
    # You should not have to change anything below this line
    

    修改为下面,其中的路径为 OpenSSL 安装路径:

    # If ICU support is enabled, add the linker options for it.
    #
    !IF $(USE_ICU)!=0
    LTLIBPATHS = $(LTLIBPATHS) /LIBPATH:$(ICULIBDIR)
    LTLIBS = $(LTLIBS) $(LIBICU)
    !ENDIF
    # <</mark>>
    
    LTLIBPATHS = $(LTLIBPATHS) /LIBPATH:"D:\Program Files\OpenSSL-Win64\lib\VC\static"
    LTLIBS = $(LTLIBS) libcrypto64MT.lib libssl64MT.lib ws2_32.lib shell32.lib advapi32.lib gdi32.lib user32.lib crypt32.lib
    
    # You should not have to change anything below this line
    
  8. 打开 Visual Studio 的 x64工具,执行下的操作: image,此步执行过程可能会报错,但是只要在 sqlcipher文件夹中生成sqlite3.csqlite3.h就行

    # 切换到sqlcipher
    cd /d F:\Projects\sqlcipher
    
    # 编译
    nmake /f Makefile.msc clean
    nmake /f Makefile.msc
    

    image

  9. 下载pysqlcipher3,可直接克隆,或者下载压缩包
    /pysqlcipher3 中创建文件夹 amalgamation,然后将第8步中生成的sqlite3.csqlite3.h复制到 amalgamation中。
    然后在/pysqlcipher3/src/python3中,创建一个文件夹sqlcipher

  10. 下载sqlite-amalgamation,我这里使用的是这个sqlite-amalgamation-3340100,下载解压后,复制其中的4个文件shell.c sqlite3.c sqlite.h sqliteext.h,复制到/pysqlcipher3/src/python3/sqlcipher

  11. 继续在 Visual Studio 的 x64工具,执行下的操作: image,我这里使用的是 Python3.8.10 64bit

    # 切换到 pysqlcipher3
    cd F:\Projects\pysqlcipher3
    
    python setup.py clean
    python setup.py build_amalgamation
    
    python setup.py install
    

    python setup.py build_amalgamation执行后截图
    image

    python setup.py install执行后截图
    image

第2步,测试安装

使用下列代码测试

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""
@ File        : test.py
@ Version     : V1.0.0
@ Description :
"""
from pysqlcipher3 import dbapi2 as sqlite

conn1 = sqlite.connect("test.db")
c1 = conn1.cursor()
c1.execute("PRAGMA key='123456'")
c1.execute("""create table stocks (date text, trans text, symbol text, qty real, price real)""")
c1.execute("""insert into stocks values ('2006-01-05','BUY','RHAT',100,35.14)""")
conn1.commit()
c1.close()

conn2 = sqlite.connect("test.db")
c2 = conn2.cursor()
c2.execute("PRAGMA key='123456'")
print(c2.execute("""select * from stocks""").fetchall())
c2.close()

使用最新版本的DB.Browser.for.SQLite 3.12.2查看
image

参考文章

Install pysqlcipher3 windows
编译Windows 64bit平台pysqlcipher3 for Python3.7

本文章的原文地址
GitHub主页

标签:Files,pysqlcipher3,lib,OpenSSL,sqlcipher,安装,安全性,Python3
From: https://www.cnblogs.com/yqbaowo/p/18043628

相关文章

  • 【10】Python3之使用openpyxl,操纵表格
    使用openpyxl,读取Excel文件fromopenpyxlimportload_workbook#加载工作簿,后面写Excel的路径wb=load_workbook(r"C:\Users\以权天下\Desktop\月光.xlsx")#选择活动工作表或特定工作表wb.activesheet=wb['2024']#2024是表名Excel_data=sheet['A2'].value#A2是单元格......
  • CentOS 同时安装多个版本的Python3
    1、背景已安装了Python3.6.4,需要再安装Python3.9版本 2、操作步骤(1)寻找当前Python3.9版本最新稳定版的子版本通过官网查找,目前为3.9.18,下载到本地文件:Python-3.9.18.tgz(2)通过XFTP软件,将文件上传到CentOS的/usr/local/python3.9.18 目录(3)更新系统,确保系统是最......
  • Python3.0+的安装(全 且 清晰)
    言的使用源于系统环境的安装和配置。Python也无例外;这里,为了少走弯路简便傻瓜式搭建开发环境,整理了以下内容,希望能帮助有所需要的开发者。版本选择点击官网选择对应的版本下载资源下载资源版本选择3.8+以上版本为了解决不同版本的Python解释器在开发和使用时可能会出现的不......
  • Python3 stdout read readline 阻塞情况简单说明
         Python3stdoutreadreadline阻塞情况简单说明 执行命令行,并获取返回结果。代码1:process=subprocess.Popen(cmd_string,stdout=subprocess.PIPE,\      universal_newlines=True,\      stderr=subprocess.PIPE,\    ......
  • 如何确保华企盾DSC数据防泄密系统的安全性和可靠性?
    华企盾DSC数据防泄密系统采用一系列技术和措施以保证系统的安全性和可靠性:文件防冒充:DSC支持3种识别方式:校验值、数字签名、进程属性值,严格防止非法进程冒充合法进程进行文件的窃取或通过网络发送出去。当数字签名或校验值遭到破坏或者修改时,系统自动判断为非加密进程,则无法读......
  • 4.MAC平台Python的下载、安装(含Python2.7+Python3.12双版本环境变量配置)——《跟老吕
    4.MAC平台Python的下载、安装(含Python2.7+Python3.12双版本环境变量配置)——《跟老吕学Python编程》)——跟老吕学Python编程一、下载MAC版Python1.Python官网2.MAC版Python下载网址二、在MAC安装Python1.在MAC安装Python2.阅读Python重要信息3.同意Python许可4.确认同意......
  • 聊聊CWE 4.14 与 ISA/IEC 62443中,如何保障工业软件的安全性
    本文分享自华为云社区《CWE4.14与ISA/IEC62443》,作者:Uncle_Tom。1.序言随着5G的应用,物联的网发展,越来越多的自动化控制系统、云服务在工业控制系统被广泛使用。为了实现生产自动化,很多企业都引入了由PLC(可编程逻辑控制器)控制的自动化生产设备和相关的自动化生产系统。用......
  • python3实现xmind用例转excel
    1importxmindparser2importxlwt,xlrd3fromxlutils.copyimportcopy4fromxlwtimportWorksheet5fromxmindparserimportxmind_to_dict6importdatetime7importos8importre9importtraceback1011#当前时间戳12a=datetim......
  • 在数据库中使用UUID+自增长ID混合方式,同时满足系统安全性和查询效率
    在数据库中使用UUID+自增长ID混合方式,可以达到较好的安全性和查询效率。具体的实现方式如下:在数据库表中创建两个字段,一个是UUID字段作为全局唯一主键,另一个是自增长的整型字段作为局部有序键。例如:sql:CREATETABLE`table_name`(`uuid`CHAR(36)NOTNULL,--UUID......
  • 简述Kubernetes如何保证集群的安全性
    1)基础设施方面:保证容器与其所在宿主机的隔离;2)用户权限:划分普通用户和管理员的角色;3)APIServer的认证授权:Kubernetes集群中所有资源的访问和变更都是通过KubernetesAPIServer来实现的,因此需要建议采用更安全的HTTPS或Token来识别和认证客户端身份(Authentication),以及随后访问权......