背景
在给邮件发送 URL 链接找回密码时,会发送一个链接,像这样
http://localhost:8080/resetpass?sid=c1b55b980db4eb74a4264a92d53cd953&account=saysky
验证原理就是,当用户点击链接,然后请求 控制器里的 resetpass 方法,获得 sid(密钥) 和 account(用户名) 两个参数。根据用户名去数据库中的 “邮件找回密码” 表(mail_retrieve)里寻找记录,获得 mailRetrieve 对象,然后比较 参数中的 sid 和 mailRetrieve.getSid() 即可,当然也可以加一个outtimes 超时时间 字段。
如上链接,sid 是经过 MD5 加密,并且无需解密,只需要比较参数dis和数据库sid是否相等,而account 用户名一定要传过去,目前是直接明文显示,感觉不是特别好,所以这里需要给 accout 也加密一下比较好。然后在 控制器里接受参数的时候,然后在解密即可。
目标是,无需太复杂,肉眼无法识别即可,但求效率高。
BASE64 加密解码
代码如下
- package com.liuyanzhao.chuyun.util;
- import sun.misc.BASE64Decoder;
- import sun.misc.BASE64Encoder;
- import java.io.UnsupportedEncodingException;
- /**
- * @author 言曌
- * @date 2018/2/24 上午11:45
- */
- public class Base64Util {
- /**
- * 加密
- * @param str
- * @return
- */
- @SuppressWarnings("restriction")
- public static String encode(String str) {
- byte[] b = null;
- String s = null;
- try {
- b = str.getBytes("utf-8");
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
- if (b != null) {
- s = new BASE64Encoder().encode(b);
- }
- return s;
- }
- /**
- * 解密
- * @param s
- * @return
- */
- @SuppressWarnings("restriction")
- public static String decode(String s) {
- byte[] b = null;
- String result = null;
- if (s != null) {
- BASE64Decoder decoder = new BASE64Decoder();
- try {
- b = decoder.decodeBuffer(s);
- result = new String(b, "utf-8");
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- return result;
- }
- public static void main(String args[]) {
- Long startTime = System.currentTimeMillis();
- String rawString = "loveluoqi";
- String encodedString = encode(rawString);
- String decodedString = decode(encodedString);
- System.out.println(rawString);
- System.out.println(encodedString);
- System.out.println(decodedString);
- Long endTime = System.currentTimeMillis();
- System.out.println("总共耗时毫秒数:" + (endTime - startTime));
- }
- }
运行结果如下
本文链接:https://liuyanzhao.com/7578.html
2018年08月03日 18:07:35
厉害呀