非接触式CPU卡魔兽允许读取本地文件被122读取0扇区0块么

还没有帐号? 赶紧
用户版块帖子
RC522基站能否写UID卡0扇区0块
UID:623247
在线时间762小时
M币1899专家11
请问各位高手RC522做的M1卡读写器能否写UID卡的0扇区0块数据呢?我自己用RC522做官方的SPI程序做了一个读写器除了0扇区0块不能写之外,其余扇区和块都能正常读写这是为何?难道对0扇区0块有特殊的指令写吗?还是我买到的是假的UID卡只是普通的M1白卡呢?!(卖家却咬定说给我的是UID卡且0扇区0块是能写的,说什么普通的读写器写不了,对这话真心不懂)难道对0扇区0块有特殊指令吗?有经验的高手请赐教,谢谢!
UID:1078085
在线时间631小时
M币4044专家7
检查代码 我试过例程不给读3区块的
UID:910646
在线时间2055小时
M币8021专家10
玩过,也没写成功,等高手解答
UID:623247
在线时间762小时
M币1899专家11
回 江小g 的帖子
:检查代码 我试过例程不给读3区块的 ( 12:58) 我的只有0扇区0块写不成功其他没问题
UID:512854
在线时间446小时
M币2213专家3
这个区块写入似乎特殊,我用读卡器改写也要使用程序的uid功能才可以。
UID:623247
在线时间762小时
M币1899专家11
回 wer412 的帖子
:这个区块写入似乎特殊,我用读卡器改写也要使用程序的uid功能才可以。 ( 08:20) 能否详细点谢谢
UID:1289507
在线时间0小时
M币-14专家0
请问楼主问题解决了没有,我也是正在弄这个东西,除了0数据块无法写入外,其他都正常,包括读出0数据块。严重怀疑商家给我的就是普通IC卡。如有解决,还望指导一二,非常感谢,如没有解决也希望能共同找到解决的办法。
UID:516327
在线时间661小时
M币2200专家1
0扇区0块是不能写的,出厂已经固定了
UID:623247
在线时间762小时
M币1899专家11
在网上找到的方法写Mifare one S50 UID卡的特殊命令未验证过其可行性 以下是原文大意可是不管我怎麼試, UID卡的行為就跟標準卡沒兩樣,甚至一度以為買到假貨。於是又在網路上繼續搜索,我覺得,一定有特別的命令讓我可以寫 sector[0]:block[0]終於讓我找到一篇,他的流程是這樣:Sent bits: 26 (7 bits) //尋卡 0x26 / 0x52 都可以Received bits: 04 00Sent bits: 93 20 //防衝撞Received bits: 01 23 45 67 00Sent bits: 93 70 01 23 45 67 00 d0 6f //選卡Received bits: 08 b6 dd (SAK)(不可以認證密鑰,不然後門打不開)好,重點來了,Sent bits: 50 00 57 cd //休眠,50 00 就是 PcdHalt()Sent bits: 40 (7 bits) (特殊指令)//開後門第一條指令,要設定 BitFramingReg 使傳送 7 個位元,必須要 7 個eceived bits: a (4 bits)Sent bits: 43 (特殊指令)//開後門第二條指令Received bits: 0aSent bits: a0 00 5f b1 //正常的寫區塊第一次交握Received bits: 0aSent bits: 00 dc 44 20 b8 08 04 00 46 59 25 58 49 10 23 02 c0 10 //正常的寫 block 0 資料Received bits: 0a重點就是要:1. 不可以進行 3 Pass Authenticaiton2. 發 PcdHalt()3. 發 0x40 in 7-bit4. 發 0x43到這邊,我把考勤卡的 sector[0]:block[0] 整個區塊複製過來了,著,我又把其餘的 63 個區塊也都一併複製,然後滿心期待的拿去刷考勤機看看,結果....考勤機根本沒回應...
UID:738666
在线时间388小时
M币241专家3
回 lbq 的帖子
:在网上找到的方法写Mifare one S50 UID卡的特殊命令未验证过其可行性[表情]以下是原文大意[表情]可是不管我怎麼試, UID卡的行為就跟標準卡沒兩樣,甚至一度以為買到假貨。....... ( 15:07) 你这是准备复制考勤卡啊。
访问内容超出本站范围,不能确定是否安全
“新手上路”发帖需审核后才能显示(请认真发帖),达到数码9级后取消此限制
您目前还是游客,请
&回复后跳转到最后一页
Code by , Time now is:06-29 15:59, Total 0.208510(s) query 6,
Gzip enabled&列表网公众号列表活动随时有扫我活动不错过
您是不是在找:
您是不是在找:
非接触式CPU卡由CPU芯片、感应天线组成,封装在一个标准PVC或PET卡片中,无外露部分。非接触式CPU卡的读写过程,是由CP
微信扫一扫快速获取电话
芯片存储量:4K、8K、16K、32K、64K等芯片厂家:上海复旦、上海华虹、北京华大、英飞凌、企业介绍:深圳市凯晟科技有限公司
微信扫一扫快速获取电话
温馨提示: 1.以上价格为参考报价,具体需与我们联系! 2.规格:跟据客户需求、货期:5-7个工作日; 3.此价为同一印刷版面,
微信扫一扫快速获取电话
CPU卡芯片就是指芯片内含有一个微处理器,它的功能相当于一台微型计算机,人们经常使用的集成电路(IC卡)上的金属片就是CPU
微信扫一扫快速获取电话
CPU卡芯片通俗地讲就是指芯片内含有一个微处理器,它的功能相当于一台微型计算机。人们经常使用的集成电路卡(IC卡)上的金属片就是
微信扫一扫快速获取电话
FM1216是由上海复旦微电子自主研发的高端智能非接触CPU卡,该产品采用高新的工艺技术,具备多个创新点及产品优势,获得国家多项
微信扫一扫快速获取电话
产品编号:W311产品名称:非接触式CPU卡读写器规  格:CPU卡产品备注: 产品类别:一卡通通用产品 产 品 说 明产 品
微信扫一扫快速获取电话
非接触式CPU卡由CPU芯片、感应天线组成,封装在一个标准PVC或PET卡片中,无外露部分。非接触式CPU卡的读写过程,是由CP
微信扫一扫快速获取电话
非接触式CPU卡产品介绍
非接触CPU卡支持ISO14443-A/B协议,CPU指令兼容通用8051指令
微信扫一扫快速获取电话
非接触CPU卡支持ISO14443-A/B协议,CPU指令兼容通用8051指令,内置硬件DES协处理器,数据存储器为8Kbyte
微信扫一扫快速获取电话
非接触式CPU卡由CPU芯片、感应天线组成,封装在一个标准PVC或PET卡片中,无外露部分。非接触式CPU卡的读写过程,是由CP
微信扫一扫快速获取电话
CPU卡简介可适用于金融、保险、交警、政府行业等多个领域/具有用户空间大、读取速度快、支持一卡多用等特点,并已经通过中国人民银行
微信扫一扫快速获取电话
CPU白卡价格、CPUFM1208-10白卡定制、CPUFM1208-09白卡生产厂家、非接触式CPU白卡供应商 CPU白卡价格
微信扫一扫快速获取电话
CPU卡也叫智能卡;卡内的集成电路中带有微处理器CPU、存储单元(包括随机存储器RAM、程序存储器ROM(FLASH)、用户数据
微信扫一扫快速获取电话
通信协议:ISO 14443-A
兼容 FM11RF08、M1 非接触卡芯片 MCU 指令兼容 8051支持 106Kbps
微信扫一扫快速获取电话
联系人:王杰
电话:6-8003
企业Q Q:2
微信扫一扫快速获取电话
  非接触cpu卡卡内集成电路中包括中央处理器(CPU)、只读存储器(ROM)、随机存取存储器(RAM)、电可擦除可编程只读存储
微信扫一扫快速获取电话
FM1204卡简介
FM1204CPU卡的芯片是采用了复旦的芯片,跟恩智浦CPU卡芯片相比,FM芯片价格是占有绝对的优势的,
微信扫一扫快速获取电话
产品介绍产品信息o
名称: 非接触式CPU卡,中石化加油卡o
品牌: InMIga o
芯片: FM1208 o
微信扫一扫快速获取电话
非接触CPU卡作为智能卡的一种,是智能卡技术与非接触技术的融合,可在一个智能卡芯片上,同时实现ISO/IEC 14443和IS
微信扫一扫快速获取电话
FM1216和FM1232是复旦微电子于2010年5月推出的两款双界面CPU卡芯片产品,数据存储空间分别为16K/32K x
微信扫一扫快速获取电话
? 会员卡参数:
产品名称:艾克依接触式IC卡
产品材质:全新PVC材料
产品规格:86x54x0.86mm
微信扫一扫快速获取电话
T8-S 非接触式IC卡读写器
主要功能及特色介绍
一、产品简介 T8-S非接触式读卡器具有性能更稳定、功能更加强大的特
微信扫一扫快速获取电话
可封装多种芯片,例如:FM1208 材料可选择PVC或PET等1.技术先进性  1)高端智能非接触CPU卡(FM1208) 系列
微信扫一扫快速获取电话
产品介绍产品信息o
名称: 非接触式CPU卡,中石化加油卡o
品牌: InMIga o
芯片: FM1208 o
微信扫一扫快速获取电话
接触式微型读写器供应IC卡CPU卡读写器提供免费样板订制厂家批发欢迎使用RFID卡,PSAM卡和IC卡阅读器,它们是一个多功能读
微信扫一扫快速获取电话
产品介绍产品信息o
名称:公交卡、社保卡、金融银行卡等CPU卡o
品牌: InMIga o
芯片: FM1208-X o
微信扫一扫快速获取电话
产品介绍电子标签的制作及封装概述
作为终极产品,智能标签不受&卡&的限制,形态材质也有多姿多彩的发展空间。 它的产品分三大类:
微信扫一扫快速获取电话
【FM1208 CPU白卡】◆协议标准:ISO/IEC14443-A◆CPU指令兼容8051◆工作频率:13.56MHZ◆数据
微信扫一扫快速获取电话
产品介绍产品信息o
名称:公交卡、社保卡、金融银行卡等CPU卡o
品牌: InMIga o
芯片: FM1208-X o
微信扫一扫快速获取电话
CPU卡芯片通俗地讲就是指芯片内含有一个微处理器,它的功能相当于一台微型计算机。人们经常使用的集成电路卡(IC卡)上
微信扫一扫快速获取电话
? 会员卡参数:
产品名称:艾克依CPU卡
产品材质:全新PVC材料
产品规格:86x54x0.86mm(国
微信扫一扫快速获取电话
S9型双界面IC卡读写器,读写双界面IC卡(非接触式IC卡及接触IC卡),或只读写单独的射频卡和接触式智能卡。S9型双界面读写器
微信扫一扫快速获取电话
非接触式IC卡:由IC芯片、感应天线组成,封装在PVC卡片内,将射频卡和IC卡技术结合起来,解决了无源和免接触
微信扫一扫快速获取电话
至各位亲们:
由于卡产品要根据不同芯片、不同工艺、不同数量来报价,所以报价不以网上所标的价格为准,为了保证您所订的产品价格合
微信扫一扫快速获取电话
公司介绍 【广州展丰制卡】15年制卡经验老牌厂家,无尘车间,进口设备,品质优美,选择我们=选择放心!
广州市展丰制卡有限公司位
微信扫一扫快速获取电话
图片客户产品均为我公司承制,不得盗用,违者必究)&银联、VISA、MasterCard金融卡特许制造企业&midd
微信扫一扫快速获取电话
一、芯片卡的介绍非接触式IC卡又称射频卡,是世界上最最近几年发展起来的一项新技术,IC卡在卡片靠近读卡器表面时即可完成卡中的数据
微信扫一扫快速获取电话
●IC卡的分类按存储容量分:IC卡的存储量小的几十个Bit,大到几十个K BYTE按安全级别分:(1)非加密存储卡  (2)逻辑
微信扫一扫快速获取电话
一、芯片卡的介绍非接触式IC卡又称射频卡,是世界上最最近几年发展起来的一项新技术,IC卡在卡片靠近读卡器表面时即可完成卡中的数据
微信扫一扫快速获取电话
非接触式cpu卡相关厂家:
非接触式cpu卡周边分类:
&2017 列表网&琼ICP备号-12&增值电信业务经营许可证B2-&1175人阅读
IT技术(1)
笔者作为一个苦逼即将毕业的大四学生在外打拼已经两个月了,虽然没有费什么大力气被老师推荐到一个小boss公司里面实习,两个月也是颇有感叹。对于小公司,选一个员工像选媳妇儿一样,要“上得厅堂下的厨房”,对老板来说,不管你学过什么,需要写SQL的时候你就得会数据库,需要写html的时候你就得会css,js,开发后台的时候你就得会写servlet,filter,电脑坏了还的会装系统。还得会网络布线调试。博主什么都不精,又什么都会点,反正上刚才列举的东西基本都试了一遍,感慨万千啊。这不,应公司一个移动项目需求,boss需要一个射频卡初始化程序。也不知怎么的就让博主研究研究,我也不好吐槽,不要喊我研究什么,我也没那本事,反正本着boss的需求小小员工就的始终不渝的执行原则,怀着战战兢兢的心就试着写那么几段代码。
入手吧,东西和资料也不懂,就一个D3非接触式读写器,几张M1卡(是射频卡吗,到现在还分不大清,应该有啥区别吧),一个驱动程序,安装完了后还有一个几十k的chm(api)。说干就干呗,也不怕把boss买的机子弄坏,装好驱动后就用读卡器试了试,还是很新鲜的,最少能看到这M1的存储分区吧
M1卡0~15扇区,每区4块(编号记0~63),每块能写16个字符,其中0扇区第0块装商家出厂初始化的一些信息不能擦写,每个扇区的最后一块【(扇区号+1)*4-1】保存密码,其他的数据块都能存储数据。
先不说程序的事,再来说说这M1卡的密码机制吧,这尼玛才叫一个蛋疼,反正到现在我还是一头雾水,对于我这个智商不高的童鞋来说那简直就是比微积分还难过(ps:博主大学唯一挂在的微积分大树上),反正到现在还是一个迷糊蛋,不过反正是能实现boss那不高的要求。这对我来说就可以了,那要是真的深入去学吧,我这人记两天就又忘了,话说又不能当饭吃哈,要是能破解这M1卡的密码那我反手就是100块扔老板脸上走人。(扔100的原因是博主我就是一个穷屌)
基本来说M1卡的密码有两套,分A套密码和B套密码。每套密码各3个密码。M1的数据块是32位,存16个字符(8个中文字符),用16进制表示(这也是一个很蛋疼的地方,转过去转过来的)。前12位(6个字符)和后12位分别存储A套密码和B套密码,中间8位是控制位(这个是精华,虽然我不懂),这个我是一点也没有懂,深入的东西百度吧,不过资料好像不多的样子。总之来说就是中间的控制位控制6个密码的不同权限,哪一个密码分别对那块数据有读或者写或者读写权限,密码也是被隐藏了的哦,小博主开始还在那纠结呢。这个密码机制就跳过把,反正就是不咋个懂的。请深深的百度
现在来说说那几行代码的事儿吧。
基本功能:实现对M1卡的0扇区数据初始化,修改M1密码。根据已知的密码重置M1密码。
就这么基基本本的功能。作为一个只要实现基本功能的程序博主都没有写UI,直接用DOS执行吧(java写UI也是蛋疼)。仔仔细细的把api看了个遍,就那么几个函数,看起来不难样子。
代码构思:
虽然这么一个简单的功能也不能只写一个java类就完事吧,总体的就两个package:工具包和程序运行主类一个包。
把main函数的入口分离出来单独成一个类(入口级)
把实现循环函数功能的类单独分离出来(一级类)
具体实现设备连接,M1卡初始化功能聚合成一个类(二级类)
小博把代码贴出来,供君批评吐槽-------------------------------------------------------------------------------------------------------------------------------------------------------------
public class StartMain {
public static void main(String args[]){
//String[] args = {&445566&, &8&, &WER3&, &6789&, &2&, &defaultkey&};
if (null == args || args.length & 5) {
System.out.println(&#####参数错误,请确认参数!#####&);
if (args[5].length() != 6) {
System.out.println(&#####参数错误,密码必须是6为字符,请确认参数!#####&);
InitMCard IMC =
if (args.length == 5) {
IMC = new InitMCard(args[0], args[1], args[2],
Integer.parseInt(args[3]), Integer.parseInt(args[4]), null);
IMC = new InitMCard(args[0], args[1], args[2],
Integer.parseInt(args[3]), Integer.parseInt(args[4]), args[5]);
IMC.start();
public class EmptyKeyMain {
public static void main(String args[]){
//String[] args = {&ABCDEF&};
if (null == args || args.length & 1) {
System.out.println(&#####参数错误,请确认参数!#####&);
InitMCard IMC =
IMC = new InitMCard(args[0]);
IMC.startEmpty();
public class InitMCard {
private static final short sectorNo = 0;
private static final short[] blockNos = {1};
private String areaCode =
private String type =
private String batchNo =
private int seqStartNo;
private int seqC
private String initKey = &529656&;
public InitMCard(){}
public InitMCard(String initKey){
if (null != initKey) {
this.initKey = initK
public InitMCard(String areaCode, String type, String bathNo, int seqStartNo, int seqCount, String initKey) {
if (null == areaCode || null == type || null == bathNo
|| areaCode.equals(&&) || type.equals(&&) || bathNo.equals(&&) || seqCount &= 0 || areaCode.length() != 6
|| type.length() != 1 || bathNo.length() != 4 || seqStartNo &= 0 || seqStartNo&99999) {
System.out.println(&参数输入错误,请重新输入参数!&);
this.areaCode = areaC
this.type =
this.batchNo = bathNo;
this.seqStartNo = seqStartNo;
this.seqCount = seqC
if (null != initKey) {
this.initKey = initK
* 开始初始化方法
public void start() {
if (null == this.areaCode) {
System.out.println(&the end&);
String[] infos = new String[2];
int startNo = this.seqStartNo;
getData(infos);
InitData.writeData(sectorNo, blockNos, infos, this.initKey);
this.seqStartNo = startNo + InitData.initC
} while (InitData.initCount & this.seqCount);
System.out.println(&the end&);
* 清空密码
public void startEmpty() {
InitData.emptyKey(this.initKey);
} while (true);
* 延迟程序
public void delay() {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
* 获取数据
* @param infos
public void getData(String[] infos){
String UID = this.areaCode + this.type + this.batchNo;
String startNoS = Integer.toString(this.seqStartNo);
if (startNoS.length() & 5) {
String s = &&;
for (int i = 0; i & 5-startNoS.length(); i++) {
startNoS = s+startNoS;
if (startNoS.length() & 5) {
startNoS = startNoS.substring(startNoS.length() - 5, startNoS.length());
infos[0] = UID + startNoS;
public class InitData {
public static int initCount = 0;
private static final int port = 100;
private static final int baud = 9600;
private static final JavaRD800 rd = new JavaRD800();
private static final short _SearchCardModle = 0;
private static final short _KeyAuthModle = 0;
public static char[] defaultKey = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
private static char[] emptyKey = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x80, 0x69 , 0xFF, 0xFF, 0xFF, 0xFF,0xFF,0xFF};
* 写入数据
* @param sectorNo
* @param blockNos
* @param infos
* @param key
public static void writeData (short sectorNo, short[] blockNos, String[] infos, String key){
int status = 0, icdev = 0;
int cardID[] = new int[1];
char[] readBuff = new char[16];
String card =
//获取设备
icdev = rd.dc_init(port, baud);
if (icdev &= 0) {
System.out.println(&######设备绑定端口失败!######&);
status = rd.dc_card(icdev, _SearchCardModle, cardID);
if (status != 0) {
rd.dc_exit(icdev);
card = Tool.cardIdInt2String(cardID[0]);
if (card == null) {
System.out.println(&######M1卡ID获取失败######&);
System.out.println(&-----------设备ID:&+card);
status = KeyAuthentication(icdev, sectorNo);
if (status != 0) {
System.out.println(&######验证密码错误!######&);
rd.dc_beep(icdev, (short) 250);
rd.dc_exit(icdev);
//获取转换设备ID
status = rd.dc_read(icdev, (short)0, readBuff);
if (status != 0) {
System.out.println(&######读取设备ID失败######&);
rd.dc_beep(icdev, (short) 250);
rd.dc_exit(icdev);
//循环写数据
for (int i = 0; i & blockNos. i++) {
status = rd.dc_write(icdev, blockNos[i], Tool.stringTochars(infos[i]));
if (status != 0) {
rd.dc_beep(icdev, (short) 250);
System.out.println(&######写入第 &+blockNos[i]+&块
错误!######&);
if (status != 0) {
rd.dc_beep(icdev, (short) 250);
rd.dc_exit(icdev);
status = rd.dc_write(icdev, (short)((sectorNo+1)*4-1), Tool.keyStringToChars(key));
if (status != 0) {
System.out.println(&######初始化密码失败!######&);
rd.dc_exit(icdev);
System.out.println(&-----------初始化密码 :& + key);
Tool.saveToLocalFlie(card, infos[0], key);
Tool.saveToDBURL(card, infos[0], key);
rd.dc_beep(icdev, (short) 20);
System.out.println(&-------------------------初始化成功&);
initCount++;
// 关闭设备
status = rd.dc_exit(icdev);
if (status != 0) {
rd.dc_beep(icdev, (short) 250);
System.out.println(&######关闭端口失败!######&);
rd.dc_exit(icdev);
icdev = 0;
* 密码验证
* @param icdev
* @param sectorNo
private static int KeyAuthentication(int icdev, short sectorNo){
int t = rd.dc_load_key(icdev, _KeyAuthModle, sectorNo, defaultKey);
if (t != 0) {
return rd.dc_authentication(icdev, _KeyAuthModle, sectorNo);
public static void emptyKey(String key){
InitData.defaultKey = Tool.keyStringToChars(key);
int status = 0, icdev = 0;
int cardID[] = new int[1];
String card =
//获取设备
icdev = rd.dc_init(port, baud);
if (icdev &= 0) {
System.out.println(&######设备绑定端口失败!######&);
status = rd.dc_card(icdev, _SearchCardModle, cardID);
if (status != 0) {
rd.dc_exit(icdev);
card = Tool.cardIdInt2String(cardID[0]);
if (card == null) {
System.out.println(&######M1卡ID获取失败######&);
System.out.println(&-----------设备ID:&+card);
status = KeyAuthentication(icdev, (short)0);
if (status != 0) {
System.out.println(&######原始验证密码错误!######&);
rd.dc_beep(icdev, (short) 250);
rd.dc_exit(icdev);
status = rd.dc_write(icdev, (short)3, emptyKey);
if (status != 0) {
System.out.println(&######重置密码失败!######&);
rd.dc_exit(icdev);
rd.dc_beep(icdev, (short) 20);
System.out.println(&-----------已经重置为原始密码 &);
// 关闭设备
status = rd.dc_exit(icdev);
if (status != 0) {
rd.dc_beep(icdev, (short) 250);
System.out.println(&######关闭端口失败!######&);
rd.dc_exit(icdev);
icdev = 0;
public class Tool {
* 转换字符串成字符数组
* @param source
public static char[] stringTochars(String source){
if (null == source || source.length() == 0) {
return new char[16];
byte[] tpBytes =
char[] chars = new char[16];
tpBytes = source.getBytes(&GBK&);
} catch (UnsupportedEncodingException e) {
System.out.println(&编码失败!&);
for (int i = 0; i & 16; i++) {
if (i & tpBytes.length) {
chars[i] = (char)tpBytes[i];
chars[i] = 0x00;
* 转换字节数组成字符串
* @param source
public static String charsToString(char[] source){
if (null == source || source.length == 0) {
byte[] tpBytes = new byte[16];
char[] chars =
String ts = &&;
for (int i = 0; i & chars. i++) {
tpBytes[i] = (byte)chars[i];
ts = new String(tpBytes, &GBK&);
} catch (UnsupportedEncodingException e) {
System.out.println(&解码失败&);
return new String(tpBytes);
* 解析卡号
* @param source
public static String cardIdInt2String(int intCardId){
String hexCarId = Integer.toHexString(intCardId);
int t = hexCarId.length();
if (t % 2 != 0) {
String cardId = &&;
for (; t & 0; t =t-2) {
cardId += hexCarId.substring(t - 2, t);
return cardId.toUpperCase();
* 将密码转换成char[]
* @param key
public static char[] keyStringToChars(String key){
char[] defaultKey = {'5', '2', '9', '6', '5', '6', 0xFF, 0x07, 0x80, 0x69 , 0xFF, 0xFF, 0xFF, 0xFF,0xFF,0xFF};
if (null == key || key.length() & 6) {
return defaultK
char[] keychar = key.toCharArray();
for (int i = 0; i & keychar. i++) {
defaultKey[i] = keychar[i];
return defaultK
* 保存到本地文件
* @param cardID
* @param UID
* @param key
public static boolean saveToLocalFlie(String cardID, String UID, String key){
if (null == cardID || null == UID || null == key) {
String outString = &\'&+cardID +&\',\'&+UID +&\',\'&+key +&\'\r\n&;
String path = System.getProperty(&user.dir&)+&\\CardInfo\\&;
String fileName = new SimpleDateFormat(&YYYYMMdd&).format(new Date())+&.txt&;
File file = new File(path);
if (!file.isDirectory()) {
file.mkdirs();
file = new File(path+fileName);
FileOutputStream fos =
OutputStreamWriter osw =
if (!file.exists()) {
file.createNewFile();
fos = new FileOutputStream(file,true);
osw = new OutputStreamWriter(fos, &utf-8&);
osw.write(outString, 0, outString.length());
if (osw != null) {
osw.close();
if (fos != null) {
fos.close();
} catch (Exception e) {
e.printStackTrace();
* 保存到数据库
* @param cardID
* @param UID
* @param key
public static boolean saveToDBURL(String cardId, String UID, String key){
String url = &http://192.168.0.5/jwapp/pub/hntinit/Query/saveCardInfo.srdbexec?cardId=&+cardId+&&key=&+key+&&UID=&+UID;
PURL purl = new PURL();
String rt = purl.get(url);
if (rt == null) {
* 重文件中根据cardId获取key
* @param filePath
* @param cardId
public static char[] getKeyFromLocal(String filePath, String cardId){
if (null == filePath || filePath.equals(&&)) {
char[] keyChar =
File file = new File(filePath);
if (!file.exists() || !file.isFile()) {
String line = &&;
FileInputStream fis =
BufferedReader bfr =
fis = new FileInputStream(file);
bfr = new BufferedReader(new InputStreamReader(fis));
while ((line = bfr.readLine()) != null) {
if (line.indexOf(cardId) & 0) {
keyChar = (line.split(& &)[2]).toCharArray();
} catch (Exception e) {
} finally {
if (fis != null) {
fis.close();
if (bfr != null) {
bfr.close();
} catch (Exception e2) {
return keyC
* 从远程根据cardId获取密码
* @param cardId
public static char[] getKeyFromUrl(String cardId){
String url = &http://192.168.0.5/srdbexec?cardId=&+cardId;
PURL purl = new PURL();
String rt = purl.get(url);
if (rt == null || rt.substring(rt.indexOf(&&Result&&), rt.indexOf(&&/Result&&)).equals(&0&)) {
/*从rt中拆分*/
String keystr = rt.substring(rt.indexOf(&&Data&&), rt.indexOf(&&/Data&&));
return keystr.toCharArray();
public class PURL {
public String get(String urlstr) {
BufferedReader br =
StringBuffer ret = new StringBuffer();
url = new URL(urlstr);
} catch (MalformedURLException e) {
if (null != url) {
br = new BufferedReader(new InputStreamReader(url.openStream(),
&UTF-8&));
} catch (IOException e) {
if (null != br) {
while ((s = br.read()) != -1) {
ret.append((char) s);
} catch (IOException e) {
if (null != br) {
br.close();
} catch (IOException e) {
return ret.toString();
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1644次
排名:千里之外

我要回帖

更多关于 接触式ic卡读取器 的文章

 

随机推荐