public ApduMsg CreateDFFile(ushort fileID, int fileLenght, string FileAccess = "F0F0") { // 执行指令: 80E0 3F01 0D 38 0520 F0F0 95 FFFF 4444463031 //说明: 80E0 :指令类别和指令码; 3F01 :文件标识; 0D:长度; 38 :文件类型 //0520 :文件的空间大小; F0: 读权限; F0: 写权限; // 4444463031 :文件名 DDF01 也就是ASCII码了 //80-E0-00-01-09-38-00-64-F0-F0-95-FF-FF-31 //80,E0,3F,01,0D,38,05,20,F0,F0,95,FF,FF,44,44,46,30,31, //EF01 文件标识 //07 LC data 长度(07) //28 文件类型(二进制) //002A 文件长度 //F00E 读写权限 //FF 保留 //80 不支持线路保护 ApduCommand cmd = new ApduCommand(); cmd.CLA = 0x80; cmd.INS = 0xE0; cmd.SetP1P2(fileID); //构造一个data ,长度,权限, List <byte> data = new List <byte>(); //文件类型 data.Add((byte)CPUFileType.MFDF); //文件长度 data.AddRange(CPUCardHelper.IntConvertTo2Byte(fileLenght)); //data.Add(0x05); //data.Add(0x20); //添加读写权限 //data.AddRange(CPUCardHelper.ConverToBytes(FileAccess)); data.Add(0xF0); data.Add(0xF0); //应用文件ID data.Add(0x95); //保留字 data.Add(0xFF); data.Add(0xFF); //使用文件ID当文件夹名称 //data.AddRange(CPUCardHelper.IntConvertTo2Byte(fileID)); data.AddRange(GetDFNameByID(fileID)); //不支持线路保护 //data.Add(0x80); cmd.Data = data.ToArray(); ApduMsg msg = ApduMsg.GetApduByData(SendStrCommand(cmd)); if (msg.Code == "6A-86") { msg.Msg += "(文件已存在)"; } return(msg); }
/// <summary> /// 创建文件 /// </summary> /// <param name="fileIDHex">文件标识符2字节</param> /// <param name="fileType">枚举文件类型</param> /// <param name="fileLenght">文件长度</param> /// <param name="fileNameHex">文件名称,十六进制</param> /// <param name="FileAccess"></param> /// <returns></returns> public ApduMsg CreateFile(ushort fileID, CPUFileType fileType, int fileLenght, string FileAccess = "0000") { //Demo //80E0-EF01-07-28-002A-F00E-FF-80 //EF01 文件标识 //07 LC data 长度(07) //28 文件类型(二进制) //002A 文件长度 //F00E 读写权限 //FF 保留 //80 不支持线路保护 ApduCommand cmd = new ApduCommand(); cmd.CLA = 0x80; cmd.INS = 0xE0; cmd.SetP1P2(fileID); //构造一个data ,长度,权限, List <byte> data = new List <byte>(); //文件类型 data.Add((byte)fileType); //文件长度 data.AddRange(CPUCardHelper.IntConvertTo2Byte(fileLenght)); //添加读写权限 data.AddRange(CPUCardHelper.ConverToBytes(FileAccess)); //添加文件名 data.AddRange(CPUCardHelper.ConverToBytes("FFFF")); //不支持线路保护 data.Add(0x80); cmd.Data = data.ToArray(); ApduMsg msg = ApduMsg.GetApduByData(SendStrCommand(cmd)); if (msg.Code == "6A-86") { msg.Msg += "(文件已存在)"; } return(msg); }
/// <summary> /// 设置P1P2(int类型,比如设置文件偏移量) /// </summary> public void SetP1P2(ushort value) { byte[] data = CPUCardHelper.IntConvertTo2Byte(value); P1 = data[0]; P2 = data[1]; }