忘记密码流程——UUID,AES
忘记密码流程
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)就能体现出来,它能保证每个节点所生成的标识都不会重复
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的更多相关文章
- JavaMail学习笔记(七)、帐号激活与忘记密码 实例(zhuan)
一.帐户激活 在很多时候,在某些网站注册一个用户之后,网站会给这个用户注册时填写的email地址发送一封帐户激活邮件,这封邮件的内容就是一个激活帐户的链接和一段简短的文字描述,如果用户没有去邮箱将 ...
- django 开发忘记密码通过邮箱找回功能
一.流程分析: 1.点击忘记密码====>forget.html页面,输入邮箱和验证码,发送验证链接网址的邮件====>发送成功,跳到send_success.html提示 2.到邮箱里找 ...
- 解决Mysql数据库拒绝远程连接和忘记密码的问题
解决数据库忘记密码的问题 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 编辑m ...
- [典型漏洞分享]YS忘记密码机制设计存在缺陷,导致任意用户口令均可被修改【高】
记录了安全测试过程中发现的一些典型的安全问题 YS忘记密码机制存在缺陷,可导致任意用户口令被修改[高] 问题描述: YS网站提供用户密码修改功能,当用户忘记密码时可通过该功能找回密码,但该修改密码的流 ...
- 转:java 帐号激活与忘记密码 实例
原文链接:http://endual.iteye.com/blog/1613679 一.帐户激活 在 很多时候,在某些网站注册一个用户之后,网站会给这个用户注册时填写的email地址发送一封帐户激 ...
- mysql忘记密码怎么办??
1.停掉mysql 1.1单实例停止方式 [root@qiuhom ~]# /etc/init.d/mysqld stop Shutting down MySQL. [ OK ] 1.2多实例停止方式 ...
- 关于Ubuntu系统忘记密码的解决方法合集
昨天有台机器的Ubuntu系统密码出了问题,一直提示错误.由于里面的数据比较重要,不建议重装系统,所以百度了一会,最终解决了忘记密码问题.整理了一个大合集分享出来. 第一种:参考教程如下 ...
- Linux-1:安装&忘记密码&CRT连接centos 6.5
我是在虚拟机VM安装的centos 6.5 一.Linux安装 Ctrl + Alt:鼠标退出LINUX界面 安装我是参考,当然也可以根据网上教程安装:http://oldboy.blog.51cto ...
- C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 忘记密码功能改进、手机短信、电子邮件
由于我们的系统接近有100000个用户账户,经常会有忘记密码的时候,用户多了,很小的一个功能,每天都会有很多人在用,每个功能都非常友善,会提高提系统的效率,提高用户体验. 一天最多能返回3次手机短信, ...
随机推荐
- python(30) 获取网页返回的状态码,状态码对应问题查询
获取访问网页返回的状态码 html = requests.get(Url) respon = html.status_code 以下内容来自于维基百科:点击查看网页 1xx消息 这一类型的状态码,代表 ...
- .NET 中关于 TypeCode 和枚举类型的问题
因为C#中没有提供 Switch on Type 的功能,因此要判断类型通常会用一长串的if else,当然这种写法的问题是不够高效,且不够美观.因此 C# 中对常见类型提供了一组枚举值,也就是 Ty ...
- 【OpenCV练习】简单显示图片的代码
今天依照网上的教程尝试了一下最基本的图片显示. 首先想说一下编译时出现的问题,开始时在编译时会出现无法识别cvReleaseImage的情况,是因为没有在配置中包含相应的core的库文件. 加进去就解 ...
- JS技术大全(防止复制,粘贴等)
1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键 <table border oncontextmenu ...
- XE7 & IOS开发之开发账号(2):发布证书、发布授权profile的申请使用,附Ad hoc真机调试、生成ipa文件演示(XCode所有版本通用,有图有真相)
网上能找到的关于Delphi XE系列的移动开发的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 原创作品,请尊重作者劳动成果,转载请注明出处!!! 注意,以下讨论都是以&q ...
- 在Linux上编写C#程序
自从C#开源之后,在Linux编写C#程序就成了可能.Mono-project就是开源版本的C#维护项目.在Linux平台上使用的C#开发工具为monodevelop.安装方式如下: 首先需要安装一些 ...
- Struts2:类型转换器
常规的String,int能自动转换,但是,有些类型不是这么简单,比如输入字符串,但需要Date.自定义类型,因此需要自定义类型转换类型转换器分全局和局部按惯例,局部的优先级高于全局 需求: 1.输入 ...
- C#利用WIN32实现按键注册
using System.Runtime.InteropServices; using System.Collections.Generic; using System; using System.W ...
- 两系统用asp.net forms 身份验证方式实现跨域登录信息共享
1.两个系统的 web.config 都配置为 forms 验证方式( system.web —> authentication 节点) 2.在两个系统的Web.config里配置相同的 sys ...
- ActivityGroup、TabHost之子页面不刷新——getLocalActivityManager() 以及intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)用法
TabHost继承自ActivityGroup,以下不再单独列出. ActivityGroup在第一次创建的时候会完整的执行子Activity或子view的生命周期,但在从其他子activity或子v ...