zoukankan      html  css  js  c++  java
  • 忘记密码流程——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)就能体现出来,它能保证每个节点所生成的标识都不会重复

    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");

    }

     

     
  • 相关阅读:
    js处理数学经典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一 对兔子,假如兔子都不死,问每个月的兔子总数为多少?
    js的水仙花数的输出
    js中关于一个数组中最大、最小值以及它们的下标的输出的一种解决办法
    通过HMI显示西门子SINAMICS V90伺服驱动器报警代码和报警信息
    outlook Archive 归档减小服务器文件夹大小
    西门子触摸屏TP,KTP的报警历史记录数量
    解决HP ZBOOK 蓝屏, 释放静电的方法
    LOGO! 8.2 与 WinCC之间以太网通信的地址对应关系
    Windows10 文件索引功能,替代everything
    行星减速机的精度和强度
  • 原文地址:https://www.cnblogs.com/shz365/p/6248878.html
Copyright © 2011-2022 走看看