0

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

所以我决定使用 HMAC SHA1。

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

这是我在互联网上进行一些研究后发现的。

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

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

4

5 回答 5

5

即使您知道密钥,也无法解密它。HMAC SHA1 是一种键控散列算法,而不是加密。

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

对于加密,您想查看 AES。

于 2012-01-19T16:13:45.497 回答
1

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

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

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

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

对此进行一般性讨论。

于 2012-01-19T16:18:51.943 回答
1

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

HMAC 是接受密钥的哈希算法之上的构造。然而,它不是用于加密(同样它不能被解密),但它允许您对数据进行签名,即使用相同的密钥,您将能够确保数据在传输过程中没有被篡改。

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

于 2012-01-19T16:18:58.193 回答
0

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

它们与加密相去甚远。

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

于 2012-01-19T16:20:20.067 回答
-2

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

于 2012-01-19T16:16:45.220 回答