mysql md5 sha1,SHA1 vs md5 vs SHA256:哪个用于PHP登录?

I'm making a php login, and I'm trying to decide whether to use SHA1 or Md5, or SHA256 which I read about in another stackoverflow article. Are any of them more secure than others? For SHA1/256, do I still use a salt?

Also, is this a secure way to store the password as a hash in mysql?

function createSalt()

{

$string = md5(uniqid(rand(), true));

return substr($string, 0, 3);

}

$salt = createSalt();

$hash = sha1($salt . $hash);

解决方案

Neither. You should use bcrypt. The hashes you mention are all optimized to be quick and easy on hardware, and so cracking them share the same qualities. If you have no other choice, at least be sure to use a long salt and re-hash multiple times.

Using bcrypt in PHP 5.5+

PHP 5.5 offers new functions for password hashing. This is the recommend approach for password storage in modern web applications.

// Creating a hash

$hash = password_hash($password, PASSWORD_DEFAULT, ['cost' => 12]);

// If you omit the ['cost' => 12] part, it will default to 10

// Verifying the password against the stored hash

if (password_verify($password, $hash)) {

// Success! Log the user in here.

}

If you're using an older version of PHP you really should upgrade, but until you do you can use password_compat to expose this API.

Also, please let password_hash() generate the salt for you. It uses a CSPRNG.

Two caveats of bcrypt

Bcrypt will silently truncate any password longer than 72 characters.

Bcrypt will truncate after any NUL characters.

(Proof of Concept for both caveats here.)

You might be tempted to resolve the first caveat by pre-hashing your passwords before running them through bcrypt, but doing so can cause your application to run headfirst into the second.

Instead of writing your own scheme, use an existing library written and/or evaluated by security experts.

Zend\Crypt (part of Zend Framework) offers BcryptSha

PasswordLock is similar to BcryptSha but it also encrypts the bcrypt hashes with an authenticated encryption library.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值