// 獲得js signature
public
static
String getSignature(String jsapi_ticket, String timestamp,
String nonce, String jsurl)
throws
IOException {
/****
* 對(duì) jsapi_ticket、 timestamp 和 nonce 按字典排序 對(duì)所有待簽名參數(shù)按照字段名的 ASCII
* 碼從小到大排序(字典序)后,使用 URL 鍵值對(duì)的格式(即key1=value1&key2=value2…)拼接成字符串
* string1。這里需要注意的是所有參數(shù)名均為小寫字符。 接下來對(duì) string1 作 sha1 加密,字段名和字段值都采用原始值,不進(jìn)行
* URL 轉(zhuǎn)義。即 signature=sha1(string1)。
* **如果沒有按照生成的key1=value&key2=value拼接的話會(huì)報(bào)錯(cuò)
*/
String[] paramArr =
new
String[] {
"jsapi_ticket="
+ jsapi_ticket,
"timestamp="
+ timestamp,
"noncestr="
+ nonce,
"url="
+ jsurl };
Arrays.sort(paramArr);
// 將排序后的結(jié)果拼接成一個(gè)字符串
String content = paramArr[
0
].concat(
"&"
+paramArr[
1
]).concat(
"&"
+paramArr[
2
])
.concat(
"&"
+paramArr[
3
]);
System.out.println(
"拼接之后的content為:"
+content);
String gensignature =
null
;
try
{
MessageDigest md = MessageDigest.getInstance(
"SHA-1"
);
// 對(duì)拼接后的字符串進(jìn)行 sha1 加密
byte
[] digest = md.digest(content.toString().getBytes());
gensignature = byteToStr(digest);
}
catch
(NoSuchAlgorithmException e) {
e.printStackTrace();
}
// 將 sha1 加密后的字符串與 signature 進(jìn)行對(duì)比
if
(gensignature !=
null
) {
return
gensignature;
// 返回signature
}
else
{
return
"false"
;
}
// return (String) (ciphertext != null ? ciphertext: false);
}
/**
* 將字節(jié)數(shù)組轉(zhuǎn)換為十六進(jìn)制字符串
*
* @param byteArray
* @return
*/
private
static
String byteToStr(
byte
[] byteArray) {
String strDigest =
""
;
for
(
int
i =
0
; i < byteArray.length; i++) {
strDigest += byteToHexStr(byteArray[i]);
}
return
strDigest;
}
/**
* 將字節(jié)轉(zhuǎn)換為十六進(jìn)制字符串
*
* @param mByte
* @return
*/
private
static
String byteToHexStr(
byte
mByte) {
char
[] Digit = {
'0'
,
'1'
,
'2'
,
'3'
,
'4'
,
'5'
,
'6'
,
'7'
,
'8'
,
'9'
,
'A'
,
'B'
,
'C'
,
'D'
,
'E'
,
'F'
};
char
[] tempArr =
new
char
[
2
];
tempArr[
0
] = Digit[(mByte >>>
4
) &
0X0F
];
tempArr[
1
] = Digit[mByte &
0X0F
];
String s =
new
String(tempArr);
return
s;
}
聯(lián)系客服