非接触CPU卡外部认证步骤
来源:互联网 发布:巴丁算法集 编辑:程序博客网 时间:2024/05/18 03:28
最近做一款CPU卡发卡测试工具,由于好长时间没动CPU卡,再拿起来后发现都忘掉了,
外部认证这块还是记一下吧。
现在用的是复旦微的FM1216卡,之前用的是握奇的卡,先说下握奇的外部认证步骤
1、选择IC卡MF目录 00A4 0000 02 3F00 00
2、给IC卡发送命令取随机数 0084000008 获取8位随机数1
3、选择PSAM卡MF目录 00A4000002 3F00 00
4、选择PSAM卡应用目录 00A4000002 1001 00
5、PSAM卡初始化DES加密 801A 27 01 08 8位IC卡序列号
6、PSAM卡DES加密 80FA 00 00 08 8位随机数1
7、IC卡外部认证 0082 0001 08 8位随机数1
这是之前刷卡设备的认证步骤,卡的结构已经建立好了,现在用的是FM1216空卡,
而且我在数据手册上也未找到SAM卡的DES加密指令,这就尴尬了,怎么进行外部认证?
幸好是用的C#做PC端开发,有DES加密接口,空卡默认密钥是8个0xFF,那么直接用程序计算吧。。。
结果竟然认证通过了。。。
下面说下步骤
1、选择IC卡MF目录
2、给IC卡发送取8字节随机数命令
3、使用8个0xFF做密钥,8字节随机数做加密源用C#的系统API进行DES加密
4、将加密后的8字节随机数使用外部认证命令发送到IC卡,验证通过。
这里要说下C#里面DES加密是不允许弱密钥的,8个字节的0xFF会被视为弱密钥报警编译不通过,通过上网查找可通过反射进行强行加密解密
代码:
/// <summary>/// DES加密字节数组,可以使用弱密钥/// </summary>/// <param name="source"></param>/// <param name="key"></param>/// <returns></returns>public static byte[] Encrypt(byte[] source, byte[] key){DESCryptoServiceProvider des = new DESCryptoServiceProvider();des.Padding = PaddingMode.None; Type type = Type.GetType("System.Security.Cryptography.CryptoAPITransformMode");object obj = type.GetField("Encrypt", BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly).GetValue(type); MethodInfo mi = des.GetType().GetMethod("_NewEncryptor", BindingFlags.Instance | BindingFlags.NonPublic);ICryptoTransform desCrypt = (ICryptoTransform)mi.Invoke(des, new object[] { key, CipherMode.ECB, null, 0, obj }); return desCrypt.TransformFinalBlock(source, 0, source.Length);}/// <summary>/// DES字节数组解密,可以使用弱密钥/// </summary>/// <param name="source"></param>/// <param name="key"></param>/// <returns></returns>public static byte[] Decrypt(byte[] source, byte[] key){DESCryptoServiceProvider des = new DESCryptoServiceProvider();des.Padding = PaddingMode.None; Type type = Type.GetType("System.Security.Cryptography.CryptoAPITransformMode");object obj = type.GetField("Decrypt", BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly).GetValue(type); MethodInfo mi = des.GetType().GetMethod("_NewEncryptor", BindingFlags.Instance | BindingFlags.NonPublic);ICryptoTransform desCrypt = (ICryptoTransform)mi.Invoke(des, new object[] { key, CipherMode.ECB, null, 0, obj }); return desCrypt.TransformFinalBlock(source, 0, source.Length);}
1 0
- 非接触CPU卡外部认证步骤
- 非接触CPU卡外部认证步骤
- CPU射频卡外部认证的操作步骤
- CPU射频卡外部认证的操作步骤
- LKCOS/FLY非接触CPU卡
- 如何理解CPU卡内部认证与外部认证
- 如何理解CPU卡内部认证与外部认证
- 非接触CPU卡与非接触IC卡的区别是什么?
- 如何成功实施非接触CPU卡项目
- 如何成功实施非接触CPU卡项目
- 如何成功实施非接触CPU卡项目
- FM1208非接触CPU卡读写系统的研制
- 实施非接触CPU卡项目的注意事项
- ID/cpu/MI卡、非接触式读卡器资料集合
- 银行卡,IC卡,接触/非接触卡,CPU卡,NFC小结
- CPU卡简介/CPU卡和非接触式IC卡的区别
- 接触cpu卡
- 《建设事业非接触式CPU卡COS技术要求》和PBOC电子钱包的区别
- C++中为什么要尽可能使用0而不是NULL
- 数组编译时出错error C2057: expected constant expression,以及解决办法
- springBoot集成mybatis
- ubuntu安装
- 查看硬盘UUID
- 非接触CPU卡外部认证步骤
- 数据库有数据,但查询不到
- 判断一个二叉树是不是合法的二分查找树
- 字体过长时,缩略并用省略号显示
- Android——MVP架构模式之入门demo
- OJ3403数据结构实验之排序六:希尔排序
- App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure.
- 将图片处理成圆形
- 博客二三事