Python 如何安全地保存解密的临时数据?

Python 如何安全地保存解密的临时数据?,python,security,sqlite,gnupg,Python,Security,Sqlite,Gnupg,出于兴趣,我计划使用python编写一个密码管理脚本 我的大致想法是将帐户名和密码对存储在一个由GPG加密的SQlite数据库文件中 问题来了:如何安全地为SQlite库提供临时解密的数据库文件?因为将原始文件放在隐藏路径中并不能保证安全性。还是应该将解密后的数据保存在内存中?怎么做 我知道有一个第三方框架用于加密SQlite数据库。但我对它的实际工作原理相当好奇,因为在这样的框架中处理中间数据似乎是不可避免的。是的,将数据库保存在内存中似乎是一个可行的解决方案。让这有点困难的是,SQLite可

出于兴趣,我计划使用python编写一个密码管理脚本

我的大致想法是将帐户名和密码对存储在一个由GPG加密的SQlite数据库文件中

问题来了:如何安全地为SQlite库提供临时解密的数据库文件?因为将原始文件放在隐藏路径中并不能保证安全性。还是应该将解密后的数据保存在内存中?怎么做


我知道有一个第三方框架用于加密SQlite数据库。但我对它的实际工作原理相当好奇,因为在这样的框架中处理中间数据似乎是不可避免的。

是的,将数据库保存在内存中似乎是一个可行的解决方案。让这有点困难的是,SQLite可以轻松地在内存中创建数据库(使用
:memory:
而不是filename),但让它加载内存中已有的数据库有点麻烦:您必须实现自己的
SQLite\u vfs
。我见过,但它已经很旧了,我不确定它是否还能用。此外,从Python使用它还需要额外的努力。
不过,将整个解密数据库始终保存在内存中并不十分安全,因为您的内存可能偶尔会被分页到磁盘。所以,记住这一点


一个更简单的解决方案是拥有一个普通的数据库,但在存储数据之前对所有数据进行加密。这样,您只需在内存中保存密码和少量解密数据。

是的,将数据库保存在内存中似乎是一个可行的解决方案。让这有点困难的是,SQLite可以轻松地在内存中创建数据库(使用
:memory:
而不是filename),但让它加载内存中已有的数据库有点麻烦:您必须实现自己的
SQLite\u vfs
。我见过,但它已经很旧了,我不确定它是否还能用。此外,从Python使用它还需要额外的努力。
不过,将整个解密数据库始终保存在内存中并不十分安全,因为您的内存可能偶尔会被分页到磁盘。所以,记住这一点


一个更简单的解决方案是拥有一个普通的数据库,但在存储数据之前对所有数据进行加密。这样,您只需在内存中保存密码和小块解密数据。

我可以这样理解吗:处理大块解密数据比处理一个大文件要好得多?我想知道成熟的钥匙圈程序是如何做到这一点的。@ymfoi没有。我想处理区块会容易得多。我不能说一种方法比另一种好得多。@ymfoi据我所知,GnomeKeyring使用了前者,但它使用自己的二进制格式,而不是SQLite。使用您自己的二进制格式,您不必与SQLite抗争,因此一切都会变得更简单。我可以这样理解它:处理解密数据块比处理大型文件要好得多吗?我想知道成熟的钥匙圈程序是如何做到这一点的。@ymfoi没有。我想处理区块会容易得多。我不能说一种方法比另一种好得多。@ymfoi据我所知,GnomeKeyring使用了前者,但它使用自己的二进制格式,而不是SQLite。使用您自己的二进制格式,您不必与SQLite抗衡,因此一切都会变得更简单。