在Python中存储数据
我需要帮助来在一个Python程序中存储数据。我不想让用户接触到这些数据。我查过pickle这个东西,但很多帖子说它“并不安全”。
7 个回答
如果用户在自己的电脑上运行你的程序,你就没办法完全隐藏数据。
运行程序的用户可以访问程序能访问的所有内容,只要知道去哪里找就行。
如果你是面向普通用户的话,建议把数据加密,然后在使用之前的最后一步解密。要记住的是,数据在内存中某个时刻必须解密,这样用户就可能看到它。
你可以尝试阻止程序运行,如果它被篡改过的话,比如通过比较它的(md5)哈希值和一个已知的正常值。你可以看看Chrome OS项目,它就是一个大致做这种检查的系统。
你可以尝试让用户不理解你的程序和写入磁盘的数据,比如通过加密这些数据并隐藏解密的过程,或者通过混淆源代码来实现。
但是,你无法阻止一个下定决心的用户去破坏你的程序和数据,或者中断它。一旦你的程序在运行,我认为它的内存部分是受到保护的,其他进程无法访问。不过,这并不能阻止用户反编译你的程序,试图在运行之前理解它。
旨在保护软件不被其拥有者破坏的安全措施,往往需要依靠一些巧妙的手段。记住,你的巧妙手段也可能被其他聪明的手段绕过。Python被设计成一种开放的语言,所以如果你打算设计一些“狡猾”的程序,可能在其他语言中会更顺利。
你无法阻止用户对数据进行操作。如果他们在自己的系统上运行程序,他们可以随意处理你写入磁盘的数据。你可以用各种方法来混淆数据,甚至可能对其进行加密,但如果他们下定决心,最终还是能找到办法访问这些数据。如果你想要证据,可以看看历史上所有的复制保护和数字版权管理(DRM)系统是如何失败的。有一些解决方案“足够好”,但如果不知道你到底想解决什么问题,就很难提供实际的选择。
...如果你能信任你的数据,使用Pickle是很不错的选择。如果你可以合理地确定你的程序已经把文件写入了磁盘,并且没有恶意程序专门针对你的应用,那么使用是安全的。不过,我绝对不信任通过网络发送的pickle,因为在反序列化的过程中,pickle可能会执行任意命令。