【问题标题】:Encryption using SHA1使用 SHA1 加密
【发布时间】:2012-01-19 16:10:45
【问题描述】:

我正在开发一个大型应用程序,当数据在不同大陆的两台机器之间传输时,我需要加密。我从未从事过加密工作。我想要一个可以在 PHP / Ruby / Python 中处理而没有任何依赖关系的简单加密。

所以我决定使用 HMAC SHA1。

$pad=hash_hmac("sha1","The quick brown....","mykey");

这是我在网上搜索后发现的。

如果有人不知道密钥,解密它有多难?另外,有什么替代方法吗?

更新 - 感谢所有回复。问题解决了。

【问题讨论】:

  • 这是一个哈希,而不是密码:如果不检查所有可能性并检查它们,您将无法解密它!

标签: encryption sha1 hmacsha1


【解决方案1】:

即使您知道密钥,也无法对其进行解密。 HMAC SHA1 是密钥哈希算法,不是加密。

哈希是一种加密单向函数,无论输入的长度如何,它总是生成相同长度的值(我认为 SHA1 是 128 位)。哈希的要点是,给定输出值,在计算上找到一个输入值来产生该输出是不可行的。键控哈希用于防止彩虹表攻击。即使您知道密钥,也无法反转哈希过程。

对于加密,您想查看 AES。

【讨论】:

  • SHA1 长度为 160 位(无论输入大小如何)
  • 谢谢 poupou。我知道我应该查一下。
【解决方案2】:

SHA1 是一种单向哈希函数,根据定义,任何人都无法解密它。问题就变成了,如果你有一个哈希到 H 的明文 T。找到另一个也哈希到 H 的 T 有多难。

根据 Wikipedia,对于 SHA1,最著名的暴力攻击需要 2^51 次评估才能找到匹配的纯文本。

如果您需要真正的加密,您可以在其中反转过程,您应该看看 AES256。

见: http://en.wikipedia.org/wiki/Cryptographic_hash_function

关于这个的一般性讨论。

【讨论】:

    【解决方案3】:

    正如安德鲁所说,SHA1 是一种哈希算法,不能用于加密(因为您无法取回原始值)。它产生的摘要可用于验证数据的完整性。

    HMAC 是一种高于接受密钥的哈希算法的构造。但是,它不是用于加密(同样无法解密),但它允许您签署数据,即使用相同的密钥,您将能够确保数据没有被篡改在传输过程中。

    您应该考虑使用 AES 或 HTTPS(如果适用于您的应用程序)的敌人加密(这将处理比您想知道的更多的问题 ;-)

    【讨论】:

      【解决方案4】:

      SHA-1 , MD-5 都是单向哈希算法。 他们只是生成一个冗长的字符串。当使用这些函数时,每个字符串都会为您生成一个无法保留的冗长字符串。

      它们远非加密。

      如果您正在寻找加密算法,请选择 AES(高级加密标准)、DES(数据加密标准)算法。

      【讨论】:

        【解决方案5】:

        正如我所说,这是一个哈希,所以不是加密/解密问题。如果您想实现一个简单的加密算法,我建议您研究 XOR 加密。如果密钥足够长(比消息长)并且您的密钥共享策略适当安全,则这是一次性密码;否则,使用统计分析可能会破坏它。

        【讨论】:

        • -1 建议对一般安全问题进行 XOR 加密(抱歉)
        • 为什么?我知道这不是最好的,但鉴于 OP 尝试使用 SHA1 哈希来加密数据,我认为易于理解和实现的算法将是开始学习的好地方。
        • @owlstead - XOR 很好,假设良好、高质量的非重复密钥材料流。这基本上是 RC4 的工作方式。主要问题是获取具有足够高熵的关键数据流以使其有用,并且能够在另一个方面使用相同的材​​料。也就是说,我给这个答案一个 -1 以建议 OP 实施他自己的加密算法。众所周知,加密很难做到正确,即使使用已知的算法实现细节也可能导致弱点。使用现有的成熟库会更好。
        • @Xophmeister 如果这是一个“学习”问题,那么我不得不同意某种 XOR 加密可能是开始学习的好方法。但这从来都不是 OP 的问题。
        • @AndrewCooper a XOR 可以作为加密模型的最后一部分,其中已知的良好算法正在创建密钥流。如果 Xophmeister 会提出,比如说,在 CTR 模式下的 AES,并且选择了一个很好的 NONCE,我就不会抱怨了。但是为现实生活中的加密问题提出 XOR 加密或一次性便笺......不。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-26
        相关资源
        最近更新 更多