在我们的项目中,我们使用以下 OpenSSL 函数创建 SHA1 哈希,
SHA_CTX ctx;
SHA1_Init (&ctx);
SHA1_Update (&ctx, value, size);
SHA1_Final (returned_hash, &ctx);
我们正在使用一个密钥,并且多次调用 SHA1_Update。
我必须使用 Java 验证该哈希。我写了以下功能,
public static Mac hmacSha1Init(String key) {
Mac mac = null;
try {
// Get an hmac_sha1 key from the raw key bytes
byte[] keyBytes = key.getBytes();
SecretKeySpec signingKey = new SecretKeySpec(keyBytes, "HmacSHA1");
// Get an hmac_sha1 Mac instance and initialize with the signing key
mac = Mac.getInstance("HmacSHA1");
mac.init(signingKey);
} catch (Exception e) {
throw new RuntimeException(e);
}
return mac;
}
public static Mac hmacSha1Update(String value, Mac mac) {
try {
// update hmac with value
mac.update(value.getBytes());
} catch (Exception e) {
throw new RuntimeException(e);
}
return mac;
}
public static String hmacSha1Final( Mac mac) {
try {
// Compute the hmac on input data bytes
byte[] rawHmac = mac.doFinal();
return Base64.encodeBase64String(rawHmac);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
我正在使用带有密钥的 hmacSha1Init 并使用 Mac 多次更新,最后使用 mac 调用 hmacSha1Final。
前任。
Mac mac = hmacSha1Init("ssdsdsdioj298932276302392pdsdsfsdfs");
mac = hmacSha1Update("value1", mac);
mac = hmacSha1Update("value2", mac);
mac = hmacSha1Update("value3"', mac);
String hash = hmacSha1Final(mac);
但我没有得到通过 OpenSSL 生成的相同 SHA1 哈希值。网络上的文档非常有限。有人可以指导我吗