SHA1
public class SHA1 {
private static final Logger logger = LogManager.getLogger(SHA1.class);
/**
* 用SHA1算法生成安全簽名
* @param token 票據
* @param timestamp 時間戳
* @param nonce 隨機字符串
* @param encrypt 密文,對明文消息msg加密處理後的得到的
* @return 安全簽名
* @throws AesException
*/
public static String getSHA1(String token, String timestamp, String nonce, String encrypt) throws AesException {
try {
String[] array = new String[] { token, timestamp, nonce, encrypt };
StringBuffer sb = new StringBuffer();
// 字符串排序
Arrays.sort(array);
for (int i = 0; i < 4; i++) {
sb.append(array[i]);
}
String str = sb.toString();
// SHA1簽名生成
MessageDigest md = MessageDigest.getInstance("SHA-1");
md.update(str.getBytes());
byte[] digest = md.digest();
StringBuffer hexstr = new StringBuffer();
String shaHex ;
for (int i = 0; i < digest.length; i++) {
shaHex = Integer.toHexString(digest[i] & 0xFF);
if (shaHex.length() < 2) {
hexstr.append(0);
}
hexstr.append(shaHex);
}
return hexstr.toString();
} catch (Exception e) {
e.printStackTrace();
throw new AesException(AesException.ComputeSignatureError);
}
}
public static String getSHA1(String str) throws AesException {
try {
MessageDigest digest = java.security.MessageDigest.getInstance("SHA-1");
digest.update(str.getBytes());
byte messageDigest[] = digest.digest();
// Create Hex String
StringBuffer hexString = new StringBuffer();
// 字節數組轉換爲 十六進制 數
for (int i = 0; i < messageDigest.length; i++) {
String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
if (shaHex.length() < 2) {
hexString.append(0);
}
hexString.append(shaHex);
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
throw new AesException(AesException.ComputeSignatureError);
}
}
}
AesException
@SuppressWarnings("serial")
public class AesException extends RuntimeException {
public final static int OK = 0;
public final static int ValidateSignatureError = -40001;
public final static int ParseXmlError = -40002;
public final static int ComputeSignatureError = -40003;
public final static int IllegalAesKey = -40004;
public final static int ValidateAppidError = -40005;
public final static int EncryptAESError = -40006;
public final static int DecryptAESError = -40007;
public final static int IllegalBuffer = -40008;
//public final static int EncodeBase64Error = -40009;
//public final static int DecodeBase64Error = -40010;
//public final static int GenReturnXmlError = -40011;
private int code;
private static String getMessage(int code) {
switch (code) {
case ValidateSignatureError:
return "簽名驗證錯誤";
case ParseXmlError:
return "xml解析失敗";
case ComputeSignatureError:
return "sha加密生成簽名失敗";
case IllegalAesKey:
return "SymmetricKey非法";
case ValidateAppidError:
return "appid校驗失敗";
case EncryptAESError:
return "aes加密失敗";
case DecryptAESError:
return "aes解密失敗";
case IllegalBuffer:
return "解密後得到的buffer非法";
// case EncodeBase64Error:
// return "base64加密錯誤";
// case DecodeBase64Error:
// return "base64解密錯誤";
// case GenReturnXmlError:
// return "xml生成失敗";
default:
return null; // cannot be
}
}
public int getCode() {
return code;
}
public AesException(int code) {
super(getMessage(code));
this.code = code;
}
}