TKIP中MIC值的算法及实现
针对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值的算法及实现相关推荐
- 关于中值滤波算法,以及C语言实现(转)
源:关于中值滤波算法,以及C语言实现 1.什么是中值滤波? 中值滤波是对一个滑动窗口内的诸像素灰度值排序,用其中值代替窗口中心象素的原来灰度值,它是一种非线性的图像平滑法,它对脉冲干扰级椒盐噪声的抑制 ...
- C语言在BST中找到最接近目标的值的算法(附完整源码)
C语言在BST中找到最接近目标的值的算法 C语言在BST中找到最接近目标的值的算法完整源码(定义,实现,main函数测试) C语言在BST中找到最接近目标的值的算法完整源码(定义,实现,main函数测 ...
- verilog中值滤波算法实现及仿真
使用verilog语言实现中值滤波算法,并编写testbench进行仿真,产生波形图. 可以使用vivado.ISE.quartusII等软件均可. 对代码.测试代码.仿真结果分别进行截图,如下所示: ...
- 高效快速中值滤波算法c语言,快速中值滤波及c语言实现.docx
. .. 快速中值滤波及c语言实现 学生姓名: 刘 勇 学 号: 6100410218 专业班级: 数媒101 [摘要]本文讨论了用c语言在微机上实现中值滤波及快速算法,在程序设计的过程中充分考虑到程 ...
- matlab中基于十字形窗口的滤波算法,#215;字形滤波窗口在Matlab自适应中值滤波算法中的应用 - 21ic中国电子网...
由于种种原因,图像在生成.传输.变换等过程中往往会受到各种噪声的污染,从而导致图像质量退化.噪声信号的滤波是图像处理的基本任务之一,主要有线性滤波和非线性滤波两种方法.线性滤波方法一般具有低通特性,而 ...
- 设计一个算法,删除一个单链表L中元素值最大的结点(假设最大值结点是唯一的)
设计一个算法,删除一个单链表L中元素值最大的结点(假设最大值结点是唯一的). #include <stdio.h> #include<malloc.h> typedef str ...
- Python扩展库scipy中值滤波算法的应用
中值滤波是数字信号处理.数字图像处理中常用的预处理技术,特点是将信号中每个值都替换为其邻域内的中值,即邻域内所有值排序后中间位置上的值.下面的代码演示了scipy库中signal模块的中值滤波算法的用 ...
- 自创算法实现Reporting Service中多值判定
前提条件:用Reporting Service做过报表,并碰到想确定多选下拉框选了哪些选项却无法确定的情况.如:根据选项显示相应的值. 功能实现:用算法实现Reporting Service中多值判定 ...
- 实时高速实现改进型中值滤波算法_爱学术_免费下载
[摘要]在图像采集和处理过程中会引入噪声,必须先对图像进行预处理.本文介绍一种快速中值滤波算法,该算法在硬件平台上实现实时处理功能.综合考虑,选择现场可编程门阵列(FPGA)作为硬件平台,采用硬件描述 ...
最新文章
- 基于Tomcat7、Java、WebSocket的服务器推送聊天室
- 面向对象三大特性,六个原则
- React学习:脚手架搭建、antd引入-学习笔记
- python敏感词过滤代码简单_大型企业都在用,Python实现敏感词过滤
- VMware Workstation(虚拟机) V6.0.2 Build 59824 汉化版 |
- 移动场景在其缩略图中显示场景中所显示的区域
- 珠海格力工厂一线员工待遇如何?
- linux下mysql允许远程连接
- httpclient4.x 中文版帮助文档,最新官方版翻译版(第一章 下)
- 蓝桥杯python青少年_让孩子参加蓝桥杯大赛好吗
- ElasticSearch设置字段的keyword属性
- 追星女孩彩虹屁情话合集100条 ✔︎ (三)
- 深入理解React:懒加载(lazy)实现原理
- MySQL limit 2种写法
- 关于将Ubuntu下中文目录修改为英文的解决方案
- 阿里P8整理Mysql面试题答案,助你面试“脱颖而出”
- Protractor AngularJS测试框架教程
- Linux系统下运行QT视频播放器示例程序(Media Player Example )
- WifiDisplay开启流程
- 玩转linux 这些命令就够了
热门文章
- ADC 信号调理电路设计——必要措施、实测验证和应用说明(转载)
- 设计模式学习笔记(十一)-组合模式
- 原创 | 王欣:多维深耕打造数字化银行
- 计算机报刊杂志推荐,计算机优秀期刊推荐 | Journal of Cloud Computing
- EasyExcel基础使用教程
- excel表格排序,4种排序教程全都有
- 港股暴涨利好有哪些板块?
- 超详细Docker部署SpringBoot+Vue项目(三更博客项目部署)
- KITTI结果评测流程
- Mastering Selections in Photoshop CC Photoshop CC选区教程 Lynda课程中文字幕