当前位置:   article > 正文

HMACMD5加密方法的简要过程

hmacmd5

HMAC-MD5算法

原理:是采用 密钥 + 散列函数(hmac || sha)方式进行加密的一种加密算法

解释

md5 和 sha-1这两个散列函数就是用来分割数据滴。

注:

分割那么一大块数据,其实只需要64字节(也就是 64 * 8 = 512位)。所以呢由于数据块的长度是64字节,咱用密钥+散列函数进行摘要(digest)的时候的数据完整性,最终加进数据的密钥必须保证为64字节

密钥(key)的长度可以是小于等于数据块长度的任何正整数值。

注:

if (key.length >block.length (数据块长度64)){

        key = 散列函数(key)(其中得到的结果key的长度和散列函数输出数据的长度相等,md5 是 16字节,sha是20字节)

}

 

过程:

假定key ,keylength,block,blockLength,正常分组长度 block_bytes

散列函数  sanlie()

 

NSData *dataKey = key.data;

//如果key的长度比分组长度大

if(keylength >  block_bytes)

{

     得到的字节数据data  = sanlie(key);

    dataKey = [data bytesWithLength : 16]    取其中16字节长的数据

}

if (keylength < blocksize){

         datakey = [datakey appendBytes:0 length:blocksize - keylength];

}

//定义两个长度为256的数组元素值为0的数组

o_key_pad [256] = {0x00}; 

i_key_pad [256] = {0x00}; 

 

//对于dataKey的每一个字节分别和0x5c 0x36进行 进行异或运算  得到两个结果 o_key_pad[i] 和i_key_pad[i]

   unsigned char *cKey = (unsigned char *)dataKey.bytes;

    for (int i = 0; i < blockSize; i++) {

        o_key_pad[i] = 0x5c ^ cKey[i];

        i_key_pad[i] = 0x36 ^ cKey[i];

    }

//将 要加密的数据data 拼接到i_key_pad数组后面得到数据data1

data1 = i_key_pad + data;

//对拼接后得到的 data1 进行一次散列运算

data1 = sanlie(data1)

//将data1 和 o_key_pad拼接起来得到 data2

data2 = data1 + o_key_pad

//对拼接后得到的 data2 进行一次散列运算

data2 = sanlie(data2)

//data2为最终的加密数据

 

步骤:

(1)将key 用0填补为64字节的字符串(str)

(2)将上一步的结果字符串(str) 和 0x36 进行异或运算 得到结果字符串(istr)

(3)将数据流(data) 附加到 上一步的结果字符串(istr)

(4)做散列运算于第(3)步的结果字符串(istr)

(5)将第(1)步得到的字符串(str)与 ox5c进行异或运算 得到结果字符串(ostr)

(6)将第(4)步得到的结果(istr)附加到第五步的结果字符串的结尾(ostr)

(7)对第(6)步得到的ostr 做散列运算得到最终结果(out)

 

 

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/380191
推荐阅读
相关标签
  

闽ICP备14008679号