【问题标题】:Using pysqlcipher with SqlAlchemy?将 pysqlcipher 与 SqlAlchemy 一起使用?
【发布时间】:2015-07-30 15:31:46
【问题描述】:

我正在尝试在我的程序中添加一些代码来加密我使用的 sqlite 数据库。我试图提示用户输入密码,如果它不存在,则使用该密码创建一个新的加密数据库,或者解密并加载现有数据库。我似乎找不到很多文档,我不知道该怎么做。我的代码如下:

if encryption is True:
   print("***PYPER TIMESHEET UTILITY***")
   print("\nEnter encryption password below:")
   key = getpass.getpass()
   DB_NAME = ".timesheet.db"
   engine = create_engine('sqlite:///{}'.format(DB_NAME), module=sqlite)

else:

   print("WARNING: Unencrypted session. Install pysqlcipher3 to enable encryption\n")
   DB_NAME = ".timesheet.db?cipher=aes-256-cfb&kdf_iter=64000"
   engine = create_engine('sqlite:///{}'.format(DB_NAME))
   DBSession = sessionmaker(bind=engine)
   session = DBSession()

编辑:忘记提供更多信息。

我试过what's listed at sqlalchemy。在上面的例子中,我意识到我遗漏了一个重要的行,

from pysqlcipher import dbapi 2 as sqlite

Link to full code

【问题讨论】:

  • 你尝试了什么?它是怎么失败的?不要指望这会像 Rent-A-Coder 一样免费。
  • 我不知道 - 这只是一个个人学习项目,我感到很沮丧。我用更多信息更新了帖子。
  • “这不起作用”根本没有信息。它是如何失败的?你期望什么行为?你得到了什么?
  • 它运行,并要求输入密码,但不加密表。它仍然是纯文本。
  • 啊,现在我们到了某个地方。将您的加密会话的DB_NAME 与未加密的一端进行比较。另外,想想你必须在哪里插入key。再次阅读示例。

标签: python python-2.7 sqlalchemy sqlcipher


【解决方案1】:

如示例所述,您忘记将密钥包含到数据库连接中:

'sqlite+pysqlcipher://:testing@/foo.db?cipher=aes-256-cfb&kdf_iter=64000'

(示例中的key为"testing"),获取key后试试这个:

engine = create_engine(
    'sqlite+pysqlcipher://:{0}@/{1}?'
    'cipher=aes-256-cfb&kdf_iter=64000'.format(key, DB_NAME))

【讨论】:

  • 谢谢,@knitti.. 我不是想让你们为我做这件事。我只是想轻推一下。那么,在“testing@/foo.db”中,@ 部分是关键吗?我没有意识到这一点。我不擅长 SQL,所以我错过了。
  • 我看到了,否则我投票赞成结束这个问题。
  • 运行,创建数据库,但无法查询数据库。我会按原样接受这个答案,看看我是否能弄清楚我在查询中遗漏了什么。谢谢你的帮助! (直到明天才能奖励赏金)
  • 您是否从该引擎获取会话对象?
  • 是的,先生/女士。一个要点在这里,显示一个例子.. gist.github.com/minorsecond/93706951d2dbdecf0c44
猜你喜欢
  • 2020-06-14
  • 2015-01-05
  • 2022-01-12
  • 1970-01-01
  • 2019-05-28
  • 2017-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多