gpt4 book ai didi

c++ - 将密码保存在应用程序中

转载 作者:可可西里 更新时间:2023-11-01 18:12:11 29 4
gpt4 key购买 nike

我正在编写一个需要读取用户名和密码并存储它们的应用程序,以便程序以后可以再次读取它们。将其存储在一些变量中听起来像是一个愚蠢的主意。

发现了KDE library,但是它具有太大的依赖关系,而且我还是一个新手程序员,无法理解如何使用它。

常见的密码存储方法是什么,如何解决我的问题?

最佳答案

这取决于您将如何处理这些信息。

如果要使用名称和密码来访问某些外部服务(但是下次运行程序时用户将不得不重新输入信息),则可以将它们存储在某些变量中。明智的做法是将它们加密存储(至少存储密码加密),以使其在核心转储或等效文件中不可见。需要密码时,可以解密,使用它,然后写出解密版本的存储位置(将其覆盖)。 (注意:散列在这种情况下不合适;您需要能够看到密码,并且不能撤消散列。)您可以决定将信息存储在程序外部(在磁盘文件中),但是可以似乎没有必要。请注意,二进制文件仍将包含加密 key (和加密算法),并且加密的数据比程序的平均内容更具随机性,因此,要真正隐藏加密的密码实际上是非常困难的(几乎是不可能的)。但是,您可以使其足够困难,以阻止除最坚定的攻击者之外的所有攻击者。

如果要将用户名和密码存储为永久记录,以便将来可以验证同一用户正在访问该信息,则必须使用程序外部的存储;否则,您将无法访问该用户名。您将使用一个简单的数据库,如果您确保解决任何并发问题,则该数据库可能与纯文本文件一样简单。在这种情况下,将用一些salt哈希密码,并以这样的方式存储用户名,salt和哈希密码,即在给定用户名的情况下,您可以轻松找到其他两个值。

夜行者评论:

I use that password to access some web database, so I need it stored in my application after it is entered for the first time. Are you sure a plain text file is that smart an idea?



这取决于您如何设想“存储在我的应用程序中”。您不能修改可执行文件,或者至少不应该尝试这样做。因此,您需要将其视为存储在与应用程序可执行文件不同的某种文件中的永久记录。另一方面,您的确遇到了与我概述的问题不同的问题–您没有使用信息对用户进行身份验证;您需要按需解密信息以发送到其他应用程序。

首先,这意味着盐和散列无关紧要;您需要撤消屏蔽操作,并且不能撤消哈希。

接下来,您需要确定重新出现后如何识别应用程序的用户。用户将不得不输入一些密码来获取自己的数据,还是仅依赖于操作系统特权或其他方案。

如果用户必须在应用程序中输入一些密码才能开始使用,则可以考虑使用该密码(或它的哈希,不同于用于识别应用程序密码的密码哈希)来加密用户名/密码组合外部应用程序。然后,您可以将用户名和加密密码的Base-64编码版本存储在文本文件中,以供讨论。这与应用程序密码一样安全,该密码以原始的盐腌哈希格式存储。当用户返回时,他们必须提供其应用程序用户名和密码,然后您可以根据存储的值验证该组合,然后使用该密码来解密外部应用程序的密码。

如果用户未输入密码,那么您的操作将受到更多限制。您必须能够从可用信息中以某种方式确定 key ,该 key 可用于将用户的加密密码存储在受限位置的文件中,例如用户主目录下的子目录,而没有组访问或公共(public)访问:
mkdir ~/.appname
chmod 700 ~/.appname
cp /dev/null ~/.appname/app.key
...store the encrypted information...
chmod 500 ~/.appname
chmod 400 ~/.appname/app.key

这不能令人满意,因为,即使您将固定 key 与用户名结合使用,也有可能有人可以算出该 key 的含义(以及加密技术)并对其进行反向工程。 (加密数据的保密性取决于 key ;当 key 可由程序确定时,也可由确定的攻击者确定。到目前为止,最好是依靠用户提供 key (或密码或密码)。密码),则应用程序不会存储攻击者可以脱机使用的任何内容。

关于c++ - 将密码保存在应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1484440/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com