Crypto.HmacSHA256 java里怎么用
时间: 2024-04-23 12:23:01 浏览: 14
在Java中,可以使用Java Cryptography Architecture (JCA)提供的javax.crypto.Mac类来计算HMAC-SHA256哈希值。具体实现方式如下:
```
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
public class HmacSha256Example {
public static void main(String[] args) {
String message = "Hello World!";
String secret = "mysecretkey";
String algorithm = "HmacSHA256";
try {
SecretKeySpec secretKeySpec = new SecretKeySpec(secret.getBytes(), algorithm);
Mac mac = Mac.getInstance(algorithm);
mac.init(secretKeySpec);
byte[] hash = mac.doFinal(message.getBytes());
System.out.println("HMAC-SHA256 hash: " + bytesToHex(hash));
} catch (NoSuchAlgorithmException | InvalidKeyException e) {
e.printStackTrace();
}
}
private static final char[] HEX_ARRAY = "0123456789abcdef".toCharArray();
private static String bytesToHex(byte[] bytes) {
char[] hexChars = new char[bytes.length * 2];
for (int i = 0; i < bytes.length; i++) {
int v = bytes[i] & 0xFF;
hexChars[i * 2] = HEX_ARRAY[v >>> 4];
hexChars[i * 2 + 1] = HEX_ARRAY[v & 0x0F];
}
return new String(hexChars);
}
}
```
在上述代码中,我们首先定义了消息和密钥,然后通过SecretKeySpec将密钥转换为SecretKey对象。接着我们获取HmacSHA256算法的Mac实例,然后通过init方法将SecretKey对象传入Mac实例进行初始化。最后,我们使用doFinal方法计算HMAC-SHA256哈希值,并将其打印输出。需要注意的是,为了将哈希值转换为十六进制字符串,我们定义了一个bytesToHex方法。