我们正在使用下面的java方法来提供HMAC-> SHA1签名。但是它显示签名在sso控制台中不匹配。请尝试帮助解决这个问题。我知道在java中是否还有其他方法可以使用.disqus使用什么方法从消息和时间戳生成签名 -
/**
* To convert into base16
*
* @param bytes
* @return
*/
private static String toHexString(byte[] bytes) {
Formatter formatter = new Formatter();
for (byte b : bytes) {
formatter.format("%02x", b);
}
return formatter.toString();
}
/**
*
* @param data
* @param key
* @return
* @throws SignatureException
* @throws NoSuchAlgorithmException
* @throws InvalidKeyException
*/
public static String calculateRFC2104HMAC(String data, String key)
throws SignatureException, NoSuchAlgorithmException,
InvalidKeyException {
final String HMAC_SHA1_ALGORITHM = "HmacSHA1";
SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(),
HMAC_SHA1_ALGORITHM);
Mac mac = Mac.getInstance(HMAC_SHA1_ALGORITHM);
mac.init(signingKey);
return toHexString(mac.doFinal(data.getBytes()));
//return DatatypeConverter.printBase64Binary(mac.doFinal(data.getBytes()));
}
答案 0 :(得分:0)
Hmac sha1方法返回encripted message的十六进制字符串。我必须确保传递给方法的密钥是正确的。它解决了这个问题。