基于密码的加密技术如何工作?

时间:2010-11-02 19:31:52

标签: passwords encryption

假设我有一些数据和密码,我希望以只有使用正确密码才能恢复数据的方式加密数据。

这在技术上如何运作(即如何实现)?我经常听到人们使用bithifting进行加密,但是你如何根据密码进行加密?基于密码的加密如何工作?

一个例子是Mac OS X FileVault

感谢。


如果您提供示例代码,最好是C,Objective-C或伪代码。

6 个答案:

答案 0 :(得分:19)

对于(对称)加密,您需要一个用于加密和解密的密钥。

通常,您提供的密码将用作此密钥的来源。出于各种安全原因,密码不是(并且通常不能,由于所使用的密码的要求)直接用作密钥。相反, key derivation function 用于从密码生成密钥。

这就是加密密码必须长且相当随机的原因:否则生成的密钥只会来自可能密钥的一小部分,然后可以简单地尝试这些密钥,从而强制加密。

关于代码示例,有几种可能性:

  • 查看加密库的源代码,例如OpenSSL
  • 查看实现加密的程序的源代码,例如GnuPG
  • google一些简单加密算法或密钥派生函数的示例源代码,并尝试理解它

这取决于您想要学习的内容。

答案 1 :(得分:6)

您需要查看其他资源以获得深入解释,因为这个问题非常广泛。

一般来说:你使用密码作为加密密钥的“种子”,正如sleske指出的那样。然后使用此密钥应用双向加密算法(即可以应用一次加密并再次解密的算法)。当您将算法应用于某个数据时,它会以这样的方式加密,即如果不使用相同的密钥,您再也无法将数据重新取出,并且如果没有相同的密码,您实际上无法生成相同的密钥。种子。

答案 2 :(得分:2)

如果您对加密感兴趣,请阅读Bruce Schneier的Applied Cryptography。优秀的阅读,很多例子。它经历了许多不同的加密类型。

答案 3 :(得分:0)

一种简单的方法,但不完全安全,是将每个字节旋转一个由密码确定的数字。您可以使用字符串中的哈希码,也可以计算字符数或其他数字。

您可能正在考虑的是公钥加密。这是一个文档的链接,它会告诉你数学 - 你必须自己计算实现细节,但是一旦理解了数学就不那么难了。 http://mathaware.org/mam/06/Kaliski.pdf

答案 4 :(得分:0)

大多数分组密码的基本构建块是一个名为Feistel Network的构造。这很容易理解。

流密码甚至更简单 - 它们本质上只是伪随机数生成器,虽然具有一些重要的安全属性,其中初始内部状态是从密钥派生的。

答案 5 :(得分:0)

基于密码的加密是对称的。除密码外,输入通常还包含一个盐。 FooBabel有一个很酷的应用程序,你可以玩这个...目前他们硬编码Salt为八个字节(零到七)的数组,以简化。我提出请求,看看他们让用户输入盐。无论如何,这里是 - PBECrypto