【问题标题】:Generate SHA256 in c++在 C++ 中生成 SHA256
【发布时间】:2021-09-28 04:31:50
【问题描述】:

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

【问题讨论】:

  • sha 是一个哈希函数而不是一个加密方案
  • 谢谢。标记已删除。
  • 那你的“自己的钥匙”是什么意思?
  • 您是否将盐与加密密钥混合在一起?
  • 你为什么要改变它? SHA256 的全部意义在于,任何人都可以在一段数据上运行它,并将结果与​​已知的良好值进行比较,以确认数据的完整性。

标签: c++ sha256


【解决方案1】:

编辑(因为 OP 改变了问题):

有很多 C++ 库可用于加密操作:

  1. OpenSSL(我个人的选择,我们在行业产品中使用这个库)。
  2. Crypto++.

这是Generate sha256 with OpenSSL and C++ 的示例。

旧答案:

SHA-256 是SHA-2 加密散列函数家族的成员,它通常从输入消息中生成 256 位或 32 字节的 HASH 代码。

这不是“加密”机制,这意味着,从 HASH(也称为消息摘要或摘要)您无法重新生成消息。

因此,我们不需要任何“密钥”来生成SHA-256 消息摘要。

此外,散列函数实际上被认为不可能反转,即仅从其散列值(消息摘要)重新创建输入数据。因此,您无法将 HASH 消息/消息摘要“解密”到其输入消息,从而得出结论,哈希不可能进行反转。例如,

SHA256(plainText) -> digest

然后有像inverseSHA256这样的NO机制可以做到以下几点,

// we cannot do the following
inverseSHA256(digest) -> plainText

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-23
      • 2011-01-16
      • 1970-01-01
      • 1970-01-01
      • 2016-10-10
      相关资源
      最近更新 更多