?
?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的解碼,否則算出來的結果對不上
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