用c ++生成SHA256

时间:2015-07-23 11:58:07

标签: c++ sha256

我需要生成一些数据的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;
}

2 个答案:

答案 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)

我会推荐免费的Crypto++库。这是HMAC的示例。