依赖HttpClient、Apache Common Codec
package xxx;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
import org.apache.http.client.methods.HttpRequestBase;
public class BaseAuthorizationUtils
{
public static void generateAuthAndDateHeader(HttpRequestBase
request, String partnerId, String secret) {
Date
sysdate = new Date();
SimpleDateFormat
df = new SimpleDateFormat(
"EEE\', \'dd\' \'MMM\' \'yyyy\' \'HH:mm:ss\' \'z" ,
Locale.US);
df.setTimeZone(TimeZone.getTimeZone(
"GMT" ));
String
date = df.format(sysdate);
String
string_to_sign = request.getMethod().toUpperCase() +
" " +
request.getURI().getPath() +
"\n" +
date;
String
sig = secret;
String
encoding =
"" ;
try {
byte []
authorization = getSignature(string_to_sign.getBytes(), sig.getBytes());
encoding
= new String(Base64.encodeBase64(authorization));
} catch (Exception
var10) {
return ;
}
String
authorization1 =
"MWS " +
partnerId +
":" +
encoding;
request.addHeader(
"Authorization" ,
authorization1);
request.addHeader(
"Date" ,
date);
}
public static byte []
getSignature( byte []
data, byte []
key) throws InvalidKeyException,
NoSuchAlgorithmException {
SecretKeySpec
signingKey = new SecretKeySpec(key,
"HmacSHA1" );
Mac
mac = Mac.getInstance(
"HmacSHA1" );
mac.init(signingKey);
byte []
rawHmac = mac.doFinal(data);
return rawHmac;
}
}
|
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Net;
using
System.Security.Cryptography;
using
System.IO;
public static void generateAuthAndDateHeader(HttpWebRequest
request, string partnerId, string secret)
{
DateTime
nowDate = DateTime.UtcNow;
string
date = nowDate.GetDateTimeFormats(
'r' )[ 0 ].ToString(); //Sat,
05 Nov 2005 14:06:25 GMT
string
string_to_sign = request.Method.ToUpper() +
" " +
request.RequestUri.AbsolutePath +
"\n" +
date;
string
sig = secret;
string
encoding =
"" ;
byte []
authorization = getSignature(Encoding.UTF8.GetBytes(string_to_sign),
Encoding.UTF8.GetBytes(sig));
encoding
= Convert.ToBase64String(authorization);
String
authorization1 =
"MWS " +
partnerId +
":" +
encoding;
request.Headers.Add(
"Authorization" ,
authorization1);
request.Date
= nowDate;
}
public static byte []
getSignature( byte []
data, byte []
key)
{
HMACSHA1
hmac = new HMACSHA1(key);
CryptoStream
cs = new CryptoStream(Stream.Null,
hmac, CryptoStreamMode.Write);
cs.Write(data, 0 ,
data.Length);
cs.Close();
return hmac.Hash;
//HMACSHA1
myHMACSHA1 = new HMACSHA1(key);
//byte[]
rawHmac = myHMACSHA1.ComputeHash(data);
//return
rawHmac;
}
|
<?php
class AuthorizationUtils
{
public
static $partnerId = '';
public
static $clientSecret = '';
private function
buildSign($method,$uri,$date) {
$string_to_sign
= $method . ' ' . $uri . "\n" . $date;
$signature
= base64_encode(hash_hmac('sha1', $string_to_sign, self::$clientSecret, true));
return 'MWS ' . self::$partnerId . ':' . $signature;;
}
private function
validSign(
)
{
if($_SERVER['HTTP_AUTHORIZATION'] == $this->buildSign( $_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI'], $_SERVER['HTTP_DATE'])){
true
;
return false;
}
}
|