我们要求单向加密。
之间是否有人建议采用更好的方法AES,DSA和Dygest-salt enctyption方法?
我认为Dygest-salt是单向的,而另一种是双向的,但不确定哪种更安全。如果有人能指出这两者之间的性能比较会更好。随意建议另一种算法(特定于单向)。
答案 0 :(得分:5)
“单向加密”一词具有误导性。
AES是对称加密算法的示例(确切地说是block cipher)。谁有密钥加密,也可以解密。您通常不使用分组密码,而是使用mode of operation。
DSA根本不是加密算法。它是一个签名算法(或实际上是一组三个算法:密钥生成,签名,验证),我可以使用我的私钥对一个数据进行签名,每个人都可以使用相应的公钥。我还需要在签名之前对我的数据应用哈希函数。
A(加密)哈希算法(也称为(加密)消息摘要)通常是无密钥功能,并减少(或多或少)任意大小的数据固定大小的散列,这样很难找到导致相同散列的两个不同输入(通常还有一些属性)。这是一种单向函数。
对于密码存储,我们不使用加密,而是使用哈希形式,其中包含随机 salt ,因此具有不同盐的相同密码会产生不同的结果。 salt本身与哈希一起存储,因此可以在以后检查密码。 (可能这就是你所指的 Digest-Salt 。) Also, you should not use a normal fast hash function, but a slow one.
答案 1 :(得分:3)
结帐this article on storing passwords securely。 (对于那些不想点击链接的人,请查看PBKDF2和bcrypt。)
答案 2 :(得分:1)
您正在寻找“单向”加密。您正在寻找性能特征。你正在呼唤2个实现和一个概念(Dygest-salt是概念性的)
您需要提出以下问题:
普通加密是将已知数据转换为等效数据集,可以使用用于原始加密的密钥对其进行解密。大小(in)==大小(out)
散列是将大型文本语料库缩减为小字符串的概念,可以比原始文本更容易地进行比较。通常,这意味着源数据比散列数据大得多。
加密,散列是将大型文本语料缩减为一个小字符串,其中内容的变化导致显着不同的散列,使得难以产生两个导致相同散列的源。
哈希应该比完全加密“更快”,因为我们最终并不关心内容 - 实际上你可以在hashing mode中使用AES,这会留下相同的特征,但最终产品是哈希,而不是加密。
如果你永远不想获得纯文本,那么你应该总是使用哈希函数 - 它们是为相对快速的操作而设计的 - 它们不是免费的,但这就是重点。