繁体   English   中英

在 python 中存储数据

[英]Storing data in python

我需要帮助在 python 程序中存储数据。 我根本不希望用户能够触摸数据。 我研究过泡菜,但很多帖子都说它“不安全”。

您无法阻止用户触摸数据。 如果他们在他们的系统上运行一个程序,他们可以在你将它们写入磁盘之后对这些位做任何他们想做的事情。 您可以以各种方式混淆数据,甚至可能对其进行加密,但如果他们下定决心,他们仍然可以最终得到它。 如果您想要证明,请查看曾经发明的每个复制保护/DRM 系统的绝对失败。 有一些“足够好”的解决方案,但是,在不知道您实际尝试解决什么问题的情况下,没有好的方法可以开始提供现实的选择。

...如果您可以信任您的数据,Pickle 就很棒。 如果您可以合理地确定您的程序将文件写入磁盘并且恶意程序没有主动针对您的应用程序,那么它是安全的。 但是,我永远不会相信通过网络发送的泡菜——泡菜可能会在反序列化期间执行任意命令。

如果程序被篡改,您可以尝试阻止程序运行,例如通过将其 (md5) hash 与已知的良好值进行比较。 查看 Chrome OS 项目以获取大致执行此操作的系统示例。

可以尝试阻止用户理解您写入磁盘的程序和数据,例如通过对其进行加密和隐藏解密子例程,或通过混淆源代码。

但是您无法阻止坚定的用户破坏您的程序及其数据或中断它。 一旦你的程序运行起来,我认为它的 memory 段受到保护,不会被其他进程访问。 不过,这并不能阻止用户在运行程序之前反编译并尝试理解您的程序。

旨在保护软件免受其所有者侵害的安全性必然依赖于巧妙的黑客攻击。 请记住,您的聪明黑客会受到其他聪明黑客的规避。 Python 被设计为一种开放语言,因此如果您打算设计“偷偷摸摸”的程序,那么使用其他语言可能会更好。

如果用户将在他的机器上运行您的程序,您就无法隐藏数据。

运行程序的用户可以访问程序可以访问的所有内容,只需知道在哪里查看即可。

如果您正在与最终用户打交道,那么只需在使用它之前的最后一点加密数据并解密它。 请记住,在某些时候,必须在 memory 上解密数据,然后用户才能看到它。

If you need to protect the data from tampering (but you are not worried about someone seeing the data), then deploying your project with a custom loader is the way to go such as signet ( http://jamercee.github.io/signet / )。 将您的数据 blob 放入您的脚本中,它的值将被合并到它的 sha1 计算中。 如果有人要修改数据块,加载程序会检测到它是篡改的,并拒绝运行它。

也许你应该看看 CouchDB? 您基本上将数据存储在 JSON 作为文档。 它完美地工作。

http://code.google.com/p/couchdb-python/

您的意思是在 memory 内,而不是在磁盘上? 在 memory 中存储数据并使其在整个程序中易于访问的一个非常简单的解决方案是在程序的根目录中创建一个包含字典的 python 文件。

例如,py/storage.py 将包含:

data = {}

然后你可以这样写:

import storage
storage.data['foo'] = 'bar'

然后在另一个文件中读取相同的值,如下所示:

import storage
foo = storage.data['foo']

存储模块中的数据将可供程序中的所有其他模块访问,但在程序退出时将被擦除。 如果不修改程序,用户将无法触摸它。 如果您需要更多与数据库相关的内容,sqlite 允许您在 memory 中创建数据库,只要程序正在运行,该数据库仅保留在 memory 中

快速浏览一下这个这个 这些库可能会有所帮助。 我不得不指出,一个有经验的计算机软件工程师可能会找到一种方法来绕过任何实施的数据隐藏方法,只需读取您的源文件,解构您的编译代码,甚至可能是可行的蛮力解密(我可能是错误的)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM