android手机扇区数据读写,androidNFCMifareClassic读IC卡加密扇区方法...

android⼿机扇区数据读写,androidNFCMifareClassic读IC卡加
密扇区⽅法
近段时间在做android下NFC的M1卡的加密扇区的读取,参考了Android_磊⼦的操作基础内容,但是涉及到MifareClassic类操作验证未能到相关资料,后来查看了MifareClassic类的源代码和基于android原⽣案例,实现了加密扇区读取。分享下代码,希望对⼤家有帮助。
对于NFC操作的基本部分有很多资料都⼀样的,这⾥不再赘述,仅简单介绍MifareClassic验证和读取的过程
1、创建MifareClassic对象,(tag);
2、建⽴MifareClassic类连接,t();
3、对扇区(0-15)进⾏验证,按KeyA和KeyB两种验证,
(1) MifareClassic.authenticateSectorWithKeyA(sector,key);
其中sector为扇区号,key为6字节验证码,此处Key需要处理为-128⾄127的字节,开始使⽤0x00-0xFF会报错
(2) MifareClassic.authenticateSectorWithKeyB(sector,key);
其中sector为扇区号,key为6字节验证码,此处Key需要处理为-128⾄127的字节,开始使⽤0x00-0xFF会报错
4、按块(sector*4+i)读取扇区内的16Byte内容,adBlock(Block);
Block0=sector×4+0;
Block1=sector×4+1;
Block2=sector×4+2;
m1卡Block3=sector×4+3;
5、关闭MifareClassic连接,MifareClassic.close();
MifareClassic读取代码
//MifareClassic读取代码
readData:function(intent){
var tag = ParcelableExtra(NfcAdapter.EXTRA_TAG);
var techList = TechList();
var bisMfc=false;
for(var i=0;i
if(techList[i].indexOf('MifareClassic')>=0){
bisMfc=true;
break;
}
}
if(!bisMfc){
this.ICERROR='卡⽚类型错误!';
return;
}
var (tag);
if(!mfc){
this.ICERROR='卡⽚获取错误!';
return;
}
mfc.setTimeout(3000);
if(!mfc.isConnected()){
try{
invoke(mfc,'connect');
}catch(e){
this.ICERROR='卡⽚连接错误!';
return;
}
}
try{
this.ICUID=this.Id());
var cmdBytes=this.HexStringToByteArray(this.keyVal);
var auth=false;
if(this.keyType=="A"){
auth=invoke(mfc,"authenticateSectorWithKeyA",parseInt(this.sector),cmdBytes); }else{
auth=invoke(mfc,"authenticateSectorWithKeyB",parseInt(this.sector),cmdBytes); }
if(!auth){
this.ICERROR='扇区验证失败';
return;
}
var sectorData=[];
var tmpRet;
this.ICData='IC卡扇区数据>>';
for(var i=0;i<4;i++){
tmpRet=invoke(mfc,"readBlock",this.sector*4+i);
this.ICData=this.ICData+'\n';
this.ICData=this.ICData+this.ByteArrayToHexString(tmpRet); sectorData.push.apply(sectorData,tmpRet);
}
console.log(this.ByteArrayToHexString(sectorData));
this.ICERROR='读卡完成';
}catch(e){
this.ssage;
<(e);
}finally{
mfc.close();
}
}
//Key处理函数
HexStringToByteArray:function(instr) {
var hexA = new Array();
var pos = 0;
var len = instr.length/2;
for(var i=0; i
{
var s = instr.substr(pos, 2);
var v = parseInt(s, 16);
if(v>=128)
v=v-256;
hexA.push(v);
pos += 2;
}
return hexA;
}
项⽬是基于nui-app项⽬的vue测试通过的,附件共享了vue⽂件。项⽬需设置android.permission.NFC权限。

本文发布于:2024-09-23 16:22:42,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/360210.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:扇区   读取   验证   操作   错误   资料
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议