网上复制的

 

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

Java代码  复制代码 收藏代码
  1. String EmailAddress = "[email protected]"

 String EmailAddress = "[email protected]";


然后加密这个邮箱地址,不能通过人工识别的方式能够确定邮箱地址,加密方式如下:
Java代码  复制代码 收藏代码
  1. private String encrypt(String name){ 

  2. String str = name + ":||:" + System.currentTimeMillis(); 

  3. String md5 = MD5Support.MD5(str + Constant.getMd5key()); 

  4. String result = null

  5. try { 

  6. result = Base64Support.toUrlStr((str + ":||:" + md5).getBytes("UTF-8")); 

  7. catch (UnsupportedEncodingException e){ 

  8. e.printStackTrace(); 

  9. return result; 

    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;
    }


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

Java代码  复制代码 收藏代码
  1. dHNhb3dlQGdtYWlsLmNvbTp8fDoxMjkxODU5NzgxMzkwOnx8OjM3ZDY4ODM3YTcwOGM3NTc0N2YxMjA0N2Q5ZTAxOTk0 

dHNhb3dlQGdtYWlsLmNvbTp8fDoxMjkxODU5NzgxMzkwOnx8OjM3ZDY4ODM3YTcwOGM3NTc0N2YxMjA0N2Q5ZTAxOTk0


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

假设p是加密后的字符串,下面的方法是判断字符串是否合法,合法返回true,否则返回false
Java代码  复制代码 收藏代码
  1. boolean checkParam() { 

  2. if (p == null

  3. returnfalse

  4. String pStr = ""

  5. try { 

  6. pStr = new String(Base64Support.fromUrlStr(p), "UTF-8"); 

  7. catch (Exception e) { 

  8. e.printStackTrace(); 

  9. String[] arr = pStr.split(":\\|\\|:"); 

  10. 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]); 

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

    }

如果通过检验以后我们就可以得到当初加密的邮箱地址,然后根据邮箱地址来改变密码
Java代码  复制代码 收藏代码
  1. String getNameFromP(String p) { 

  2. String pStr = ""

  3. try { 

  4. pStr = new String(Base64Support.fromUrlStr(p), "UTF-8"); 

  5. catch (Exception e) { 

  6. e.printStackTrace(); 

  7. return pStr.split(":\\|\\|:")[0]; 

 String getNameFromP(String p) {
        String pStr = "";
        try {
            pStr = new String(Base64Support.fromUrlStr(p), "UTF-8");
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return pStr.split(":\\|\\|:")[0];
    }

这样就可以成功的修改密码了,其中有邮件发送等等的方法,没写出来  

 

你可能感兴趣的:(密码加密)