隨筆-109  評(píng)論-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?下來(lái)的nounce一定要先做B64的解碼,否則算出來(lái)的結(jié)果對(duì)不上
          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 小小程序程序員混口飯吃 閱讀(1368) 評(píng)論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 古田县| 皋兰县| 株洲县| 迁西县| 嘉峪关市| 泰安市| 广东省| 买车| 保靖县| 东乡族自治县| 龙江县| 郧西县| 饶河县| 尚志市| 诸城市| 甘孜县| 郁南县| 合阳县| 城步| 金川县| 太仓市| 兴隆县| 鹿泉市| 简阳市| 祁东县| 巴马| 武宣县| 肃宁县| 红安县| 二连浩特市| 师宗县| 长垣县| 吉隆县| 隆化县| 盐亭县| 乃东县| 工布江达县| 桓台县| 安丘市| 莲花县| 白山市|