针对WEP中CRC不能有效提供数据完整性保护的问题,TKIP 采用了带密钥的消息完整性校验算法MIC, 目前TKIP的 MIC 算法称为 Michael。
    Michael 的认证密钥Kmic是 64 bits,分为左右各 32 bits 用(K0,K1)表示, Michael连接函数将消息M按32 bits分割成M0、M1、M2?Mn, 最后生成64 bits的MIC值, 接收方用共享的K和接收到的消息计算出MIC'与接收到的MIC进行校验, 具体过程如下:

Algorithm 1:Michael message processing
    Input: Key (K0, K1) and message M0,?,MN
    Output: MIC value (V0, V1)
        MICHAEL((K0, K1) , (M0,?,MN))
            (L,R)←(K0, K1)
            for i=0 to N-1 do
                L←L ⊕ Mi
                (L, R)←b( L, R )
            return (L,R)
   Algorithm 2:Michael b function
    Input: (L,R)
    Output: (L,R)
        b(L,R)
        R←R⊕(L <<< 17)
        L←(L + R) mod 2^^32
        R←R⊕XSWAP(L)
        L←(L + R) mod 2^^32
        R←R⊕(L <<< 3)
        L←(L + R) mod 2^^32
        R←R⊕(L >>> 2)
        L←(L + R) mod 2^^32
        return (L,R)
> >>表示32 bits右旋转 (rotation) , <<<表示32 bits左旋转。2^^32表示2的32次方。XSWAP 是一个交换函数, XSWAP (ABCD) =BADC, 这里A、 B、 C、 D表示字节。
具体代码为:
unsigned long rol17(unsigned long w)             // rotate left 17
{
register unsigned long t, q;
    t = w << 17;
    q = (w >> 15);
    return(t|q);
}

unsigned long rol3(unsigned long w)             // rotate left 3
{
register unsigned long t, q;
    t = w << 3;
    q = (w >> 29);
    return(t|q);
}

unsigned long ror2(unsigned long w)             // rotate right 2
{
register unsigned long t, q;
    t = (w >> 2);
    q = w << 30;
    return(t|q);
}

#define    MBLOCK(L, R)                        /
    R = R ^ rol17(L);                    /
    L += R;                            /
    R ^= ((L & 0xff00ff00)>>8)|((L & 0x00ff00ff) << 8);    /
    L += R;                            /
    R ^= rol3(L);                        /
    L += R;                            /
    R ^= ror2(L);                        /
    L += R;

static unsigned long getw(unsigned char *cp)
{
register unsigned long t;

t = 0;
    t = *cp++;
    t |= (*cp++)<<8;
    t |= (*cp++)<<16;
    t |= (*cp++)<<24;
    return(t);
}

void putw(unsigned long w, unsigned char *cp)
{

*cp++ = (short int)w;    // MS compiler forces use of 0xff
    *cp++ = (short int)(w>>8);
    *cp++ = (short int)(w>>16);
    *cp++ = (short int)(w>>24);
    return;
}

// Michael integrity function
// pads the buffer (s) with up to 7 bytes
// if h is non-null, it is prepended to the buffer.
// The function appends an additional 8 bytes of Michael
// returns buffer len (payload+Michael)
//
int
Michael(unsigned char *key, unsigned char *s, int dlen)
{
register unsigned long M;
unsigned long L, R;
int len = dlen;
register unsigned char *sp, *cp;

L = getw(key);        // L = *LL; R = *RR;
    R = getw(key+4);

sp = s;
    sp[len++] = 0x5a;            // message padding
    sp[len++] = 0;                // 4 required
    sp[len++] = 0;
    sp[len++] = 0;
    sp[len++] = 0;
    while (len&0x3) {            // word aligned
        sp[len++] = 0;
    }

sp = s;
    while (len > 0) {
        M = getw(sp);             // M = *mp++; len -= 4;
        sp+=4; len -= 4;
   
        L ^= M;                // Michael block function
        MBLOCK(L, R);
    }
    cp = s+dlen;
    putw(L, (unsigned char *)cp);
    cp = s+dlen+4;
    putw(R, (unsigned char *)cp);
    return(len+8);
}

TKIP中MIC值的算法及实现相关推荐

  1. 关于中值滤波算法,以及C语言实现(转)

    源:关于中值滤波算法,以及C语言实现 1.什么是中值滤波? 中值滤波是对一个滑动窗口内的诸像素灰度值排序,用其中值代替窗口中心象素的原来灰度值,它是一种非线性的图像平滑法,它对脉冲干扰级椒盐噪声的抑制 ...

  2. C语言在BST中找到最接近目标的值的算法(附完整源码)

    C语言在BST中找到最接近目标的值的算法 C语言在BST中找到最接近目标的值的算法完整源码(定义,实现,main函数测试) C语言在BST中找到最接近目标的值的算法完整源码(定义,实现,main函数测 ...

  3. verilog中值滤波算法实现及仿真

    使用verilog语言实现中值滤波算法,并编写testbench进行仿真,产生波形图. 可以使用vivado.ISE.quartusII等软件均可. 对代码.测试代码.仿真结果分别进行截图,如下所示: ...

  4. 高效快速中值滤波算法c语言,快速中值滤波及c语言实现.docx

    . .. 快速中值滤波及c语言实现 学生姓名: 刘 勇 学 号: 6100410218 专业班级: 数媒101 [摘要]本文讨论了用c语言在微机上实现中值滤波及快速算法,在程序设计的过程中充分考虑到程 ...

  5. matlab中基于十字形窗口的滤波算法,#215;字形滤波窗口在Matlab自适应中值滤波算法中的应用 - 21ic中国电子网...

    由于种种原因,图像在生成.传输.变换等过程中往往会受到各种噪声的污染,从而导致图像质量退化.噪声信号的滤波是图像处理的基本任务之一,主要有线性滤波和非线性滤波两种方法.线性滤波方法一般具有低通特性,而 ...

  6. 设计一个算法,删除一个单链表L中元素值最大的结点(假设最大值结点是唯一的)

    设计一个算法,删除一个单链表L中元素值最大的结点(假设最大值结点是唯一的). #include <stdio.h> #include<malloc.h> typedef str ...

  7. Python扩展库scipy中值滤波算法的应用

    中值滤波是数字信号处理.数字图像处理中常用的预处理技术,特点是将信号中每个值都替换为其邻域内的中值,即邻域内所有值排序后中间位置上的值.下面的代码演示了scipy库中signal模块的中值滤波算法的用 ...

  8. 自创算法实现Reporting Service中多值判定

    前提条件:用Reporting Service做过报表,并碰到想确定多选下拉框选了哪些选项却无法确定的情况.如:根据选项显示相应的值. 功能实现:用算法实现Reporting Service中多值判定 ...

  9. 实时高速实现改进型中值滤波算法_爱学术_免费下载

    [摘要]在图像采集和处理过程中会引入噪声,必须先对图像进行预处理.本文介绍一种快速中值滤波算法,该算法在硬件平台上实现实时处理功能.综合考虑,选择现场可编程门阵列(FPGA)作为硬件平台,采用硬件描述 ...

最新文章

  1. 基于Tomcat7、Java、WebSocket的服务器推送聊天室
  2. 面向对象三大特性,六个原则
  3. React学习:脚手架搭建、antd引入-学习笔记
  4. python敏感词过滤代码简单_大型企业都在用,Python实现敏感词过滤
  5. VMware Workstation(虚拟机) V6.0.2 Build 59824 汉化版 |
  6. 移动场景在其缩略图中显示场景中所显示的区域
  7. 珠海格力工厂一线员工待遇如何?
  8. linux下mysql允许远程连接
  9. httpclient4.x 中文版帮助文档,最新官方版翻译版(第一章 下)
  10. 蓝桥杯python青少年_让孩子参加蓝桥杯大赛好吗
  11. ElasticSearch设置字段的keyword属性
  12. 追星女孩彩虹屁情话合集100条 ✔︎ (三)
  13. 深入理解React:懒加载(lazy)实现原理
  14. MySQL limit 2种写法
  15. 关于将Ubuntu下中文目录修改为英文的解决方案
  16. 阿里P8整理Mysql面试题答案,助你面试“脱颖而出”
  17. Protractor AngularJS测试框架教程
  18. Linux系统下运行QT视频播放器示例程序(Media Player Example )
  19. WifiDisplay开启流程
  20. 玩转linux 这些命令就够了

热门文章

  1. ADC 信号调理电路设计——必要措施、实测验证和应用说明(转载)
  2. 设计模式学习笔记(十一)-组合模式
  3. 原创 | 王欣:多维深耕打造数字化银行
  4. 计算机报刊杂志推荐,计算机优秀期刊推荐 | Journal of Cloud Computing
  5. EasyExcel基础使用教程
  6. excel表格排序,4种排序教程全都有
  7. 港股暴涨利好有哪些板块?
  8. 超详细Docker部署SpringBoot+Vue项目(三更博客项目部署)
  9. KITTI结果评测流程
  10. Mastering Selections in Photoshop CC Photoshop CC选区教程 Lynda课程中文字幕