Java 中的 HMAC SHA-384
HMAC SHA-384 in Java
我正在尝试翻译 Python 中的这行代码:
signature = hmac.new("1234abcd", b64, hashlib.sha384).hexdigest()
我正在尝试使用 SHA-384 获取带有密钥的字符串的哈希值。但是,我正在尝试这样做 Java,有人知道怎么做吗?
此外,我被要求提供随机数。有什么要求吗?
您可以使用 MessageDigest
方法将字节转换为十六进制:
private static final String HMAC_SHA1_ALGORITHM = "HmacSHA384";
private static String bytesToHex(final byte[] hash) {
final StringBuffer hexString = new StringBuffer();
for (int i = 0; i < hash.length; i++) {
final String hex = Integer.toHexString(0xff & hash[i]);
if (hex.length() == 1) {
hexString.append('0');
}
hexString.append(hex);
}
return hexString.toString();
}
public static void main(final String... args) throws NoSuchAlgorithmException, InvalidKeyException {
final String nonce = "nonce";
final String message = "test string";
SecretKeySpec signingKey = new SecretKeySpec(nonce.getBytes(), HMAC_SHA1_ALGORITHM);
final Mac mac = Mac.getInstance(HMAC_SHA1_ALGORITHM);
mac.init(signingKey);
System.out.println(bytesToHex(mac.doFinal(message.getBytes())));
}
我正在尝试翻译 Python 中的这行代码:
signature = hmac.new("1234abcd", b64, hashlib.sha384).hexdigest()
我正在尝试使用 SHA-384 获取带有密钥的字符串的哈希值。但是,我正在尝试这样做 Java,有人知道怎么做吗?
此外,我被要求提供随机数。有什么要求吗?
您可以使用 MessageDigest
方法将字节转换为十六进制:
private static final String HMAC_SHA1_ALGORITHM = "HmacSHA384";
private static String bytesToHex(final byte[] hash) {
final StringBuffer hexString = new StringBuffer();
for (int i = 0; i < hash.length; i++) {
final String hex = Integer.toHexString(0xff & hash[i]);
if (hex.length() == 1) {
hexString.append('0');
}
hexString.append(hex);
}
return hexString.toString();
}
public static void main(final String... args) throws NoSuchAlgorithmException, InvalidKeyException {
final String nonce = "nonce";
final String message = "test string";
SecretKeySpec signingKey = new SecretKeySpec(nonce.getBytes(), HMAC_SHA1_ALGORITHM);
final Mac mac = Mac.getInstance(HMAC_SHA1_ALGORITHM);
mac.init(signingKey);
System.out.println(bytesToHex(mac.doFinal(message.getBytes())));
}