【发布时间】:2011-01-01 12:07:45
【问题描述】:
对于我的 iPhone 应用程序,Apple 想知道我的密码加密 (md5) 是大于 64 位对称还是大于 1024 位对称。我一直无法在网上找到它,所以我想知道是否有人知道答案。此外,这是否被认为是一种合适的密码加密技术,还是应该使用不同的加密技术?
感谢您的帮助!
【问题讨论】:
标签: iphone cocoa cryptography passwords md5
对于我的 iPhone 应用程序,Apple 想知道我的密码加密 (md5) 是大于 64 位对称还是大于 1024 位对称。我一直无法在网上找到它,所以我想知道是否有人知道答案。此外,这是否被认为是一种合适的密码加密技术,还是应该使用不同的加密技术?
感谢您的帮助!
【问题讨论】:
标签: iphone cocoa cryptography passwords md5
MD5 是一个散列函数,因此根据定义它是不可逆的。这不是加密(对称或非对称)的情况,它必须是可逆的才能有用。
更准确地说,哈希是单向函数,因为无限数量的输入可以映射到单个输出,因此不可能确定地获得导致给定输出的确切输入。
但是,可能会找到散列到相同输出的不同输入。这称为碰撞。
通常,散列密码而不是存储纯文本(甚至加密)是一个好主意。 (如果使用盐更好)但是,MD5 有已知的弱点(以及有助于发现冲突的大量彩虹表),因此切换到 SHA-1 或 SHA-2 之类的东西是个好主意哈希家族。
但是,要回答您最初的问题,确实没有办法将 MD5 或任何哈希值与任何类型的加密进行比较;它们没有等价物,因为这就像比较苹果和橘子。
【讨论】:
md5 不是真正的对称或非对称加密,因为它在对称或非对称方面都不可逆。这是一种消息摘要(安全哈希)算法。
【讨论】:
这不是加密,而是摘要。如果你不加盐,它就不是特别安全,但他们问错了问题。
您究竟在用 MD5 和密码做什么?这里有标准的做事方式,使用一种总是更好,但如果不知道你想做什么,就很难为你指出相关的标准。
【讨论】:
这根本不是 加密。
【讨论】:
Apple 询问有关使用 MD5 对密码进行哈希处理的问题,以查看它是否需要商务部/工业和安全局的出口授权。
为此目的的答案是,根据 15 CFR 第 774 部分的技术说明,补充 1,ECCN 5A002,段落a.1,它描述了使用加密来保护密码。但是,它可能仍受 ECCN 5A992 控制。
http://www.bis.doc.gov/encryption/ccl5pt2.pdf
其他答案对于提出问题的原因没有帮助。
此外,您可能需要致电 202-482-0707 致电商务部/工业和安全局,询问您的具体申请。
【讨论】:
哈希函数大多数时候是一种压缩数据的方法。它们是单向散列函数,这意味着难以反转(散列函数=消息的摘要,很难找到转换为特定散列值的原始消息)。另一方面,由于不需要任何类型的密钥,因此非常容易实现。
它不是对称或非对称算法。这些算法用于加密而不是散列数据。出于保密原因使用加密,以保护数据免受攻击者试图读取某人的数据。
加密或密码算法需要密钥来执行其任务,而哈希算法不需要任何类型的密钥。散列不是出于保密原因使用,而是出于完整性原因,即使它们没有足够的强度。 MD5 是一种散列函数,因为 MD5 不够强大,所以存在许多其他类型的散列函数
【讨论】:
我认为 MD5 用于更好的安全性......如果我们讲述任何加密或解密算法,它们只是用于将任何纯文本转换为密文......但另一方面,MD5 提供了唯一性将由任何来源(Alice)发送的纯文本......所以我们可以说,为了更好的安全性或在纯文本上提供信封,在使用任何加密算法(对称或非对称)之前应该使用 MD5。
【讨论】:
正如这里的许多其他人所提到的,MD5 不是对称或非对称算法。
相反,它在密码学中属于不同的分支。它是 .Net 框架中可用的最小散列算法之一。它的密钥大小只有 16 字节,应该是 128 位。学习面包和黄油的东西。
所以是的,它大于 64 位,大小只有 8 个字节。
常见的 symm'enc' algs 使用的最大密钥大小为 256 位(Rijndael 托管)。
如果您想查看大于此值的键大小,则可以使用支持可变键大小的 RC2 symm'enc' algs。有什么可以试验的吗?
如果您想要高于 1024 位,那么您需要查看 Asymm'Enc'Algs,例如 RSACryptoServiceProvider 类,我认为它支持高达 16K 的密钥大小?
如果你想使用密码,那么你需要使用 Keyed Hashing Algs,就像任何 HMAC' 东西一样,它们应该是 Keyed Hashing Algorithms 或 MacTripleDes。这些都使用密钥来加密从您提供的数据生成的散列。密钥是通过 RFC2898DerivesBytes 类使用密码和盐值创建的。
*请记住,在 .net 的密码学命名空间中存在唯一的继承层次结构。 所以 MD5 是所有 MD5 派生类都派生自的基础抽象类。 .Net 提供了一个这样的派生类,称为 MD5CryptoServiceProvider 类。它本质上是一个托管包装类,它调用 Windows 非托管 Crypto-Libraries API。 MD5 在 MS 官方教科书中被称为非键散列算法。 *
您有很多选择。
: ) 享受吧!
【讨论】: