『壹』 如何安全的存储用户密码
大多数的web开发者都会遇到设计用户账号系统的需求。账号系统最重要的一个方面就是如何保护用户的密码。一些大公司的用户数据库泄露事件也时有发生,所以我们必须采取一些措施来保护用户的密码,即使网站被攻破的情况下也不会造成较大的危害。如果你还在存储用户密码的MD5,那可真的有点弱了。
保护密码最好的的方式就是使用带盐的密码hash(salted password hashing).对密码进行hash操作是一件很简单的事情,但是很多人都犯了错。接下来我希望可以详细的阐述如何恰当的对密码进行hash,以及为什么要这样做。
重要提醒
如果你打算自己写一段代码来进行密码hash,那么赶紧停下吧。这样太容易犯错了。这个提醒适用于每一个人,不要自己写密码的hash算法 !关于保存密码的问题已经有了成熟的方案,那就是使用phpass或者本文提供的源码。
什么是hash
hash("hello") =
hash("hbllo") =
hash("waltz") =
Hash算法是一种单向的函数。它可以把任意数量的数据转换成固定长度的“指纹”,这个过程是不可逆的。而且只要输入发生改变,哪怕只有一个bit,输出的hash值也会有很大不同。这种特性恰好合适用来用来保存密码。因为我们希望使用一种不可逆的算法来加密保存的密码,同时又需要在用户登陆的时候验证密码是否正确。
在一个使用hash的账号系统中,用户注册和认证的大致流程如下:
1, 用户创建自己的账号
2, 用户密码经过hash操作之后存储在数据库中。没有任何明文的密码存储在服务器的硬盘上。
3, 用户登陆的时候,将用户输入的密码进行hash操作后与数据库里保存的密码hash值进行对比。
4, 如果hash值完全一样,则认为用户输入的密码是正确的。否则就认为用户输入了无效的密码。
5, 每次用户尝试登陆的时候就重复步骤3和步骤4。
在步骤4的时候不要告诉用户是账号还是密码错了。只需要显示一个通用的提示,比如账号或密码不正确就可以了。这样可以防止攻击者枚举有效的用户名。
还需要注意的是用来保护密码的hash函数跟数据结构课上见过的hash函数不完全一样。比如实现hash表的hash函数设计的目的是快速,但是不够安全。只有加密hash函数(cryptographic hash functions)可以用来进行密码的hash。这样的函数有SHA256, SHA512, RipeMD, WHIRLPOOL等。
一个常见的观念就是密码经过hash之后存储就安全了。这显然是不正确的。有很多方式可以快速的从hash恢复明文的密码。还记得那些md5破解网站吧,只需要提交一个hash,不到一秒钟就能知道结果。显然,单纯的对密码进行hash还是远远达不到我们的安全需求...
以上是下面链接文章里的片段
具体请查看这个链接里的文章:
http://www.freebuf.com/articles/web/28527.html
满意望采纳~
『贰』 数据库中怎样存储用户密码才能保证安全
正确的方法就是不存储密码,而是存储对密码进行不可逆加密(如MD5)后的结果。这样别人打开数据库也只能看到加密运算后的结果,无法反推出密码。而需要验证用户密码时,只需要同样进行加密运算然后和数据库里的结果对比是否一致即可。
『叁』 jsp 数据库用户名和密码是如何保存的
一般是存在一个.properties或者.xml文件中,作为配置文件。这样就方便管理,即使数据库的链接属性如地址、服务名、端口、用户名、密码什么的发生了变化,只要修改一下配置文件就可以了,很方便。
『肆』 如何将密码加密后存入oracle数据库
如果不需要恢复明码,可以用md5
如果需要恢复明码,可以用des之类的。
『伍』 用户名和存储密码迷你数据库加密的话应该怎么做
1、定义一个加密处理的class类,通常可以使用MD5来加密,在网络上可以找到此Java源代码
2、在保存用户的密码时,先对获取的密码进行MD5加密后再保存到数据,如:
String passwd=request.getParameter("passwd");
passwd=MD5(passwd);
//通过JDBC写入到数据库
3、在用户登录时,将用户登录输入的密码进行MD5加密后与数据库读取的密码进行比较,若相等若通过登录:
String passwd=request.getParameter("passwd");
.......
if(MD5(passwd).equal(rs.get("passwd")))
//通过登录
『陆』 如何建立存放用户名和密码的数据库表
createtableUserThe(数据库表名)
(IdintIDENTITY(1,1)NOTNULL,
userIDint,'会员ID自动递增,并是唯一的
usernamevarchar(50),'会员名称50个字以内
attributeintDEFAULT0,'属性默认值是设置0
Userpasswordvarchar(50),'这列是用户存放密码,建议用md5加密后保存,验证的时候用户输入的密码也加密后对比
UsTimeDateTimeDEFAULTGetDate(),'这个可以记录时间,默认为生成的时间
);
『柒』 怎样在数据库中存储用户名密码
user表;id(int 12,主键,自增,唯一,索引。username(varchar 64),password(varchar 64),createtime(time)创建时间字段
『捌』 各位用php将密码存入数据库,都用什么方法进行加密的
php将密码存入数据库,可以分内常见的4种方式:
1、直接md5加密存到到数据库
2、md5两次存到数据库
3、对需要加密的字符串和一个常量 进行混淆加密
4、生成一个随机的变量存到数据库中,然后对需要加密的字符串和这个随机变量加密
<?php
$str="admin";//需要加密的字符串
$str2="php";//增加一个常量混淆
$pass1=md5($str);
$pass2=md5(md5($str));
$pass3=md5($str.$str2);
echo$pass1."<br>".$pass2."<br>".$pass3;
?>
输出:
$str="admin";//需要加密的字符串
$encrypt=$row['encrypt'];//生成的随机加密字符串存到数据库中
$pass4=md5($str.$encrypt);
//
『玖』 数据库中密码怎么存放
我以前写数据库的时候是用MD5加密到数据库的一个字段。
但是看了一些文章说MD5也有可能破MD5的加密
如果你对加密十分在意的话,可以尝试多种办法,如果只是一般加密的话,普通人一般不会花太大的气力去破界MD5的,放心去做把
『拾』 数据库储存密码
一般密码使用hash编码进行存储,当用户注册是要把用户输入的密码转换为
md5
或者
sha1
编码,用户登陆的时候,把用户输入的密码转换在和数据库中存入的数据对比,如果相同就登陆成功。