忘记密码流程

1.进入忘记密码页面

2. 后台检验参数合法性(null,验证码,邮箱合法性)

3,生成更新密码链接,并将相关参数写入DB

  link=urlBase(baseurl)+updatePassword?pwdid(相关参数在db中的id)&uuid(存于db中,用于步骤6检验外来链接的合法性)

4,发送邮件给客户

5. 客户点击邮件中的更新链接

6. 更新前参数的检验(status=1失效,status=2超过24小)

7,设置相关参数到更新页面(newpwd,repwd);

其中用到的知识点:uuid,Aes加密

UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。使用UUID的好处在分布式的软件系统中(比如:DCE/RPC, COM+,CORBA)就能体现出来,它能保证每个节点所生成的标识都不会重复

UUID由以下几部分的组合:
(1)当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。
(2)时钟序列。
(3)全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。
import java.util.UUID;
UUID uuid = UUID.randomUUID();
 

1.加密:

例:加密方式: AES128(CBC/PKCS5Padding) + Base64, 私钥:lianghuilonglong,要加密的字符串abcdefg

public String encrypt(){

  String text = "abcdefg";   //要加密的字符串

  String key = "lianghuilonglong";  //私钥   AES固定格式为128/192/256 bits.即:16/24/32bytes。DES固定格式为128bits,即8bytes。

  String iv   = "aabbccddeeffgghh";  //初始化向量参数,AES 为16bytes. DES 为8bytes.

  Key keySpec = new SecretKeySpec(key.getBytes(), "AES");    //两个参数,第一个为私钥字节数组, 第二个为加密方式 AES或者DES

  IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes);

  Cipher cipher = Cipher.getIntance("AES/CBC/PKCS5Padding");   //实例化加密类,参数为加密方式,要写全

  cipher.init(Cipher.ENCRYPT_MODE,  keySpec, ivSpec);             //初始化,此方法可以采用三种方式,按服务器要求来添加。(1)无第三个参数(2)第三个参数为SecureRandom random = new SecureRandom();中random对象,随机数。(AES不可采用这种方法)(3)采用此代码中的IVParameterSpec

  //cipher.init(Cipher.ENCRYPT_MODE, keySpec);

  //SecureRandom random = new SecureRandom();

  //cipher.init(Cipher.ENCRYPT_MODE, keySpec, random);

  

  byte [] b = cipher.doFinal(text.getBytes());                    //加密操作,返回加密后的字节数组,然后需要编码。主要编解码方式有Base64, HEX, UUE,                                   7bit等等。此处看服务器需要什么编码方式

  String ret = Base64.encode(b);                                       //Base64、HEX等编解码

}

2.解密:

逻辑: 将服务器返回的加密字符串,先用Base64、HEX等解码成byte[],再用加密时相同的加密方式及key进行解密。加密与解密代码几乎相同。唯一区别为在Cipher类init时,工作模式为Cipher.DECRYPT_MODE。代码:

//加密方式: AES128(CBC/PKCS5Padding) + Base64, 私钥:lianghuilonglong

public String deCiphering(){

  String keySpec = "lianghuilonglong";

  String textDeCipher = "UstyI8JoQOty8egSMFQfig==";   //从服务器返回的加密字符串,需要解密的字符串

  byte [] byte = Base64.decode(textDeCipher);           //先用Base64解码

 

  IvParaterSpec ivSpec = new IvParaterSpec("abcdefghabcdefgh".getBytes());

  Key key = new SecretKeySpec(keySpec.getBytes(), "AES");

  Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

  cipher.init(Cipher.DECRYPT_MODE, key, ivSpec);               //与加密时不同MODE:Cipher.DECRYPT_MODE

  byte [] ret = cipher.doFinal(byte);

  return new String(ret, "utf-8");

}

 

忘记密码流程——UUID,AES的更多相关文章

  1. JavaMail学习笔记(七)、帐号激活与忘记密码 实例(zhuan)

    一.帐户激活   在很多时候,在某些网站注册一个用户之后,网站会给这个用户注册时填写的email地址发送一封帐户激活邮件,这封邮件的内容就是一个激活帐户的链接和一段简短的文字描述,如果用户没有去邮箱将 ...

  2. django 开发忘记密码通过邮箱找回功能

    一.流程分析: 1.点击忘记密码====>forget.html页面,输入邮箱和验证码,发送验证链接网址的邮件====>发送成功,跳到send_success.html提示 2.到邮箱里找 ...

  3. 解决Mysql数据库拒绝远程连接和忘记密码的问题

    解决数据库忘记密码的问题 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 编辑m ...

  4. [典型漏洞分享]YS忘记密码机制设计存在缺陷,导致任意用户口令均可被修改【高】

    记录了安全测试过程中发现的一些典型的安全问题 YS忘记密码机制存在缺陷,可导致任意用户口令被修改[高] 问题描述: YS网站提供用户密码修改功能,当用户忘记密码时可通过该功能找回密码,但该修改密码的流 ...

  5. 转:java 帐号激活与忘记密码 实例

    原文链接:http://endual.iteye.com/blog/1613679 一.帐户激活   在 很多时候,在某些网站注册一个用户之后,网站会给这个用户注册时填写的email地址发送一封帐户激 ...

  6. mysql忘记密码怎么办??

    1.停掉mysql 1.1单实例停止方式 [root@qiuhom ~]# /etc/init.d/mysqld stop Shutting down MySQL. [ OK ] 1.2多实例停止方式 ...

  7. 关于Ubuntu系统忘记密码的解决方法合集

    昨天有台机器的Ubuntu系统密码出了问题,一直提示错误.由于里面的数据比较重要,不建议重装系统,所以百度了一会,最终解决了忘记密码问题.整理了一个大合集分享出来. 第一种:参考教程如下       ...

  8. Linux-1:安装&忘记密码&CRT连接centos 6.5

    我是在虚拟机VM安装的centos 6.5 一.Linux安装 Ctrl + Alt:鼠标退出LINUX界面 安装我是参考,当然也可以根据网上教程安装:http://oldboy.blog.51cto ...

  9. C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 忘记密码功能改进、手机短信、电子邮件

    由于我们的系统接近有100000个用户账户,经常会有忘记密码的时候,用户多了,很小的一个功能,每天都会有很多人在用,每个功能都非常友善,会提高提系统的效率,提高用户体验. 一天最多能返回3次手机短信, ...

随机推荐

  1. HDU 1754 I Hate It(线段树单点替换+区间最值)

    I Hate It [题目链接]I Hate It [题目类型]线段树单点替换+区间最值 &题意: 本题目包含多组测试,请处理到文件结束. 在每个测试的第一行,有两个正整数 N 和 M ( 0 ...

  2. IAR快捷键:

    一显示行号:tools >> options >> Editor >> 选中show line numbers 2.注释的快捷键:Ctrl+K;取消注释:Ctrl+ ...

  3. win下安装oracle的步骤

  4. iis网站发布相关问题

    最近在公司的服务器上发布了一个简单的web应用,整个做下来到上线用了将近2天时间,期间出现了各种问题,现在发出来供大家参考: 1.iis上发布后出现访问网站,出现“IIS服务器被配置为不列出此目录的内 ...

  5. Grunt的使用

    在Node环境下.需要预先安装好Node. 1.安装grunt-cli [root@Luxh-01 ~]# npm install -g grunt-cli 2.创建一个目录test [root@Lu ...

  6. 实用的Portraiture滤镜磨皮教程

    滤镜可以快速地进行人物皮肤美化处理,Portraiture滤镜可以将皮肤柔化,消除多余的斑点,在磨皮后复制细节保留较多的通道到图层面板,用高反差保留滤镜提取细节,再更改图层混合模式即可以得到漂亮的肤色 ...

  7. NSTimer的使用[zhuang]

    NSTimer 的头文件 /* NSTimer.h Copyright (c) 1994-2015, Apple Inc. All rights reserved. */ #import <Fo ...

  8. mysql事务和并发控制

    谈到事务,首先想到的问题是并发控制.比如两个用户同时操作数据库里面的一张表,一个正在读数据,一个正在删除数据,那么读数据的读出的结果究竟是多少?并发可以提高系统的性能,让多个用户同时操作一份数据,但为 ...

  9. IOS :编译时出现的错误 ,希望可以有所帮助

    1."std::ios_base::Init::~Init()", referenced from 答1: 如果出现这样的编译问题,是需要再加进libstdc++.dylib和li ...

  10. 许小年:宁可踏空,不可断粮<转>

    http://www.daonong.com/g/25/xsqy/2014/0716/51074.html 文│许小年 中欧国际工商学院教授 为什么我们企业的创新能力长期处于低水平呢? 深入观察,内心 ...