加密,解密,没有硬编码密码

时间:2011-06-13 21:50:59

标签: security encryption

我正在尝试找到一种技术来加密和解密程序中的文件,而无需将密码硬编码到程序中,也无需向用户询问。

如果我还能从另一个我正在编写的程序中解密该文件,那将是很好的。

到目前为止,我没有太多运气找到一个看起来足够安全的好技术。

我在c#中写这个,但语言并不重要我只需要有人指出我朝向算法/技术的正确方向。

6 个答案:

答案 0 :(得分:9)

这是一个反复出现的问题,没有安全的实际解决方案。如果您希望能够安全地加密/解密某些内容,则需要一个密钥。您的程序需要知道该密钥。如果存储密钥,则其他人可以找到密钥并使用它来访问加密数据。

可以这样想:如果您的程序应该能够访问加密数据而无需将密钥硬编码到程序中而无需向用户询问密钥,那么为什么任何其他程序都不能这样做并获取加密数据?

答案 1 :(得分:4)

我认为您需要在准备好讨论如何编码之前进一步定义问题。

具体来说,谁应该能够解密数据?你会使用什么技术来防止他人这样做。

就目前情况而言,问题可能就是“我想锁上我不需要钥匙的门。”声明并未真正明确地定义目标。

答案 2 :(得分:0)

在其上放置一个带有密码的Web资源,并让代码请求该Web资源。当然,安全地执行此操作涉及SSL和虚拟主机,但它符合您的需求。

答案 3 :(得分:0)

如果您的程序包含具有自己密码的用户帐户,则可以执行以下操作:

  1. 设置一个用户表,其中包含用于存储程序密码加密副本的列。

  2. 使用用户密码作为密钥,在每个用户的帐户中加密程序密码的副本。

  3. 当用户登录时,系统密码将使用其密码解密,并在其浏览器中存储为会话长度cookie(仅限SSL)。

  4. 通过这种方式,每个用户都可以在后台静默获取系统密码的副本。

    然而,这种方法有一些严重的缺点。

    首先,系统密码不会比WEAKEST用户密码更安全。如果来自Accounting的Bob将其密码设置为“password123”,则可以使用该密码检索系统密码的副本。

    其次,细心的攻击者会注意到cookie包含系统密码,然后你就搞砸了。

    您可以通过在通过SSL访问的第三台计算机上实际存储解密的密码来避免这种情况,然后根据用户的会话ID检索每笔交易;但这意味着如果第三台服务器因任何原因出现故障,整个系统都会关闭。它还会造成性能损失,您的数据服务器的安全性将取决于密码服务器的安全性。

    在完成所有卷积之后,最终没有真正好的解决方案;您只需要提示他们输入密码或将其存储在服务器本身上,并尽可能严密地锁定服务器。

答案 4 :(得分:0)

在密码学中,加密方案的强度是密钥的保密性和强度的函数。这意味着密钥必须是秘密的(即攻击者无法访问)。现在,如果密钥不在用户手中而不在应用程序代码中,那么它在哪里?它有多秘密?

所以你需要重新思考你的任务。也许对密钥进行良好的混淆会驱逐大多数非常熟练的攻击者。混淆密钥的最简单方法是使用程序的一些文本短语作为密钥。这使得使用密钥的操作对于偶尔的潜伏者来说不那么明显(专业人员知道在应用程序中找到加密密钥的不同方法)。

答案 5 :(得分:0)

也许最好的答案可能是通过某种方式生成的密码(例如文件的大小或系统中的任何其他固定值)。因此,您可以在代码中存储获取密码的方式而不是密码本身。