假设我有一些数据和密码,我希望以只有使用正确密码才能恢复数据的方式加密数据。
这在技术上如何运作(即如何实现)?我经常听到人们使用bithifting进行加密,但是你如何根据密码进行加密?基于密码的加密如何工作?
一个例子是Mac OS X FileVault
感谢。
如果您提供示例代码,最好是C,Objective-C或伪代码。
答案 0 :(得分:19)
对于(对称)加密,您需要一个用于加密和解密的密钥。
通常,您提供的密码将用作此密钥的来源。出于各种安全原因,密码不是(并且通常不能,由于所使用的密码的要求)直接用作密钥。相反, key derivation function 用于从密码生成密钥。
这就是加密密码必须长且相当随机的原因:否则生成的密钥只会来自可能密钥的一小部分,然后可以简单地尝试这些密钥,从而强制加密。
关于代码示例,有几种可能性:
这取决于您想要学习的内容。
答案 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