|
各位大哥,请帮我看看这个 IC 卡(SLE4442卡)问题啊?谢谢
[复制链接]
1:
向 IC 卡里写数据
是不是必须通过效验了才能写啊?
2:
效验
到底是效验什么东西?
是密码,还是?
3:
假设有人自己做个写卡器,
想卡里写个很大的数据,
然后做到您的读卡器里读
这样,就不行了
怎么防止这样的情况啊
是不是在卡里的某个地方做了
一个标记
4:
SLE4442卡 分区的吗?
#include
#include
#include
#include
#include
#include
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 还效验正确?
谢谢!
|
|