#include <string.h>
#include "des.h"
const unsigned char SBox1[64]=
{
14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7,
0, 15, 7, 4, 14, 2, 13, 1, 10, 6 , 12, 11, 9, 5, 3, 8,
4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0,
15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13
};
const unsigned char SBox2[64]=
{
15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10,
3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5,
0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15,
13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9
};
const unsigned char SBox3[64]=
{
10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8,
13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1,
13, 6, 4 , 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7,
1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12
};
const unsigned char SBox4[64]=
{
7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15,
13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9,
10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4,
3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14
};
const unsigned char SBox5[64]=
{
2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9,
14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6,
4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14,
11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3
};
const unsigned char SBox6[64]=
{
12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11,
10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8,
9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6,
4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13
};
const unsigned char SBox7[64]=
{
4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1,
13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6,
1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2,
6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12
};
const unsigned char SBox8[64]=
{
13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7,
1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2,
7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8,
2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11
};
const unsigned char ShiftValue[16]={1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1 };
unsigned char Tdes(unsigned char Mode,unsigned char *MsgIn, unsigned char *Key, unsigned char *MsgOut);
unsigned char Des (unsigned char Mode,unsigned char *MsgIn, unsigned char *Key, unsigned char *MsgOut);
unsigned char TripleMAC(unsigned char *init_data,unsigned char *mac_key,unsigned char data_len,unsigned char *in_data,unsigned char *mac_data);
/*****************************************************************************************************/
//函 数 名:Tdes
//功 能:对一个8字节的字符串进行3DES加解密计算
//输 入:
// Mode=0:加密 ,Mode=1:解密
// MsgIn :输入数组 --明文(加密)或密文(解密)
// Key :16字节密钥数组
//
//输 出:MsgOunt--密文(加密)或明文(解密)
//返 回 值:8
/**************************************************************************************/
unsigned char Tdes( unsigned char Mode,unsigned char *MsgIn, unsigned char *Key, unsigned char *MsgOut)
//Mode=0:加密 Mode=1:解密
{
unsigned char i;
unsigned char des_key_temp[8];
unsigned char Min[8];
unsigned char Mout[8];
if(Mode ==ENCRY)//加密
{
for (i=0;i<8;i++)
{
des_key_temp[i]=Key[i];
Min[i]=MsgIn[i];
}
Des(ENCRY,Min,des_key_temp,Mout);
for (i=0;i<8;i++)
{
des_key_temp[i]=Key[i+8];
Min[i]=Mout[i];
}
Des(DECRY,Min,des_key_temp,Mout);
for (i=0;i<8;i++)
{
des_key_temp[i]=Key[i];
Min[i]=Mout[i];
}
Des(ENCRY,Min,des_key_temp,Mout);
}
if(Mode==DECRY)
{
for (i=0;i<8;i++)
{
des_key_temp[i]=Key[i];
Min[i]=MsgIn[i];
}
Des(DECRY,Min,des_key_temp,Mout);
for (i=0;i<8;i++)
{
des_key_temp[i]=Key[i+8];
Min[i]=Mout[i];
}
Des(ENCRY,Min,des_key_temp,Mout);
for (i=0;i<8;i++)
{
des_key_temp[i]=Key[i];
Min[i]=Mout[i];
}
Des(DECRY,Min,des_key_temp,Mout);
}
for (i=0;i<8;i++)
MsgOut[i]=Mout[i];
return 8;
}
/**************************************************************************************/
//MAC 计算
//输入:
//init_data: 初始化数据
//mac_key: 16字节密钥数组
//data_len: 数据长度
//in_data: 数据
//输出:
//mac_data: MAC计算结果
//返 回 值:8
/**************************************************************************************/
unsigned char TripleMAC(unsigned char *init_data,unsigned char *mac_key,unsigned char data_len,unsigned char *in_data,unsigned char *mac_data)
{
unsigned char mac_data0[8],mac_data1[8];
unsigned char len;
unsigned char i,j;
unsigned char L[8],R[8];
for(i=0;i<8;i++)
{
L[i]=mac_key[i];
R[i]=mac_key[i+8];
mac_data0[i]=init_data[i];
}
len=data_len/8;
for (i=0;i< (8*(len+1)-data_len);i++)
{
if (i==0)
in_data[data_len+i]=0x80;
if (i>0)
in_data[data_len+i]=0x00;
}
data_len=data_len+i;
len=data_len/8;
for(j=0;j<len;j++)
{
for(i=0;i<8;i++)
mac_data0[i] ^= in_data[i+j*8];
Des(ENCRY,mac_data0,L,mac_data1);
memcpy(mac_data0,mac_data1,8);
}
Des(DECRY,mac_data0,R,mac_data1);
memcpy(mac_data0,mac_data1,8);
Des(ENCRY,mac_data0,L,mac_data1);
for(i=0;i<8;i++)
mac_data[i]=mac_data1[i];
return 8;
}
/***************************************************************************************/
//函 数 名:Des
//功 能:对一个8字节的字符串进行单DES加解密计算
//输 入:
// Mode=0:加密 ,Mode=1:解密
// MsgIn :输入数组 --明文(加密)或密文(解密)
// Key:8字节密钥数组
//输 出:MsgOunt--密文(加密)或明文(解密)
//返 回 值:8
/**************************************************************************************/
unsigned char Des( unsigned char Mode,unsigned char *MsgIn, unsigned char *Key, unsigned char *MsgOut)
{
unsigned char i;
unsigned char temp1,temp2, temp3,temp4;
unsigned char C0[4], D0[4];
unsigned char Ki[8];
///////////////////////////////////////////////////////////////////////////////////
// unsigned long int *p;
// char Msgtemp[8];
// char tempR[6];
// char C0[4], D0[4];
// char temp[8];
//处理64位数据块
//初始置换IP
//输出:L[0],R[0];
// L[0]从MsgOut[0]开始,R[0]从MsgOut[4]开始
for(i=0; i<8; i++)
{
MsgOut[0]>>=1;
MsgOut[1]>>=1;
MsgOut[2]>>=1;
MsgOut[3]>>=1;
MsgOut[4]>>=1;
MsgOut[5]>>=1;
MsgOut[6]>>=1;
MsgOut[7]>>=1;
temp1=MsgIn[i];
MsgOut[4] |= (temp1&0x80);
temp1<<=1;
MsgOut[0] |= (temp1&0x80);
temp1<<=1;
MsgOut[5] |= (temp1&0x80);
temp1<<=1;
MsgOut[1] |= (temp1&0x80);
temp1<<=1;
MsgOut[6] |= (temp1&0x80);
temp1<<=1;
MsgOut[2] |= (temp1&0x80);
temp1<<=1;
MsgOut[7] |= (temp1&0x80);
temp1<<=1;
MsgOut[3] |= (temp1&0x80);
}
//密钥处理
//序列变换1(PC-1)
//输出:C0, D0,各28bit
for(i=0; i<8; i++)
{
C0[0]>>=1;
C0[1]>>=1;
C0[2]>>=1;
C0[3]>>=1;
D0[0]>>=1;
D0[1]>>=1;
D0[2]>>=1;
temp1=Key[i];
C0[0] |= (temp1&0x80);
temp1<<=1;
C0[1] |= (temp1&0x80);
temp1<<=1;
C0[2] |= (temp1&0x80);
temp1<<=1;
C0[3] |= (temp1&0x80);
temp1<<=1;
D0[2] |= (temp1&0x80);
temp1<<=1;
D0[1] |= (temp1&0x80);
temp1<<=1;
D0[0] |= (temp1&0x80);
}
D0[3]=(C0[3]&0x0f)|(D0[2]<<4);
D0[2]=(D0[2]>>4)|(D0[1]<<4);
D0[1]=(D0[1]>>4)|(D0[0]<<4);
D0[0]=(D0[0]>>4)&0x0F;
C0[3]&=0xf0;
//////////////////////////////////
没有合适的资源?快使用搜索试试~ 我知道了~
FM17550_READER_MCU_SPI.rar_FM17520 RFID读写卡程序_STC15F2K60S2单片机_fm1
共65个文件
h:15个
obj:12个
lst:12个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 7 下载量 56 浏览量
2022-07-15
12:45:59
上传
评论 2
收藏 204KB RAR 举报
温馨提示
IC卡读写卡程序,M50 M70卡 Type A, TypeB, TypeF A,B密钥设置,卡内信息读取写入,充值卡功能
资源详情
资源评论
资源推荐
收起资源包目录
FM17550_READER_MCU_SPI.rar (65个子文件)
FM17550_READER_MCU_SPI
Output
mifare_card.obj 20KB
type_a.obj 20KB
type_b.obj 18KB
cpu_card.obj 25KB
FM175XX_MCU 167KB
main.obj 15KB
uart.obj 8KB
uart_app.obj 31KB
fm175xx.obj 27KB
FM175XX_MCU.lnp 371B
ultralight.obj 10KB
FM175XX_MCU.build_log.htm 1KB
STARTUP.obj 863B
FM175XX_MCU.plg 428B
FM175XX_MCU.hex 28KB
spi.obj 7KB
type_f.obj 9KB
175xx.plg 974B
uart_app.c 7KB
List
fm175xx.lst 22KB
uart.lst 7KB
mifare_card.lst 13KB
type_b.lst 9KB
cpu_card.lst 19KB
main.lst 4KB
type_a.lst 15KB
175xx.m51 98KB
spi.lst 6KB
type_f.lst 2KB
STARTUP.lst 14KB
ultralight.lst 4KB
uart_app.lst 12KB
FM175XX_MCU.m51 104KB
17XX.uvproj 16KB
17XX.uvgui.ykz 88KB
17XX.uvgui.songyaohai 73KB
17XX.uvopt 9KB
main.c 2KB
spi.c 3KB
type_a.c 9KB
ultralight.c 2KB
type_f.c 660B
uart.c 3KB
cpu_card.c 11KB
type_b.c 5KB
des.c 19KB
Inc
uart_app.h 75B
des.h 592B
cpu_card.h 1KB
type_b.h 774B
INTRINS.H 797B
uart.h 727B
fm175xx.h 3KB
spi.h 428B
ultralight.h 207B
mifare_card.h 650B
main.h 201B
type_a.h 622B
type_f.h 185B
pin.h 232B
STC15F2K60S2.h 9KB
fm175xx.c 13KB
17XX_uvproj.bak 15KB
mifare_card.c 8KB
17XX_uvopt.bak 62KB
共 65 条
- 1
小贝德罗
- 粉丝: 68
- 资源: 1万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论4