java WEB开发 找回密码 如何通过注册时候的邮箱找回(修改)密码

通过注册时候的邮箱找回密码是一种比较可靠的方式,这儿指的找回密码是修改密码的另一种说法,在服务器上的数据库中密码保存的方式通常是通过MD5加密过的,不能反译密码得到原始密码,所以只有通过重新修改密码来获取密码,update方法来更新密码,通常我们需要在数据库中能唯一确定要修改的用户,通过邮箱地址唯一来确定唯一的用户。

我们假如要修改密码的邮箱是
 String EmailAddress = "505050505@qq.com";


然后加密这个邮箱地址,不能通过人工识别的方式能够确定邮箱地址,加密方式如下:
    private String encrypt(String name){
String str = name + ":||:" + System.currentTimeMillis();
String md5 = MD5Support.MD5(str + Constant.getMd5key());
String result = null;
try {
result = Base64Support.toUrlStr((str + ":||:" + md5).getBytes("UTF-8"));
}
catch (UnsupportedEncodingException e){
e.printStackTrace();
}
return result;
}


通过上面加密后的数据就不容易被人工破解了,例如下面是我的邮箱加密后的字符串

dHNhb3dlQGdtYWlsLmNvbTp8fDoxMjkxODU5NzgxMzkwOnx8OjM3ZDY4ODM3YTcwOGM3NTc0N2YxMjA0N2Q5ZTAxOTk0


这样就能保证用户不会通过自己在浏览器输入地址而修改不是自己账户的密码
然后得到这个加密的字符串后,将组合好的一个访问地址利用 java的mailsender发送到邮箱
当用户访问的时候,将先前的修改密码标志关闭,这样再次访问这个地址的时候是无效的,这儿就有翻译刚才我们加密的字符串,方法如下

假设p是加密后的字符串,下面的方法是判断字符串是否合法,合法返回true,否则返回false
boolean checkParam() {
if (p == null)
return false;
String pStr = "";
try {
pStr = new String(Base64Support.fromUrlStr(p), "UTF-8");
}
catch (Exception e) {
e.printStackTrace();
}
String[] arr = pStr.split(":\\|\\|:");
return arr.length == 3 && (System.currentTimeMillis() - Long.parseLong(arr[1])) <= (60L * 1000 * 60 * 24 * 2) && MD5Support.MD5(arr[0] + ":||:" + arr[1] + Constant.getMd5key()).equals(arr[2]);

}

如果通过检验以后我们就可以得到当初加密的邮箱地址,然后根据邮箱地址来改变密码
 String getNameFromP(String p) {
String pStr = "";
try {
pStr = new String(Base64Support.fromUrlStr(p), "UTF-8");
}
catch (Exception e) {
e.printStackTrace();
}
return pStr.split(":\\|\\|:")[0];
}

这样就可以成功的修改密码了,其中有邮件发送等等的方法,等清楚一些后在写出来。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值