朋友做的一个军检项目中用到
BCrypt
的加密处理,之前没用过,所以就查了些相关资料。简单的理解就是:BCrypt是一个利用随机盐值
进行hash
的加密方式。
相关概念:
哈希算法
- 获取一个任何长度的字符串并采用一致的方式创建一个哈希值:一种固定长度的字符串表示。每次传入同一个原始字符串,您都会收到相同的哈希值。这是一个单向过程,您无法从中获得原始字符串。
盐值
- 在原始的密码后面添加自定义的尽量随机的长字串,然后进行哈希,这个长字串就是盐值(Salt)。
- 有时候,为了减轻开发压力,程序员会统一使用一个salt值(固定盐值,储存在某个地方),而不是每个用户都生成私有的salt值。
- 盐值越复杂、越随机,密码被破解的几率就越小。
实现
php: password_hash, password_verify
<?php
// hash值
$hashVal = password_hash("123456", PASSWORD_DEFAULT);
// $2y$10$QJlsKG/RUU2TEgQcj6.D2e8.QYeBJptiUce9g/IaxxU2GjRpapkA2
// $hashVal = '$2a$10$zpOCjNBFm1XQ7JvmErIkbeXg4KYbD.TOx0NXyPZhqZCjy9N8OxGQO';
echo($hashVal."<br>");
// 验证
if (password_verify("123456", $hashVal)) {
echo("true");
} else {
echo("false");
}
?>
iOS实现DEMO:
https://github.com/zhangzhaopds/BCrypt.git