我正在使用高级自定义字段为我的登录创建某种个人数据库。ACF有一个密码字段类型,它工作得很好,但它将数据以纯文本形式存储到数据库中。所以我发现this topic 这使我们能够在将密码发送到数据库之前对其进行哈希运算:
function at_vault_encrypt( $value, $post_id, $field )
{
$value = wp_hash_password( $value );
return $value;
}
add_filter(\'acf/update_value/type=password\', \'at_vault_encrypt\', 10, 3);
此函数使用
wp_hash_password
并将其应用于ACF更新筛选器。我的问题的核心是:当获取的数据显示在后端时,我是否可以取消散列?
问题是,当我用密码保存一个项目并重新打开它时,它会显示哈希密码,而不是我输入的密码。如果我以后读不出密码,那么就不用再记下密码了。
所以我想我可能会“反散列”密码,但这似乎不是一个选项。也许这让WordPress走得太远了,这是不正确的,这只是一种额外的安全措施,不让字段以明文形式保存在数据库中。
(附:我不是来讨论数据安全的。我很清楚密码管理器和其他(可能更安全的)方法)。
最合适的回答,由SO网友:cybmeta 整理而成
根据定义,哈希是one-way ecnryption, 所以它是无法逆转的(也许一些超级黑客可以做到这一点,但这应该是非常困难或几乎不可能做到的)。这不是一个bug、问题或诸如此类的东西,而是每个站点的预期行为和工作方式。
许多人在多个服务中使用相同的密码,因此包括网站所有者在内的任何人都不应该知道用户的密码。想象一下该网站被黑客入侵,如果密码可以颠倒,黑客可以访问所有密码,而且可能不仅仅是你的网站。或者,站点所有者可以使用用户的密码访问其他站点中的用户帐户。
因此,如果您将密码散列为wp_hash_password()
, 或者任何其他hashgin方法,而您无法对其进行解密,这与它的设计完全相同。
您可能对加密而不是哈希感兴趣,这种方法只有在应用于加密的规则已知的情况下才能反转,通常是通过使用密钥。您可以在PHP中执行此操作,例如mcrypt_encrypt()
/mcrypt_decrypt()
. 但对用户来说并不安全,因为网站所有者可以知道自己的密码;如果你需要保密但不需要完整性,请使用它。
或者你可能对编码感兴趣,但编码只是另一种人类可能无法直接阅读的格式的纯文本,只是因为它不习惯,不是因为它是安全的或以某种方式加密的,这就是为什么它可以通过转换回原始格式轻松解码(也就是说,你得到零安全性)。
PHP中一些现成的编码方法:
SO网友:Daniel
哈希并不意味着是可逆的。相反,您可以使用Base64之类的编码方案来存储信息:
// Encode
function at_vault_encode( $value, $post_id, $field ) {
return base64_encode($value);
}
add_filter(\'acf/update_value/type=password\', \'at_vault_encode\', 10, 3);
// Decode
function at_vault_decode( $value, $post_id, $field ) {
return base64_decode($value);
}
add_filter(\'acf/load_value/type=password\', \'at_vault_decode\', 10, 3);
然而,需要注意的是,这种存储密码的方式与存储纯文本字符串一样不安全。