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