山狮OSX 10.8.3 EXC_CRASH上的HMAC

时间:2015-11-29 03:35:42

标签: c++ macos openssl hmac

使用OpenSSL的HMAC功能寻求一些帮助。目前此功能在HMAC呼叫上失败。仅适用于OSX。 Linux和Windows操作系统都正常工作。

QString tradingDialog::HMAC_SHA512_SIGNER(QString UrlToSign, QString Secret){

    QString retval = "";

    QByteArray byteArray = UrlToSign.toUtf8();
    const char* URL = byteArray.constData();

    QByteArray byteArrayB = Secret.toUtf8();
    const char* Secretkey = byteArrayB.constData();

    const EVP_MD *md = EVP_sha512();
    unsigned char* digest = NULL;

    // Be careful of the length of string with the choosen hash engine. SHA1 produces a 20-byte hash value which rendered as 40 characters.
    // Change the length accordingly with your choosen hash engine
    char mdString[129] = { 0 };

    // Using sha512 hash engine here.
    digest = HMAC(md, Secretkey, strlen( Secretkey), (unsigned char*) URL, strlen( URL), NULL, NULL);

    for(int i = 0; i < 64; i++){
        sprintf(&mdString[i*2], "%02x", (unsigned int)digest[i]);
    }
    retval = mdString;
    return retval;
}

1 个答案:

答案 0 :(得分:2)

你不能说出osx上的问题,但看起来你并没有终止mdString,所以尝试将其更改为

char mdString[129] = { 0 };

您链接的崩溃日志显示您的应用程序正在中止,因为堆栈已损坏(我假设在退出时会发生这种情况)。

我会说最后的sprintf导致了这个问题,因为它会在mdString数组结束后添加一个空字节。尝试上述修改,看看是否有帮助。

这应该在所有平台上崩溃,但我猜你得到了#34;幸运&#34;。