php 加密保存mysql_关于php:如何加密插入MySQL表的密码?

本问题已经有最佳答案,请猛点这里访问。

我有一些代码可以注册,但我不知道如何散列密码。我想用sha512。

$con=mysqli_connect("localhost","root","","users");

// Check connection

if (mysqli_connect_errno())

{

echo"Failed to connect to MySQL:" . mysqli_connect_error();

}

$sql="INSERT INTO users (username, password, email)

VALUES

('$_POST[username]','$_POST[password]','$_POST[email]')";

if (!mysqli_query($con,$sql))

{

die('Error: ' . mysqli_error($con));

}

echo"Thank you.";

mysqli_close($con);

我知道我的MySQL登录没有密码。这是一个仅用于测试的本地MySQL服务器。

哈希不加密。sha512是一种哈希算法。一旦散列,您的密码将无法检索。

@Russell密码不应该被检索,所以这不是问题。在以后的验证尝试中,提供的密码将被散列并与存储的散列匹配。

@格鲁吉亚人我同意这不是问题。我更担心使用的术语不正确。也就是说,他不想加密任何东西。这两个词不能互换。

我知道这个问题相当古老,但是因为大多数答案都是错误的(没有盐,只有简单的sha512),这里有一篇关于如何在php中散列密码的文章。如果你对密码散列感兴趣的话,请查看这篇关于正确散列密码的文章。

您可以使用hash()函数散列密码:

$hashed_password = hash('sha512', $_POST['password']);

然后修改insert语句,将哈希密码插入数据库:

INSERT INTO users (username, password, email)

VALUES ('$_POST[username]', '$hashed_password', '$_POST[email]');

请注意,您的SQL语句容易受到SQL注入的攻击,因为您使用的是未初始化的用户输入。为了提高安全性并保护数据的完整性,请考虑在SQL语句中使用输入之前对其进行转义和验证。实现这一目标的一种方法是通过mysqli_real_escape_string():

$escaped_username = mysqli_real_escape_string( $con, $_POST['username'] );

$escaped_email = mysqli_real_escape_string( $con, $_POST['email'] );

哈希不加密!但是,对SQL注入的良好调用

@拉塞尔,我更新了这个冒犯的词。尽管题目是:"我想使用sha512",但操作人员还是希望散列。

谢谢。在安全性方面,我有点过于偏执,所以当人们混淆"hash"和"encrypt"时,我往往会跳到上面。我不喜欢那些术语混淆,因为它们是非常不同的东西。不幸的是,这么多人在不知道任何更好的情况下互换使用它们。希望我没有冒犯:)

hashing有效,谢谢,但是现在我在代码的反注入部分出错了:警告:mysqli_real_escape_string()只需要2个参数,1个参数在c:wampwwwusersinsert.php的第10行中给出:$eusername=mysqli_real_escape_string($_post['username']);$sql="insert into users(username,password,email)值('$eusername'、'$hpassword'、'$eemail');

@特雷弗,我道歉。mysqli_real_escape_strong希望链接作为第一个参数。我已经更新了答案以反映这一要求。

@乔治库明斯啊哈,我看到你读过我的答案(mysqli_real_escape_string);-)=

@马库斯,你是说你在我之后1分55秒发的那个?是的,我看到了。;)

如果您关心安全性,我会给这个阅读:crackstation.net/hashing-security.htm有一些深入的知识,如果您希望构建一个安全的应用程序,您应该阅读并扩展这些知识。

由于密码散列不正确导致投票被否决。

你在这里做的事情有很多问题。

首先,您容易受到SQL注入的攻击,因为您没有清理SQL中的输入。

其次,您应该避免使用像sha512这样的快速哈希。它不再被认为是安全的。看看这个问题。您基本上希望使用类似bcrypt的自适应哈希函数。

下面是一个如何散列密码的示例:

$password = hash('sha512', $_POST[password]);

我建议你加上密码。请在此处阅读更多信息:网址:http://www.aspheute.com/english/20040105.asp

还可以阅读"mysqli_real_escape_string"

&和准备好的声明。

由于密码散列不正确导致投票被否决。

给定链接中的内容已过时。Sha1不再安全。另外,由于问题是关于php而不是asp,我建议将链接更新到更相关的链接,例如:php.net/manual/en/faq.passwords.php

首先清理输入数据。$password=filter_input(input_post,'password',filter_sanitize_string);

散列密码字符串

$hashedPassword = hash('sha512', $password);

更好的密码散列方法是使用新的密码散列API

$hashedPassword = password_hash($password, PASSWORD_DEFAULT);

清理密码的坏主意。您将丢弃用户可能想要在其密码中包含的任何特殊字符。同样,在用PHP散列之后,任何SQL注入类型的字符都将以任何方式消失。

你说得不错!

请在进入数据库前转义数据。他们容易受到攻击。

hash('sha512', $_POST['password']);

由于密码散列不正确导致投票被否决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值