我正在开发一个大型应用程序,当数据在不同大陆的两台机器之间传输时,我需要加密。我从未从事过加密工作。我想要一个可以在 PHP / Ruby / Python 中处理而没有任何依赖关系的简单加密。
所以我决定使用 HMAC SHA1。
$pad=hash_hmac("sha1","The quick brown....","mykey");
这是我在互联网上进行一些研究后发现的。
如果有人不知道密钥,解密它有多难?另外,有什么替代方法吗?
更新 - 感谢所有回复。问题解决了。
我正在开发一个大型应用程序,当数据在不同大陆的两台机器之间传输时,我需要加密。我从未从事过加密工作。我想要一个可以在 PHP / Ruby / Python 中处理而没有任何依赖关系的简单加密。
所以我决定使用 HMAC SHA1。
$pad=hash_hmac("sha1","The quick brown....","mykey");
这是我在互联网上进行一些研究后发现的。
如果有人不知道密钥,解密它有多难?另外,有什么替代方法吗?
更新 - 感谢所有回复。问题解决了。
即使您知道密钥,也无法解密它。HMAC SHA1 是一种键控散列算法,而不是加密。
哈希是一种加密单向函数,无论输入的长度如何,它总是生成相同长度的值(我认为 SHA1 是 128 位)。哈希的意义在于,给定输出值,要找到一个输入值来产生该输出在计算上是不可行的。密钥哈希用于防止彩虹表攻击。即使您知道密钥,也无法反转哈希过程。
对于加密,您想查看 AES。
SHA1 是一种单向哈希函数,根据定义,它不能被任何人解密。问题就变成了,如果你有一个哈希到 H 的明文 T。找到另一个也哈希到 H 的 T 有多难。
根据 Wikipedia,对于 SHA1,最著名的蛮力攻击需要 2^51 次评估才能找到匹配的纯文本。
如果您需要实际加密,您可以在其中反转该过程,您应该看看 AES256。
见: http ://en.wikipedia.org/wiki/Cryptographic_hash_function
对此进行一般性讨论。
就像安德鲁说的那样, SHA1是一种哈希算法,不能用于加密(因为您无法取回原始值)。它产生的摘要可用于验证数据的完整性。
HMAC 是接受密钥的哈希算法之上的构造。然而,它不是用于加密(同样它不能被解密),但它允许您对数据进行签名,即使用相同的密钥,您将能够确保数据在传输过程中没有被篡改。
您应该考虑使用 AES 或 HTTPS(如果适用于您的应用程序)的敌人加密(这将处理比您想知道的更多的问题 ;-)
SHA-1 、 MD-5 都是单向哈希算法。他们只是生成一个冗长的字符串。当受到这些函数的影响时,每个字符串都会为您生成一个无法保留的冗长字符串。
它们与加密相去甚远。
如果您正在寻找加密算法,请选择 AES(高级加密标准)、DES(数据加密标准)算法。
正如我所说,这是一个哈希,所以不是加密/解密问题。如果您想实现一个简单的加密算法,我建议您研究 XOR 加密。如果密钥足够长(比消息长)并且您的密钥共享策略适当安全,则这是一次性密码;否则,它可能会被统计分析破坏。