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();
    }
    
  • 相关阅读:
    Java从入门到实战之(22)数组之练习
    LeetCode343. 整数拆分
    LeetCode64. 最小路径和
    LeetCode120. 三角形最小路径和
    LeetCode37. 解数独
    实验:通过Telnet访问路由器
    telnet 命令使用方法详解,telnet命令怎么用?
    COBIT、ITIL
    500 internal privoxy error错误怎么解决?
    iPhone12有充电器和耳机吗
  • 原文地址:https://www.cnblogs.com/cheungxiongwei/p/12442374.html
Copyright © 2011-2022 走看看