コード例 #1
0
ファイル: CardUtil.cs プロジェクト: leavesxy/RonftonCard
        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"));
        }
コード例 #2
0
        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);
                }
            }
        }
コード例 #3
0
ファイル: MifareCard.cs プロジェクト: leavesxy/RonftonCard
 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;
 }
コード例 #4
0
        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)));
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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")));
        }
コード例 #7
0
        /// <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);
        }
コード例 #8
0
        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));
        }
コード例 #9
0
        /// <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));
                }
            }
        }
コード例 #10
0
        /// <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);
        }