【问题标题】:Using crypt PHP function with Blowfish hashing algorithm, is it Symmetric crypting or not?使用带有 Blowfish 散列算法的 crypt PHP 函数,是否是对称加密?
【发布时间】:2014-07-14 10:57:28
【问题描述】:
我可以从网上看到:Blowfish 算法是对称的。
而来自 PHP.net 的 crypt 函数是一种加密方式。Crypt func 还允许 Blowfish 作为散列算法。
因此,如果我将对称加密与双向加密过程联系起来是正确的。
我看到了一个矛盾。
当然,使用 crypt() + Blowfish 会给某人解密字符串的机会,
他是否会知道秘盐?
(我实际上认为不是,因为我可以从加密字符串中看到加密盐包含在内)
非常感谢
【问题讨论】:
标签:
php
blowfish
encryption-symmetric
crypt
【解决方案1】:
像河豚这样的密码算法可以用作散列算法的一部分。河豚只是一个“积木”,可以用于不同的目的。它可以实现为加密/解密工具,或哈希算法的密码原语。这并不意味着您突然能够反转哈希算法。
散列算法的输出始终是一个恒定长度这一显而易见的事实表明它无法逆转。您不能以可逆的方式将无限数量的潜在输入值加密为固定长度的输出。该算法必然有损。
作为一个简单的说明,可以像这样使用河豚来加密数据(随后可以解密):
ABCD EFGH IJKL MNOP ...
| | | |
v v v v
NPCQ JQ0C MPZW LKAQ
输入的每个块都被河豚单独转换成密文。这就是为什么河豚被称为块密码(与流密码相反,它将输入作为流处理,而不是作为一组固定长度的块)。此操作的结果是一堆可以反转的块。输出与输入的长度相同(在必要时加上填充以填充块)。
使用河豚的哈希函数是这样工作的:
ABCD EFGH IJKL MNOP ...
| | | |
v v v v
NPCQ JQ0C MPZW LKAQ
| | | |
+----+--> PMQZ --+--> OLMQ --+--> UALG ...
每个块的输出通过一个压缩函数运行,它将两个块合二为一。前两个块的输出合并(到PMQZ),然后这个值与第三块的输出合并(到OLMQ)等等。最后一次压缩的输出是哈希的结果。
如您所见,河豚在内部用作加密密码,但其输出与有损压缩功能相结合,因此无法反转输出。
【解决方案2】:
加密的东西是可解密的,如果不可解密就称为散列,散列是单向的。