1: 向 IC 卡里写数据 是不是必须通过效验了才能写啊?
2: 效验 到底是效验什么东西? 是密码,还是?
3: 假设有人自己做个写卡器, 想卡里写个很大的数据, 然后做到您的读卡器里读 这样,就不行了 怎么防止这样的情况啊 是不是在卡里的某个地方做了 一个标记
4: SLE4442卡 分区的吗?
#include <REG52.H>
#include <string.h> #include <stdio.h> #include <absacc.h> #include <intrins.h>
#include <SLE4442.h>
sbit SPK = P3^4; //蜂鸣器 sbit LED = P3^5; //指示灯
void delay_ms(unsigned int ms) { unsigned char i; while(ms--) { i=112; while(i--); }
}
void printchar(unsigned char ch) { if(ch>=0&&ch<=9) ch=ch+'0'; else if(ch>=10&&ch<=15) ch=ch+'A'-10; putchar(ch); }
void printhex(unsigned char hex)//以十六进制格式输出1个字节 { unsigned char c; c=hex; c=c>>4; printchar(c); c=hex; c=c&0x0F; printchar(c); }
void init(void) { LED=0; SPK=0;
TMOD=0x21; TH1=0xFD; SCON=0x50; PCON=0x00; TR1=1; TI=1; //EA=1;
CARD_IN=1; printf("程序开始运行...\n");
delay_ms(300); LED=1; SPK=1; }
main() { unsigned char i; unsigned int p; unsigned char buff[16]; unsigned char pwd[3];
init();
for(;;) { while(CARD_IN); //等待插入IC卡 delay_ms(5); //防抖动 if(CARD_IN) continue;
//-----------------------------IC 卡已经插入------------------------------------ LED=0; //打开绿灯 SPK=0; printf("IC卡已插入\n");
delay_ms(100); SPK=1; delay_ms(30);
ResetCard(); printf("IC卡数据:\n"); p=0; while((!CARD_IN)&&(p<256)) { //读16字节 ReadMainMem(p,buff,16); //读IC卡主存 BreakOperate(); Delay10us(); printhex(p); printf(": "); for(i = 0;i <= 15; i++) printhex(buff); printf("\n"); p+=16; } printf("保护寄存器: "); //读保护存储器 ReadProtectMem(buff); for(i = 0;i < 5; i++) printhex(buff); printf("\n");
//检查密码寄存器 printf("密码寄存器: "); ReadPwd(buff); //读密码存储器 for(i = 0;i < 4; i++) printhex(buff); printf("\n");
if((buff[0] & 0x07) == 0x07) //密码计数,防止3次校验错误密码导致锁卡 { //出厂默认密码 pwd[0]=0xFF; pwd[1]=0xFF; pwd[2]=0xFF; if(Verify(pwd)) //校对密码 { printf("校对密码正确\n");
//写0x30开始的16个字节 for(i=0x30;i<0x40;i++) { buff[0]=i; WriteMainMem(i,buff); //写一字节 } printf("写数据成功\n"); buff[0]=0x12; buff[1]=0x34; buff[2]=0x56; ChangePwd(buff); printf("密码已修改为:0x123456\n"); } else { printf("校对密码出错\n"); } } else { printf("密码计数器不是 111\n"); }
if(!CARD_IN) ResetCard();
while(!CARD_IN); //等待拨出IC卡 //-----------------------------IC 卡已经插入------------------------------------ //-----------------------------IC 卡退出---------------------------------------- LED=1; //关闭绿灯 printf("IC卡已退出\n"); delay_ms(30); //-----------------------------IC 卡退出---------------------------------------- } }
5: buff[0]=0x12; buff[1]=0x34; buff[2]=0x56; ChangePwd(buff);
这里已经把密码都改了
为什么 pwd[0]=0xFF; pwd[1]=0xFF; pwd[2]=0xFF; if(Verify(pwd)) //校对密码 { printf("校对密码正确\n"); }
为什么 用 ff ff ff 还效验正确?
谢谢!
|