隨筆-109  評論-187  文章-25  trackbacks-0

          ?

          ?1 import ?java.io.BufferedReader;
          ?2 import ?java.io.InputStreamReader;
          ?3 import ?java.security.MessageDigest;
          ?4
          ?5 import ?sun.misc.BASE64Decoder;
          ?6 import ?sun.misc.BASE64Encoder;
          ?7
          ?8 public ? class ?ConvertNounce? {
          ?9
          10 ???? // ?Digest?=?H(B64(H(username:password)):nonce)
          11 ???? // ?b1=B64(H(username:password));
          12 ???? //
          13 ???? //
          14 ???? /**
          15 ?????*? @param ?args
          16 ????? */

          17 ???? public ? static ? void ?main(String[]?args)? throws ?Exception? {
          18 ????????
          19
          20 ????????
          21 ???? // ????if(args.length!=3)?throw?new?Exception("args?is?wrong?,there?is?must?by?three?args?:username?password?nextNounce");
          22
          23 ????????InputStreamReader?reader? = ? new ?InputStreamReader(System.in);
          24 ????????BufferedReader?input? = ? new ?BufferedReader(reader);
          25 ????
          26 ????????
          27 ????????System.out.println( " input?username: " );
          28 ????????String?username? = input.readLine();
          29 ????????System.out.println( " input?password: " );
          30 ????????String?pwd? = ?input.readLine();
          31 ????????System.out.println( " input?nextNounce: " );
          32 ????????
          33 ????????String?serverNounce? = ?input.readLine();
          34 ????????String?clientNounce? = ? null ;
          35
          36 ????????System.out.println( "" );
          37 ????????
          38 ????????System.out.println( " userName= " + username);
          39 ????????System.out.println( " password= " + pwd);
          40 ????????System.out.println( " nextNounce= " + serverNounce);
          41 ???????? byte []?b1? = ?calculateDigestAndEcode64(username,?pwd);
          42 ????????
          43 ???? // ????System.out.println("b1="+new?String(b1));
          44 ????????
          45 ???????? // server?下來的nounce一定要先做B64的解碼,否則算出來的結(jié)果對不上
          46 ????????serverNounce? = new ?String( new ?BASE64Decoder().decodeBuffer(serverNounce));
          47 ????????
          48 ???? // ????System.out.println(serverNounce);
          49
          50 ???????? byte []?bserverNounce? = ?serverNounce.getBytes();
          51
          52 ???????? byte []?buf? = ? new ? byte [b1.length? + ? 1 ? + ?bserverNounce.length];
          53
          54 ????????System.arraycopy(b1,? 0 ,?buf,? 0 ,?b1.length);
          55
          56 ????????buf[b1.length]? = ?( byte )? ' : ' ;
          57 ????????System.arraycopy(bserverNounce,? 0 ,?buf,?b1.length + 1 ,
          58 ????????????????????????bserverNounce.length);
          59 ????????MessageDigest?md? = ?MessageDigest.getInstance( " MD5 " );
          60 ????????
          61 ???? // ????System.out.println(new?String(buf));
          62
          63 ???????? byte []?digest? = ?md.digest(buf);
          64 ????????
          65 ???? // ????System.out.println(new?String(digest));
          66
          67 ????????clientNounce? = ? new ?BASE64Encoder().encode(digest);
          68 ????????System.out.println( "" );
          69 ????????System.out.println( " result?Nounce= " + clientNounce);
          70 ????????
          73 ????}

          74
          75 ???? public ? static ? byte []?calculateDigestAndEcode64(String?username,
          76 ????????????String?password)? throws ?Exception? {
          77
          78 ????????MessageDigest?md? = ?MessageDigest.getInstance( " MD5 " );
          79 ????????String?cred? = ? "" ;
          80 ???????? if ?(username? != ? null )? {
          81 ????????????cred? = ?username.trim();
          82 ????????}

          83 ????????cred? += ? " : " ;
          84 ???????? if ?(password? != ? null )? {
          85 ????????????cred? += ?password.trim();
          86 ????????}

          87 ???? // ????System.out.println(cred);
          88 ???????? // ?System.out.println(new?String(md.digest(cred.getBytes())));
          89 ???????? return ? new ?BASE64Encoder().encode(md.digest(cred.getBytes()))
          90 ????????????????.getBytes();
          91 ????}

          92 ????
          93 ????
          94
          95 }

          96
          posted on 2007-01-11 14:57 小小程序程序員混口飯吃 閱讀(1360) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 曲麻莱县| 洛隆县| 醴陵市| 胶州市| 平山县| 土默特左旗| 秀山| 新沂市| 鄂尔多斯市| 屏东县| 庄浪县| 商城县| 收藏| 兰州市| 绥滨县| 陵川县| 鹤壁市| 玛沁县| 怀仁县| 英山县| 天水市| 万载县| 古浪县| 轮台县| 开原市| 来安县| 开平市| 兴义市| 玉溪市| 临夏市| 什邡市| 衡山县| 德兴市| 木兰县| 淳安县| 西丰县| 博湖县| 涟源市| 南开区| 和政县| 齐河县|