public static ResultArgs ReadSector(int sector, M1KeyMode keyMode, byte[] key) { ICardReader cardReader = ContextManager.GetCardReader(); ResultArgs ret = cardReader.Select(); if (!ret.Succ) { return(new ResultArgs(false, null, "Select Card Error!")); } CardSelectResult info = (CardSelectResult)ret.Result; logger.Debug(String.Format("Select card_id={0}, ATQA=0x{1}, SAK={2}", BitConverter.ToString(info.SN), info.ATQA.ToString("X4"), info.SAK.ToString("X2"))); if (!cardReader.Authen(keyMode, sector * 4, key)) { logger.Debug(String.Format("Auth sector {0} failed !", sector)); return(new ResultArgs(false, null, "Auth sector failed !")); } byte[] buffer; int len = 0; if (!cardReader.ReadSector(sector, out buffer, out len)) { return(new ResultArgs(false, null, "Read sector failed !")); } return(new ResultArgs(true, BitConverter.ToString(buffer), "OK")); }
private void TestKey(M1KeyMode keyMode, byte[] key) { ResultArgs ret = this.reader.Select(); if (!ret.Succ) { this.TraceMsg.Trace("Select Card Error!"); return; } CardSelectResult info = (CardSelectResult)ret.Result; this.TraceMsg.Trace(String.Format("Select card_id={0}, ATQA=0x{1}, SAK={2}", BitConverter.ToString(info.SN), info.ATQA.ToString("X4"), info.SAK.ToString("X2"))); foreach (CheckBox cb in this.cardSectorSelected) { if (!cb.Checked) { continue; } int sector = int.Parse(cb.Text.Trim()); if (!this.reader.Authen(keyMode, sector * 4, key)) { this.TraceMsg.Trace("Authen sector {0} failed !", sector); } else { this.TraceMsg.Trace("Authen sector {0} OK !", sector); } } }
public MifareCard(ILog logger, IKeyService keyService, ICardReader reader, M1KeyMode keyMode, byte[] defaultKey) { this.logger = logger; this.reader = reader; this.keyService = keyService; this.keyMode = keyMode; this.defaultKey = defaultKey; }
public IHttpActionResult ReadSector(dynamic request) { int sector = Convert.ToInt32(request.sector); M1KeyMode keyMode = Enum.Parse(typeof(M1KeyMode), Convert.ToString(request.mode), true); byte[] key = HexString.FromHexString(Convert.ToString(request.key), "-"); logger.Debug(String.Format("read sector {0}, mode = {1}, key={2} ", sector, keyMode, BitConverter.ToString(key))); return(Json <ResultArgs> (CardUtil.ReadSector(sector, keyMode, key))); }
private void BtnInitialize_Click(object sender, EventArgs e) { byte[] key = HexString.FromHexString(this.AuthenKey.Text.Trim(), "-"); M1KeyMode keyMode = (M1KeyMode)Enum.Parse(typeof(M1KeyMode), AuthenKeyType.Items[AuthenKeyType.SelectedIndex] as String, true); ICard card = new MifareCard( ContextManager.GetLogger(), //ConfigManager.GetKeyService(), null, ContextManager.GetCardReader(), keyMode, key); card.Initialize(ContextManager.GetCardTemplete().SegmentAddr); }
public IHttpActionResult Personalize(dynamic request) { int sector = Convert.ToInt32(request.sector); M1KeyMode keyMode = Enum.Parse(typeof(M1KeyMode), Convert.ToString(request.mode), true); byte[] key = HexString.FromHexString(Convert.ToString(request.key), "-"); CardInfo cardInfo = JsonConvert.DeserializeObject <CardInfo>(Convert.ToString(request.data)); logger.Debug(String.Format("personalize : {0}, keyMode={1}, Key={2}", sector, keyMode, BitConverter.ToString(key))); logger.Debug(cardInfo.ToString()); return(Json <ResultArgs>(new ResultArgs(true, cardInfo, "OK"))); }
/// <summary> /// change control block of sector /// </summary> public bool ChangeControlBlock(int sector, M1KeyMode keyMode, byte [] key, byte[] keyA, byte[] keyB) { if (!IsValidSector(sector)) { return(false); } int startBlockNo = ComputeStartBlockNo(sector); if (!Authen(keyMode, startBlockNo, key)) { logger.Debug("Can't authen with KeyMode=" + keyMode.ToString()); return(false); } return(dc_changeb3(this.hReader, (byte)(sector & 0xff), keyA, 0x04, 0x04, 0x04, 0x03, 0x00, keyB) == SUCC); }
public bool ChangeControlBlock2(int sector, M1KeyMode keyMode, byte[] key, byte[] keyA, byte[] keyB) { if (!IsValidSector(sector)) { return(false); } int startBlockNo = ComputeStartBlockNo(sector); int blockNum = ComputeBlockNum(sector); if (!Authen(keyMode, startBlockNo, key)) { logger.Debug("Can't authen with KeyMode=" + keyMode.ToString()); return(false); } byte[] cb = ByteUtil.Malloc(M1_BLOCK_LEN); Array.Copy(keyA, 0, cb, 0, 6); Array.Copy(controlBlock, 0, cb, 6, 4); Array.Copy(keyB, 0, cb, 10, 6); return(WriteBlock(startBlockNo + blockNum - 1, cb)); }
/// <summary> /// test control block /// </summary> private void BtnWriteControlBlock_Click(object sender, EventArgs e) { this.TraceMsg.Trace("Write sector Control block", true); byte[] keyA = HexString.FromHexString(this.KeyA.Text.Trim(), "-"); byte[] keyB = HexString.FromHexString(this.KeyB.Text.Trim(), "-"); byte[] key = HexString.FromHexString(this.AuthenKey.Text.Trim(), "-"); M1KeyMode mode = (M1KeyMode)Enum.Parse(typeof(M1KeyMode), AuthenKeyType.Items[AuthenKeyType.SelectedIndex] as String, true); foreach (CheckBox cb in this.cardSectorSelected) { if (!cb.Checked) { continue; } int sector = int.Parse(cb.Text.Trim()); if (this.reader.ChangeControlBlock(sector, mode, key, keyA, keyB)) { this.TraceMsg.Trace(String.Format("Write sector {0} block ok!", sector)); } } }
/// <summary> /// block logic number /// </summary> public bool Authen(M1KeyMode keyMode, int blockNo, byte[] pwd) { byte mode = (keyMode == M1KeyMode.KEY_A) ? (byte)0x00 : (byte)0x04; return(dc_authentication_passaddr(this.hReader, mode, (byte)(blockNo & 0xff), pwd) == SUCC); }