【问题标题】:Is Md5 Encryption Symmetric or Asymmetric?Md5 加密是对称的还是非对称的?
【发布时间】:2011-01-01 12:07:45
【问题描述】:

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

感谢您的帮助!

【问题讨论】:

    标签: iphone cocoa cryptography passwords md5


    【解决方案1】:

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

    更准确地说,哈希是单向函数,因为无限数量的输入可以映射到单个输出,因此不可能确定地获得导致给定输出的确切输入。

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

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

    但是,要回答您最初的问题,确实没有办法将 MD5 或任何哈希值与任何类型的加密进行比较;它们没有等价物,因为这就像比较苹果和橘子。

    【讨论】:

    • 嗨彼得:这是否意味着我的应用程序不“包含加密”?
    • 严格来说,没有。使用 MD5 或任何其他散列函数以便不存储实际密码有时被称为“单向加密”,尽管使用术语加密是用词不当:(必填维基百科链接:en.wikipedia.org/wiki/One-way_encryption
    • 我知道这已经很晚了,但只是补充一下...除了使用 SHA-1 或 SHA-2,您还可以尝试对哈希进行加盐,甚至同时使用 MD5 和 SHA-1 .
    【解决方案2】:

    md5 不是真正的对称或非对称加密,因为它在对称或非对称方面都不可逆。这是一种消息摘要(安全哈希)算法。

    【讨论】:

      【解决方案3】:

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

      您究竟在用 MD5 和密码做什么?这里有标准的做事方式,使用一种总是更好,但如果不知道你想做什么,就很难为你指出相关的标准。

      【讨论】:

        【解决方案4】:

        这根本不是 加密。

        【讨论】:

          【解决方案5】:

          Apple 询问有关使用 MD5 对密码进行哈希处理的问题,以查看它是否需要商务部/工业和安全局的出口授权。

          为此目的的答案是,根据 15 CFR 第 774 部分的技术说明,补充 1,ECCN 5A002,段落a.1,它描述了使用加密来保护密码。但是,它可能仍受 ECCN 5A992 控制。

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

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

          此外,您可能需要致电 202-482-0707 致电商务部/工业和安全局,询问您的具体申请。

          【讨论】:

            【解决方案6】:

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

            它不是对称或非对称算法。这些算法用于加密而不是散列数据。出于保密原因使用加密,以保护数据免受攻击者试图读取某人的数据。

            加密或密码算法需要密钥来执行其任务,而哈希算法不需要任何类型的密钥。散列不是出于保密原因使用,而是出于完整性原因,即使它们没有足够的强度。 MD5 是一种散列函数,因为 MD5 不够强大,所以存在许多其他类型的散列函数

            【讨论】:

              【解决方案7】:

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

              【讨论】:

                【解决方案8】:

                正如这里的许多其他人所提到的,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 官方教科书中被称为非键散列算法。 *

                您有很多选择。

                : ) 享受吧!

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2011-08-29
                  • 1970-01-01
                  • 2019-07-29
                  • 2011-04-05
                  • 2010-10-30
                  • 2021-05-30
                  • 1970-01-01
                  • 2017-02-22
                  相关资源
                  最近更新 更多