我需要生成一些数据的SHA256。我发现this example非常好。现在我的问题是我可以使用自己的密钥生成sha256。
编辑:
首先,抱歉错误的问题。我并不是说要更改用于生成SHA256的密钥。我真的需要的是,将以下java代码转换为c ++
public static String calculateHMAC(String data, String key) throws Exception {
String result;
try {
// get an hmac_sha2 key from the raw key bytes
SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), HMAC_SHA2_ALGORITHM);
// get an hmac_sha1 Mac instance and initialize with the signing key
Mac sha256_HMAC = Mac.getInstance(HMAC_SHA2_ALGORITHM);
sha256_HMAC.init(signingKey);
// compute the hmac on input data bytes
byte[] rawHmac = sha256_HMAC.doFinal(data.getBytes());
// base64-encode the hmac
StringBuilder sb = new StringBuilder();
char[] charArray = Base64.encode(rawHmac);
for ( char a : charArray){
sb.append(a);
}
result = sb.toString();
}
catch (Exception e) {
throw new SignatureException("Failed to generate HMAC : " + e.getMessage());
}
return result;
}
答案 0 :(得分:5)
SHA-256是SHA-2加密散列函数系列的成员,通常从输入消息生成256位或32字节 HASH Code 。
这不是加密机制,它暗示来自 HASH代码,也称为消息摘要或仅仅是摘要< / em>,您无法重新生成消息。
因此, 无密钥 需要使用SHA-256
来生成消息摘要。
此外,哈希函数实际上认为不可能反转,即仅从其哈希值(消息摘要)重新创建输入数据。因此,您无法“解密” HASH消息/消息摘要到其输入消息,这意味着Hashing无法进行反转。例如,
SHA256(plainText) -> digest
然后有{strong> NO 机制,如inverseSHA256
,可以执行以下操作,
inverseSHA256(digest) -> plainText
答案 1 :(得分:2)