<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    瘋狂

    STANDING ON THE SHOULDERS OF GIANTS
    posts - 481, comments - 486, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    md5加鹽驗證用戶密碼的小例子

    Posted on 2010-02-09 13:13 瘋狂 閱讀(2571) 評論(1)  編輯  收藏 所屬分類: java安全

    package com.test;

    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.nio.ByteBuffer;
    import java.nio.channels.FileChannel;
    import java.security.MessageDigest;
    import java.security.SecureRandom;
    import java.util.Arrays;

    //使用md5和鹽驗證安全登陸
    public class Test_MD5 {

     private static final String PWD_FILE = "c:\\pwd.txt";
     /**
      * @param args
      */
     public static void main(String[] args) throws Exception{
      
           
      //用戶創(chuàng)建密碼,服務(wù)端雜湊并保存
      saveMessagePwdInFile("admin");
      ////驗證用戶輸入
      checkUserPwd("admin1");
        
      
     }
     public static void saveMessagePwdInFile(String inputPwd)throws Exception{
      byte[] salt = new byte[8];
      SecureRandom random = new SecureRandom();
      random.nextBytes(salt);
      System.out.println("生成的鹽:"+Arrays.toString(salt));
      
      MessageDigest digest = MessageDigest.getInstance("MD5");//當然可以使用SHA(160位),MD5(128位)
      digest.update(salt);
      digest.update(inputPwd.getBytes("utf-8"));
      byte[] afterMd5 = digest.digest();
      System.out.println("雜湊值:"+Arrays.toString(afterMd5));
      
      //鹽和雜湊值寫入文件
      FileOutputStream outputStream = new FileOutputStream(new File(PWD_FILE));
      FileChannel channel = outputStream.getChannel();
      channel.write(ByteBuffer.wrap(salt));
      channel.write(ByteBuffer.wrap(afterMd5));
      outputStream.flush();
      outputStream.close();
      System.out.println("保存信息完畢...");
      
     }
     public static void checkUserPwd(String pwd)throws Exception{
      ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
      FileInputStream fileInputStream = new FileInputStream(new File(PWD_FILE));
      FileChannel channel2 = fileInputStream.getChannel();
      ByteBuffer dst = ByteBuffer.allocate(1024);
      int l = -1;
      while((l=channel2.read(dst))!=-1){
       dst.flip();
       byteArrayOutputStream.write(dst.array(),0,l);
       dst.compact();
       dst.clear();
      }
      fileInputStream.close();
      byte[] pwdbyte = byteArrayOutputStream.toByteArray();
      byteArrayOutputStream.reset();
      
      byte[] salt2 = new byte[8];
      System.arraycopy(pwdbyte, 0, salt2, 0, 8);
      System.out.println("從文件獲取鹽:"+Arrays.toString(salt2));
      byte[] pwdinfile = new byte[pwdbyte.length-8];
      System.arraycopy(pwdbyte, 8, pwdinfile, 0, pwdbyte.length-8);
      System.out.println("從文件獲取雜湊值:"+Arrays.toString(pwdinfile));
         byte[] toyz = getUserMd5Pwd(salt2,pwd);
         System.out.println(Arrays.equals(toyz, pwdinfile)==true?"登陸成功":"密碼有誤,登錄失敗...");
     }
     
       public static byte[] getUserMd5Pwd(byte[] salt,String pwd) throws Exception{
        MessageDigest digest2 = MessageDigest.getInstance("MD5");
      digest2.update(salt);
         digest2.update(pwd.getBytes("utf-8"));
         byte[] toyz = digest2.digest();
        
         System.out.println("用戶輸入雜湊值:"+Arrays.toString(toyz));
         return toyz;
       }
    }


    評論

    # re: md5加鹽驗證用戶密碼的小例子  回復(fù)  更多評論   

    2013-06-10 15:30 by trt
    dfghrthtrhrhytrg
    主站蜘蛛池模板: 亚洲爆乳无码专区www| 亚洲免费福利视频| 亚洲色偷偷色噜噜狠狠99网| 伊人久久精品亚洲午夜| 午夜高清免费在线观看| 亚洲最大免费视频网| 久久精品免费一区二区三区| 亚洲av成人一区二区三区观看在线| 亚洲成AV人综合在线观看| 亚洲国产第一站精品蜜芽| 亚洲日韩国产一区二区三区| 日韩免费电影在线观看| 91免费资源网站入口| 五月亭亭免费高清在线| 老司机69精品成免费视频| a高清免费毛片久久| 日韩大片在线永久免费观看网站 | 亚洲AV无码男人的天堂| 亚洲天堂2016| 亚洲无圣光一区二区| 亚洲电影一区二区| 亚洲色WWW成人永久网址| 亚洲国产电影av在线网址| 免费人妻av无码专区| 又大又粗又爽a级毛片免费看| 日本免费一二区在线电影| 在线观看成人免费视频| 午夜神器成在线人成在线人免费| 黄页网站在线观看免费高清| 亚洲一级毛片免费看| 四虎在线最新永久免费| 精品久久8x国产免费观看| 国产电影午夜成年免费视频| 免费福利网站在线观看| 免费99精品国产自在现线| 一二三四免费观看在线电影| 最近免费中文字幕4| 国产大片线上免费看| 亚洲AV无码乱码在线观看性色扶| 亚洲欧洲中文日韩av乱码| 亚洲色精品vr一区二区三区 |