隨筆-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 小小程序程序員混口飯吃 閱讀(1360) 評(píng)論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 峨边| 囊谦县| 沽源县| 和田市| 潍坊市| 正宁县| 江华| 鹤庆县| 怀柔区| 离岛区| 将乐县| 沈阳市| 任丘市| 昭觉县| 夏津县| 萝北县| 刚察县| 星子县| 汽车| 双流县| 武平县| 淳化县| 鸡东县| 若羌县| 兰西县| 广汉市| 开鲁县| 凤凰县| 普格县| 无极县| 海城市| 厦门市| 贺州市| 陇西县| 庄浪县| 禄丰县| 巴楚县| 习水县| 海口市| 石首市| 高淳县|