HMAC

//密钥散列消息认证码
QString HMAC(QByteArray baseString, QByteArray key, QCryptographicHash::Algorithm type = QCryptographicHash::Algorithm::Sha256);

QString HMAC(QByteArray baseString, QByteArray key, QCryptographicHash::Algorithm type)
{
    //HMAC-SHA-1 block size
    int blockSize = 64;
    //if key is longer than block size (64), reduce key length with SHA-1 compression
    if (key.length() > blockSize)
    {
        key = QCryptographicHash::hash(key, type);
    }
    //initialize inner padding with char "6"
    QByteArray innerPadding(blockSize, char(0x36));
    //initialize outer padding with char "/"
    QByteArray outerPadding(blockSize, char(0x5c));
    //ascii characters 0x36 ("6") and 0x5c ("/") are selected because they have large
    //Hamming distance (http://en.wikipedia.org/wiki/Hamming_distance)
    for (int i = 0; i < key.length(); i++) 
    {
        //XOR operation between every byte in key and innerpadding, of key length
        innerPadding[i] = innerPadding[i] ^ key.at(i);
        //XOR operation between every byte in key and outerpadding, of key length
        outerPadding[i] = outerPadding[i] ^ key.at(i);
    }
    QByteArray total = outerPadding;
    QByteArray part = innerPadding;
    part.append(baseString);
    total.append(QCryptographicHash::hash(part, type));
    QByteArray hashed = QCryptographicHash::hash(total, type);
    return QByteArray::fromHex(hashed.toHex()).toHex();
}

原文链接: https://www.cnblogs.com/cheungxiongwei/p/12442374.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    HMAC

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/334247

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午9:33
下一篇 2023年3月1日 下午9:34

相关推荐