两者之间的区别是什么?bcrypt
和 encrypt
以及如何在以下情况下将值恢复到正常状态 laravel
?
bcrypt()
是为了创建一个 Hash
这是一个将纯文本字符串转化为哈希值的单向过程。你不能解除一个值的哈希值所以没有办法将值返回到它的 "正常 "状态。
encrypt()
是 "混淆 "的意思,它将纯文本字符串改变成一个非人类可读的值。这就是 "混淆"。不 单向过程,因为 decrypt()
允许你获得纯文本值。
一些例子。
bcrypt('password'); // '$2y$10$s8MB0AJsUmUN/NCWqZuDx.KrXXNYw50fFdJWqKR28qoOeMN.Rahfq'
在上面的例子中,字符串 'password'
被转化为那个看似随机的字符串。没有办法撤销这一点,这就是为什么哈希是存储敏感信息(如密码)的首选方法。你可以比较哈希值来确定它们是否匹配,但这需要你明确知道原始值。
Hash::compare('12345678', bcrypt('password')); // false
Hash::compare('password', bcrypt('password')); // true
至于加密
$encrypted = encrypt('password'); // 'eyJpdiI6Im9uQ1M0NDNhcXBWdnJ1azBXWDQwMlE9PSIsInZhbHVlIjoiZmxrcGRNVGY3MnIzbVhkMmsyQzNVUT09IiwibWFjIjoiMTViZWVjMWJiYTAzZTNiNTc3YzljNmMwMjI5ZTBmZjc3M2UyN2EwOGZhMWFiOTg5MDY2NDY1Y2QwZjRmZTgyNSJ9'
$decrypted = decrypt($encrypted); // 'password'
如你所见,解密一个加密值是很简单的事 这种方法对于隐藏非敏感信息很有用,但绝对不能用来存储敏感信息。