Md5加密是对称的还是不对称的?

时间:2010-01-05 02:22:52

标签: iphone cocoa cryptography passwords md5

对于我的iPhone应用程序,Apple想知道我的密码加密(md5)是否大于64位对称或大于1024位对称。我无法在网上找到它,所以我想知道是否有人知道答案。另外,这被认为是适当的密码加密技术,还是我应该使用不同的东西?

感谢您的帮助!

8 个答案:

答案 0 :(得分:32)

MD5是一种散列函数,因此根据定义它不可逆。加密(对称或非对称)不是这种情况,必须是可逆的才有用。

更准确地说,散列是单向函数,因为无限数量的输入可以映射到单个输出,因此无法确定地获得确切的输入,从而产生给定的输出。 / p>

但是,可以找到散列到同一输出的不同输入。这称为碰撞

通常,散列密码而不是存储纯文本(甚至加密)是个好主意。 (如果使用盐则更好)但是,MD5具有已知的弱点(以及有助于发现碰撞的大量彩虹表集合),因此切换到SHA-1或其中一个SHA-2是个好主意。哈希家族。

但是,要回答您的原始问题,实际上无法将MD5或任何哈希与任何类型的加密进行比较;他们没有等价物,因为它就像比较苹果和橘子。

答案 1 :(得分:7)

md5实际上不是对称或非对称加密,因为它不对称或不对称地是可逆的。这是一个消息摘要(安全散列)算法。

答案 2 :(得分:5)

这不是加密,而是摘要。如果你不加盐,它不是特别安全,但他们问你错误的问题。

你到底在用MD5和密码做什么?这里有标准的做事方式,使用一个方法总是更好,但不知道你想做什么,很难指出你的相关标准。

答案 3 :(得分:2)

根本不是 NOT 加密。

答案 4 :(得分:2)

Apple提出了关于使用MD5进行散列密码的问题,以确定是否需要授权从商务部/工业和安全局出口。

为此目的的答案是,根据15 CFR part 774,Supplement 1,ECCN 5A002,Section的技术说明,使用MD5进行密码保护不会被控制为强加密(如超过64位的对称算法) a.1,描述了使用加密进行密码保护。但是,它仍然可以在ECCN 5A992下进行控制。

http://www.bis.doc.gov/encryption/ccl5pt2.pdf

其他答案对于提出问题的原因没有帮助。

另外,您可以致电202-482-0707联系商务部/工业和安全局,询问您的具体申请。

答案 5 :(得分:1)

哈希函数大多数时候都是压缩数据的一种方法。它们是单向散列函数,意味着难以逆转(使用散列函数=消息的摘要,很难找到转换为特定散列值的原始消息)。另一方面,由于不需要任何类型的密钥,因此非常容易实现。

它不是对称或非对称算法。这些算法用于加密而不是哈希数据。加密用于保密原因,以保护数据免受攻击者的攻击。

加密或密码算法需要密钥才能执行其任务,而哈希则不需要任何密钥。哈希不是出于保密原因而使用,但出于诚信原因,即使它们没有足够的力量。 MD5是一种散列函数,其中存在许多其他函数,因为MD5不够强大

答案 6 :(得分:0)

我认为MD5用于提高安全性....如果我们讲述任何加密或解密算法,它们只是用于将任何纯文本转换为密文......但另一方面MD5提供了一个唯一性任何来源(Alice)发送的纯文本...所以我们可以说为了更好的安全性或在纯文本上提供信封,应该在使用任何加密算法(对称或非对称)之前使用MD5。

答案 7 :(得分:0)

正如这里众多其他人提到的那样,MD5不是对称算法或非对称算法。

相反,它在密码学中一起处于不同的分支之下。它是.Net框架中最小的散列算法之一。它的密钥只有16字节,应该是128位。你学习面包和黄油的东西。

所以是的,它大于64位,大小只有8字节。

常见的symm'enc'algs使用的最大密钥大小为256bit(Rijndael Managed)。

如果您想要查看大于此值的密钥,那么您可以使用支持可变密钥大小的RC2 symm'enc'algs。你可以试验一下吗?

如果你想要高于1024bit,那么你需要查看Asymm'Enc'Algs,比如RSACryptoServiceProvider类,我认为它支持的密钥大小高达16K吗?

如果你想使用密码,那么你需要使用Keyed Hashing Algs,就像HMAC的东西一样,它们应该是Keyed Hashing Algorithms或MacTripleDes。这些都使用密钥来加密从您提供的数据生成的哈希。密钥是通过RFC2898DerivesBytes类使用密码和salt值创建的。 < - 不要忘记RC2,Rijndael,AES,DES等都可以设置为使用密码来帮助派生密钥。如果您认为本段的开头句有点误导。所以我添加这个只是为了确保散列不是你需要的东西。

*请记住.net的密码学名称空间中存在独特的继承层次结构。 所以MD5是所有MD5派生类派生的基础抽象类。 .Net提供了一个名为MD5CryptoServiceProvider类的派生类。这本质上是一个托管的包装类,可以调用windows非托管的Crypto-Libraries API。 MD5在MS官方教科书中称为非键控哈希算法。 *

有很多选择。

:)享受!