zoukankan      html  css  js  c++  java
  • 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();
    }
    
  • 相关阅读:
    寒假一:打印沙漏
    秋季学期总结
    三位我尊敬的老师
    自我介绍
    polay计数原理
    2020-2021 ACM-ICPC, Asia Seoul Regional Contest
    2017-2018 ACM-ICPC Northern Eurasia(A.Archery Tournament)
    FTT简单入门板子
    佩尔方程最小解模板
    求组合数
  • 原文地址:https://www.cnblogs.com/cheungxiongwei/p/12442374.html
Copyright © 2011-2022 走看看