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
小小程序程序员混口饭吃 阅读(1353)
评论(0) 编辑 收藏 所属分类:
java