明华读卡器(M1卡)密码验证问题

Milianto 2015-09-25 11:29:34
我用的是M1读卡器,前三个扇区的密码设置为十二个1,后面扇区设置密码为十二个f,但是在进行验证的时候,0扇区可以验证,1扇区和2扇区验证奇偶错误,3到15都可以验证,如果把1区和2区密码改为12个f,那两扇区也可以验证。求大神解释一下,这是什么情况,难道1扇区和2扇区密码不能设置为12个1吗?以下为验证区代码:

for (int sq = 0; sq <=15; sq++)
{
// 验证该扇区密码
if (sq <3)
{
result = URF.rf_load_key_hex(_icdev, 0, 0, "111111111111");//前三个扇区密码为111111111111
if (result != 0) throw new URFException(result);
result = URF.rf_authentication(_icdev, 0, sq);
if (result != 0) throw new URFException(result);
}
else if(sq>=3)
{
result = URF.rf_load_key_hex(_icdev, 0, 0, "ffffffffffff");//后面区扇区密码都为ffffffffffff
if (result != 0) throw new URFException(result);
result = URF.rf_authentication(_icdev, 0, sq);
if (result != 0) throw new URFException(result);
}
接口函数为: //验证某一扇区密码
[DllImport("mwrf32.dll")]
public static extern short rf_authentication(int icdev, int _Mode, int _SecNr);
...全文
1136 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
51Crack 2015-09-28
  • 打赏
  • 举报
回复
uint rf_snr = 0;
UInt16 tagtype = 0;
byte size = 0;
int ret;

            rf_reset(icdev, 3);

            ret = RF_API.rf_request(icdev, 1, out tagtype);
            if (ret != 0)
                return ret;

            ret = rf_anticoll(icdev, 0, out rf_snr);
            if (ret != 0)
                return ret;

            return rf_select(icdev, rf_snr, out size);
//
byte[] key1 = new byte[17];
            byte[] key2 = new byte[7];
            key1 = Encoding.ASCII.GetBytes("111111111111");
            a_hex(key1, key2, 12);
            ret = rf_load_key(icdev, 1, 扇区, key2);
//
rf_authentication(icdev, 1, 扇区);
//rf_readval
51Crack 2015-09-28
  • 打赏
  • 举报
回复

            int ret;
            byte[] key1 = new byte[17];
            byte[] key2 = new byte[7];
            key1 = Encoding.ASCII.GetBytes("111111111111");
            a_hex(key1, key2, 12);
            ret = RF_API.rf_load_key(icdev, 1, 扇区, key2);
Milianto 2015-09-28
  • 打赏
  • 举报
回复
不过前面16个扇区是可以读了,前面是装载密码不对。装错扇区了。但是后面块的密码验证好像要用int rf_authentication_2(int icdev,unsigned char _Mode, unsigned char KeyNr,unsigned char Adr); 然而返回值不是0,很懊恼。。。一个接一个的坑。。。。
Milianto 2015-09-28
  • 打赏
  • 举报
回复
引用 7 楼 51Crack 的回复:
你怎么改的密码?
密码用厂家的软件改的啊
51Crack 2015-09-28
  • 打赏
  • 举报
回复
你怎么改的密码?
tcmakebest 2015-09-27
  • 打赏
  • 举报
回复
具体的API问了下白问,还需自己摸索.有些读卡器不需要选卡,那是精简了操作步骤,这时可能只支持读一张卡.
  • 打赏
  • 举报
回复
这问题过于专业,我对各种卡都不是很了解,就很久很久以前接触过门禁卡和ic卡,然后各种区概念的都忘光了
  • 打赏
  • 举报
回复
这问题过于专业,我对各种卡都不是很了解,就很久很久以前接触过门禁卡和ic卡,然后各种区概念的都忘光了
Milianto 2015-09-25
  • 打赏
  • 举报
回复
引用 3 楼 tcmakebest 的回复:
12个1或者F其实是16进制,这个错误应该是API的错误,不是卡对密码有挑掦.
我写的调用select函数是这样写的: [DllImport("mwrf32.dll", EntryPoint = "rf_select")] public static extern short rf_select(int icdev, int snr, ref Byte size); 不知道类型是不是有错误。返回值是1.如果按照明华读卡器的函数说明1表示无卡。。。。。
Milianto 2015-09-25
  • 打赏
  • 举报
回复
引用 3 楼 tcmakebest 的回复:
12个1或者F其实是16进制,这个错误应该是API的错误,不是卡对密码有挑掦.
本来3扇区到15的密码是12 个f,我在C#里面装载密码时我装载12个或者12个2,竟然也能读卡成功,我也是醉了。。我看了c++工程里面,在寻卡之后,还进行了一个选卡操作。但是我看到的C#demo里面都没有使用rf_selcet,不知道这个有没有关系啊。。。。(不会写接口调用函数,自己写了一个好像调试的也不对!)
tcmakebest 2015-09-25
  • 打赏
  • 举报
回复
12个1或者F其实是16进制,这个错误应该是API的错误,不是卡对密码有挑掦.

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧