07.哈希和信息验证码

7.1 Overview of Hashes and MACs
首先,摘要值不应包含可用于确定原始输入的信息。 为了实现这一点,输入数据中的一位变化应该改变摘要值中的许多位(平均一半)。 其次,构造第二个消息产生相同的哈希值应该是非常困难的。 第三,也很难找到任何两个产生相同散列值的消息。
 
Table 7-1. Message digests and the EVP interface
Hash algorithm
EVP call for getting EVP_MD
String for lookup
Digest length (in bits)
MD2
EVP_md2
md2
128
MD4
EVP_md4
md4
128
MD5
EVP_md5
md5
128
MDC2
EVP_mdc2
mdc2
128
SHA1
EVP_sha1
EVP_dssl
sha1
dssl
160
RIPEMD-160
EVP_ripemd160
ripemd
160
 
函数
 
void EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type);
功能
初始化ctx句柄
参数
 
ctx
 
type
listed Table 7-1
 
 
函数
 
 
void EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *buf, unsigned int len);
功能
用于在散列计算中包含数据
参数
 
ctx
 
buf
计算hash数据
 
len
buf长度
 
 
函数
 
 
void EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *hash, unsigned int *len);
 
功能
一旦散列考虑的所有数据已经传递给EVP_DigestUpdate,
结果散列值可以使用EVP_DigestFinal检索。
参数
 
ctx
 
hash
哈希值将放置在其中的缓冲区。 这个缓冲区应该至少是EVP_MAX_MD_SIZE字节的大小。
 
len
buf长度
 
 
7.3 Using MACs
函数
 
unsigned char *HMAC(const EVP_MD *type, const void *key, int keylen,
const unsigned char *data, int datalen,
unsigned char *hash, unsigned int *hashlen);
功能
产生MAC值
参数
 
type
要使用的消息摘要。
key
包含将使用的密钥的缓冲区。
 
keylen
密钥长度
data
包含将要计算HMAC的数据的缓冲区。
datalen
数据长度
hash
计算的消息摘要将被放置的缓冲区
hashlen
指向一个整数的指针,该整数将接收填充的散列缓冲区的字节数。
 
函数
 
void HMAC_Init(HMAC_CTX *ctx, const void *key, int keylen, const
EVP_MD *type);
 
功能
初始化HMAC对象
参数
 
ctx
ctx对象
key
包含将要使用的密钥的缓冲区。
 
keylen
密钥缓冲区中的字节数将被视为有效的密钥数据。
type
将使用的消息摘要对象。
 
 
函数
 
void HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, int len);
 
功能
正在用于计算MAC的HMAC上下文对象。
参数
 
ctx
ctx对象
data
计算的数据
 
 
len
 
计算数据的长度
 
 
函数
 
void HMAC_Final(HMAC_CTX *ctx, unsigned char *hash, unsigned int *len);
 
 
功能
获取HMAC值
参数
 
ctx
ctx对象
hash
将接收计算出的散列值的缓冲区。
 
 
len
 
hash长度
 
 
7.3.1 Other MACs
posted @ 2018-01-06 16:16  艾小小雨  阅读(514)  评论(0编辑  收藏  举报