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)

 

 

 

 

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值