IC卡应用系统开发-(二)加密机访问

保姆级教程:用复卡器搞定小区门禁卡(ID/IC卡读写+手机模拟全流程) 本文提供了一份详细的复卡器使用教程,涵盖ID卡和IC卡的识别、复制及手机NFC模拟全流程。通过专业复卡器,用户可以轻松实现门禁卡的读写操作,并了解加密IC卡的破解技巧与手机模拟的兼容性方案,解决日常门禁卡管理的痛点问题。 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 在有卡片的应用系统中,很多数据都是进行加密处理的.如有的系统是采用密文传输数据,有的采用明文 MAC方式,也有的是密文 MAC.但不管采用那种方式,都是与加密/解密息息相关的. 在我开发的系统中,为保证系统的安全,卡片有效和数据完整,做了一个软加密机.就是一个java程序实现对数据的加密,解密和MAC运算.采用3DES算法,它提供密钥经分散后的加/解功能.关于java实现DES的程序,在网上可以找到,这里不在赘述.本文介绍对软加密机访问的例程. 我还是定义了3个类: 接口类:IHSM.JAVA,说明对外提供的行为. 实现类:HSM.JAVA,对加密机的访问具体实现. 异常类:HSMException.java,继承系统Exception类. package com.microapp.business.hsm; /** *

Title: System

* *

Description:

* *

Copyright: Copyright (c) 2005

* *

Company: my

* * @author microapp * @version 1.0 */ public interface IHSM { /** * 加密数据 * @param interspersed * @param data String * @param index int * @return String * @throws HSMException */ public String getEncryption(String interspersed, String data, int index) throws HSMException; /** * getKey * * @param inInterspersed String * @param outInterspersed String * @param index int */ public String getKey(String inInterspersed, String outInterspersed, int index) throws HSMException; /** * 解密数据 * @param interspersed * @param data String * @param index int * @return String * @throws HSMException */ public String getDecryption(String interspersed, String data, int index) throws HSMException; /** * 取得MAC * @param interspersed * @param challenge String * @param data String * @return String * @throws HSMException */ public String getMAC(String interspersed, String data, int index) throws HSMException; } 异常类: ackage com.microapp.business.hsm; /** *

Title:

* *

Description:

* *

Copyright: Copyright (c) 2005

* *

Company:

* * @author microapp * @version 1.0 */ public class HSMException extends Exception { String message; public HSMException() { } public HSMException(String errmsg) { super(errmsg); } public HSMException(int errCode) { switch(errCode) { case 80: message - "命令不可识别!"; break; case 81: message - "报文长度错误!"; break; default: message - "其他错误!"; } } } 实现文件 package com.microapp.business.hsm; /** *

Title:

* *

Description:

* *

Copyright: Copyright (c) 2005

* *

Company:

* * @author me * @version 1.0 */ import java.io.*; import java.net.*; public class HSM implements IHSM { private String address = "192.168.1.88"; private int port = 8888; public HSM() { } public HSM(String addr, int port) { this.address = addr; this.port = port; } public void setAddress(String addr) { this.address = addr; } public String getAddress() { return address; } public void setPort(int port) { this.port = port; } public int getPort() { return port; } /** * 加密 * @param interspersed String * @param data String * @param index int * @return String * @throws HSMException */ public String getEncryption(String interspersed, String data, int index) throws HSMException { System.out.println("Hava the data request at HSMe " data); int l = data.length(); if(l != 16) { throw new HSMException("Data length error!"); } Socket Client; DataInputStream InputS; DataInputStream KeyS; PrintStream OutputS; byte[] sendbuf = new byte[45]; byte[] recvbuf = new byte[64]; int i = 0; byte b1 = 0; byte b2 = 0; try { Client = new Socket(address, port); InputS = new DataInputStream(Client.getInputStream()); OutputS = new PrintStream(Client.getOutputStream()); KeyS = new DataInputStream(System.in); sendbuf[0] = 0; //长度(高) sendbuf[1] = 45; //长度(低) sendbuf[2] = (byte)0xB0; //命令代码 sendbuf[3] = 1; //密钥索引 sendbuf[4] = 24; //密钥长度 sendbuf[5] = 0; //密钥 for(i = 0; i < 24; i ) { sendbuf[5 i] =(byte)(Integer.parseInt(interspersed.substring((i * 2), (i * 2) 2), 16)); } sendbuf[6] = 0x80; //计算方式:80-加密 sendbuf[7] = 0x00; //计算数据长度(高) sendbuf[8] = 8; //计算数据长度(低) sendbuf[9] = 0; //计算数据 for(i = 0; i < 8; i ) { sendbuf[9 i] =(byte)(Integer.parseInt(data.substring((i * 2), (i * 2) 2), 16)); } OutputS.write(sendbuf); l = InputS.read(recvbuf); Client.close(); if (l < 6) { throw new HSMException("Return data length error." Integer.toHexString(l)); } if((recvbuf[3] != 0)) { throw new HSMException("Return data error." Integer.toHexString(recvbuf[3]).toUpperCase()); } l = (recvbuf[4] * 256 recvbuf[5]); StringBuffer sb = new StringBuffer(); String s = new String(); for(i = 0; i < l; i ) { s = Integer.toHexString(recvbuf[i 6]).toUpperCase(); if(s.length() == 1) { sb.append("0" s); } else if(s.length() > 2) { sb.append(s.substring(s.length() - 2, s.length())); } else { sb.append(s); } } return sb.toString(); } catch(IOException e) { throw new HSMException("IOException Happened" e.getMessage()); } } /** * 解密 * @param interspersed String * @param data String * @return String * @throws HSMException */ public String getDecryption(String interspersed, String data, int index) throws HSMException { System.out.println("Hava the data request at HSMd " data); int l = data.length(); if((l % 2) != 0) { throw new HSMException("Data length error!"); } Socket Client; DataInputStream InputS; DataInputStream KeyS; PrintStream OutputS; byte[] sendbuf = new byte[45]; byte[] recvbuf = new byte[64]; int i = 0; byte b1 = 0; byte b2 = 0; try { Client = new Socket(address, port); InputS = new DataInputStream(Client.getInputStream()); OutputS = new PrintStream(Client.getOutputStream()); KeyS = new DataInputStream(System.in); sendbuf[0] = 0; //长度(高) sendbuf[1] = 45; //长度(低) sendbuf[2] = (byte)0xB0; //命令代码 sendbuf[3] = 1; //密钥索引 sendbuf[4] = 24; //密钥长度 sendbuf[5] = 0; //密钥 for(i = 0; i < 24; i ) { sendbuf[5 i] =(byte)(Integer.parseInt(interspersed.substring((i * 2), (i * 2) 2), 16)); } sendbuf[6] = 0x81; //计算方式:81-解密 sendbuf[7] = 0x00; //计算数据长度(高) sendbuf[8] = (byte)(l / 2); //计算数据长度(低) sendbuf[9] = 0; //计算数据 for(i = 0; i < (l / 2); i ) { sendbuf[9 i] =(byte)(Integer.parseInt(data.substring((i * 2), (i * 2) 2), 16)); } OutputS.write(sendbuf); i = InputS.read(recvbuf); Client.close(); if(i < 6) { throw new HSMException("Return data length error." Integer.toHexString(i)); } if((recvbuf[3] != 0)) { throw new HSMException("Return data error." Integer.toHexString(recvbuf[3]).toUpperCase()); } l = (recvbuf[4] * 256 recvbuf[5]); StringBuffer sb = new StringBuffer(); String s = new String(); for(i = 0; i < l; i ) { s = Integer.toHexString(recvbuf[i 6]).toUpperCase(); if(s.length() == 1) { sb.append("0" s); } else if(s.length() > 2) { sb.append(s.substring(s.length() - 2, s.length())); } else { sb.append(s); } } return sb.toString(); } catch(IOException e) { throw new HSMException("IOException Happened" e.getMessage()); } } /** * 获取MAC * @param interspersed String * @param challenge String :随机数 * @param data String :加密数据 * @return String * @throws HSMException */ public String getMAC(String interspersed, String data, int index) throws HSMException { Socket Client; DataInputStream InputS; DataInputStream KeyS; PrintStream OutputS; byte[] sendbuf = new byte[64]; byte[] recvbuf = new byte[64]; int i = 0; byte b1 = 0; byte b2 = 0; try { int l = data.length(); if ((l % 2) != 0) { throw new HSMException("Data length must be 2 times."); } Client = new Socket(address, port); InputS = new DataInputStream(Client.getInputStream()); OutputS = new PrintStream(Client.getOutputStream()); KeyS = new DataInputStream(System.in); sendbuf[0] = 0x00; //长度 sendbuf[1] = (byte) (l 12); //长度 sendbuf[2] = (byte) 0xB0; //命令代码 sendbuf[3] = 1; //密钥索引 sendbuf[4] = 24; //密钥长度 sendbuf[5] = 0; //密钥 for(i = 0; i < 24; i ) { sendbuf[5 i] =(byte)(Integer.parseInt(interspersed.substring((i * 2), (i * 2) 2), 16)); } sendbuf[6] = 0x82; //计算方式:82-计算MAC sendbuf[7] = 0; //计算数据长度 sendbuf[8] = (byte) i; //计算数据长度 sendbuf[9] = 0; //计算数据 for (i = 0; i < (l / 2); i ) { sendbuf[37 i] =(byte)(Integer.parseInt(data.substring((i * 2), (i * 2) 2), 16)); } OutputS.write(sendbuf); i = InputS.read(recvbuf); Client.close(); if (i < 6) { throw new HSMException("Return data length error." Integer.toHexString(i)); } if ( (recvbuf[3] != 0)) { throw new HSMException("Return data error." Integer.toHexString(recvbuf[3]).toUpperCase()); } l = (recvbuf[4] * 256 recvbuf[5]); StringBuffer sb = new StringBuffer(); String s = new String(); for (i = 0; i < l; i ) { s = Integer.toHexString(recvbuf[i 6]).toUpperCase(); if(s.length() == 1) { sb.append("0" s); } else if(s.length() > 2) { sb.append(s.substring(s.length() - 2, s.length())); } else { sb.append(s); } } return sb.toString(); } catch (IOException e) { throw new HSMException("IOException Happened" e.getMessage()); } } } 为在应用服务器中能够实现逻辑数据组合,我建立了一个无状态session bean.在bean主要是实现数据的打包和转换. package com.microapp.business; import javax.ejb.SessionBean; import javax.ejb.SessionContext; import javax.ejb.CreateException; import com.vsc.ets.business.hsm.*; import java.util.Random; public class HSMModuleBean implements SessionBean { public static final int EXTERNAL_AUTHEN_KEY = 0x46; public static final int INTERNAL_AUTHEN_KEY = 0x45; public static final int MAC_KEY = 0x44; public static final int GENERAL_KEY = 0x41; SessionContext sessionContext; IHSM hsm = new HSM("192.168.1.88", 8888); Random rd = new Random(); String challenge; public void ejbCreate() throws CreateException { } public void ejbRemove() { } public void ejbActivate() { } public void ejbPassivate() { } public void setSessionContext(SessionContext sessionContext) { this.sessionContext = sessionContext; } public String getMAC(String s1, String s2, String s3, String challenge, String data) { try { String interspersed = s1 s2 s3; return hsm.getMAC(interspersed, challenge, MAC_KEY); } catch (Exception ex) { return null; } } public boolean internalAuthentication(String s1, String s2, String s3, String data) { String interspersed = s1 s2 s3; try { String s = hsm.getDecryption(interspersed, data, INTERNAL_AUTHEN_KEY); System.out.println("HSM internal authentication: " s " challenge: " challenge); if(s.equals(challenge)) { return true; } else { return false; } } catch(HSMException ex) { return false; } } public String[] externalAuthentication(String s1, String s2, String s3, String data) { String interspersed = s1 s2 s3; String[] s = new String[2]; this.challenge = "1234567887654321"; try { s[0] = hsm.getEncryption(interspersed, data, EXTERNAL_AUTHEN_KEY); s[1] = this.challenge; System.out.println("Ext: Encryption : " s[0] " Challenge: " s[1]); return s; } catch(HSMException ex) { return null; } } public String provideEncryption(String interspersed, String data) { try { return hsm.getEncryption(interspersed, data, GENERAL_KEY); } catch (Exception ex) { return null; } } public String provideDecryption(String interspersed, String data) { try { return hsm.getDecryption(interspersed, data, GENERAL_KEY); } catch (Exception ex) { return null; } } } 该过程在实践中应用,完全与硬加密机HSM相同.
精通C#实现IC卡读写:软件开发全面指南 IC卡(集成电路卡)是智能卡的一种,广泛应用于身份验证、金融交易等领域。IC卡通信协议定义了卡与读卡器之间交换数据的方式、格式和过程。本章节旨在介绍IC卡通信的基础知识,帮助读者对IC卡通信协议有一个概览性的理解。对称加密算法中,数据的加密和解密使用同一个密钥。在IC卡通信中,这种算法通常用于快速且安全地加密和解密数据。 阅读详情

相关推荐

VB.NET环境下USB接口读写IC卡示例源码

IC卡,即集成电路卡,是一种带有微处理器和存储器的智能卡。它不仅可以存储信息,还能进行信息处理。IC卡按照其接触方式,可分为接触式IC卡和非接触式IC卡(如Mifare卡、M1卡)。在数据交互过程中,我们主要通过特定的读写设备(读卡器)以及相应的驱动软件来实现与IC卡的通信。动态链接库(Dynamic Link Library),简称DLL,是Microsoft Windows操作系统中实现共享函数库概念的一种方式。

weixin_42168902的博客 973

java 实现基本自定义加密解密

在日常编码过程中,少不了需要对各种传递信息进行加密操作,常用的加密有MD5加密、alibabanacos中也有md5加密、Base64加密等,但对于我们来说,有时候需要自己进行加密并且还需要解密等。

X1nZz的博客 1221

中石化IC卡开发规范

中石化IC卡开发规范

JAVA常用加密解密算法Encryption and decryption

加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。大体上分为双向加密和单向加密,而双向加密又分为对称加密和非对称加密(有些资料将加密直接分为对称加密和非对称加密)。双向加密大体意思就是明文加密后形成密文,可以通过算法还原成明文。而单向加密只是对信息进行了摘要计算,不能通过算法生成明文,单向加密从严格意思上说不能算是加密...

qq_38150381的博客 1788

ic卡读取源码

IC卡读取写入vb 源码,适用与世面上大多数ic id智能卡片

IC卡基本知识

关于IC卡常用知识的整理。介绍了不同卡片的功用及M1卡版的数据结构

通过Java实现恩尼格玛密码机

1简介 前一段时间看了B站介绍恩尼格玛密码机的视频,试了试用Java来实现一台恩尼格玛密码机,在此文章中来简单介绍自己实现的思路和代码以供大家学习参考,如有错误,欢迎指出。 单表替换密码会由于字母分布的规律被破解出来,可以使用多表替换来增加破解难度,而恩尼格玛密码可以算是一种多表替换的加密方法。 恩尼格玛密码机加密原理简单的来说就是每当输入一位明文的时候有规律地动态更换替换表。由于其结构独特的设计使恩尼格玛密码具有自反性和排己性。 2 原理介绍及...

Painnico的博客 2327

IC卡详解,驱动开发

详细介绍IC卡工作原理,利于驱动开发,里面有介绍ic卡内存扇区,每个扇区4块,前3个是数据块,第四个是控制块。。。

IC卡一卡一密软件开发过程

IC卡一卡一密软件的开发流程

henan371的博客 4604

IC卡技术在应用系统开发中的运用

摘要 主要介绍IC卡技术的特点,及其如何运用到实际应用系统   关键字  IC卡,动态库,密码   IC卡技术已经广泛应用于金融、保险、社会保障、身份识别等领域。她以她存储容量大,安全性能好,携带方便等特点,得到广大行业的普遍认同。 一  IC卡应用从技术角度来讲分三个层次:硬件层、技术层和应用层。 1  硬件层分两个方面: 1)         IC卡芯片及卡的制作。IC卡芯片目前主要有国外爱尔梅特、西门子等几家公司生产。IC卡片的制作是把IC芯片封装成为一张张各式各样的卡片,这样的公司国内很多. 2)         另一方面为IC卡读写器.IC卡读写器粪通用与专用两种:通用

机器学习项目(四)疫情期间网民情绪识别 (一)

疫情期间网民情绪识别 赛题背景 2019新型冠状病毒(2019-nCoV)感染的肺炎疫情发生对人们生活生产的方方面面产生了重要影响,并引发国内舆论的广泛关注,众多网民参与疫情相关话题的讨论。为了帮助政府掌握真实社会舆论情况,科学高效地做好防控宣传和舆情引导工作,本赛题针对疫情相关话题开展网民情绪识别的任务。 数据介绍 训练集 10万条 无标记样本90万条 测试集1万条 数据集依据与“新冠肺炎”相关...

qq_33357094的博客 8972

一文搞懂:Android用NFC读取各类IC卡

本文围绕 NFC 读取各类 IC 卡展开,解析 NFC 与 IC 卡的底层关联,按通信协议和芯片类型梳理分类逻辑。重点介绍 MIFARE 系列、ISO 15693、FeliCa、身份证等 6 类主流 IC 卡的核心差异(通信协议、存储容量、加密机制等)及典型用途,给出快速区分方法。同时提供 Android 平台 NFC 读取实战方案(配置、核心代码),强调加密卡读取、权限等注意事项,助力掌握相关技术要点。

weixin_37794278的博客 2636

Python 逆向解析知乎盐选反爬字体,实现内容精准还原

本文详细解析了知乎盐选内容的反爬字体机制,并提供了使用Python逆向解析WOFF字体文件的完整方案。通过fontTools库构建解码字典,实现乱码文本的精准还原,帮助开发者应对动态字体策略,同时强调法律与道德风险。

weixin_29268385的博客 1296

非接触式IC卡(Mifare)读写芯片

<br />简介  非接触式IC卡又称射频卡,由IC芯片、感应天线组成,封装在一个标准的PVC卡片内,芯片及天线无任何外露部分。非接触式IC卡是世界上最近几年发展起来的一项新技术,它成功的将射频识别技术和IC卡技术结合起来,结束了无源(卡中无电源)和免接触这一难题,是电子器件领域的一大突破.卡片在一定距离范围内(通常为5—10mm)靠近读写器表面,通过无线电波的传递来完成数据的读写操作。<br />  对非接触式IC卡的读写操作是通过读写器来完成的,读写器是主控机与非接触式IC卡间进行信息传输和存储甚至运算

Synthesize的专栏 8205

手把手教你用C++和NI-VISA写个简易仪器上位机(附QT工程配置)

本文详细介绍了如何使用C++和QT框架结合NI-VISA驱动开发跨平台仪器控制上位机软件。从Ubuntu环境配置、VISA通信核心架构设计到QT界面与业务逻辑解耦,提供了完整的实战指南和代码示例,帮助开发者快速构建专业级仪器控制程序。

weixin_42522374的博客 273

QtQuick QML教程(2):qml语法介绍

​ qml一个普通的文本文件,后缀是.qml, 一个qml文件主要由两部分组成:(1) import语句 :这个就像C++中的头文件, 使用 import 导入qml需要的相关模块,可以查询Qt文档进行导入,注意每个版本的Qt模块声明可能都不同,相比于QWidget项目,QtQuick的变动是很大的;(2) QML对象树 :根对象是Window, 然后可以在Window中添加各种控件,例如按钮,文本,菜单等。

琅嬛福地 551

ic卡、id卡、sim卡之间的区别

IC卡是智能卡的总称, IC卡带有存储器可读写,普通的IC卡也叫储存器卡、逻辑加密卡。如果不强调的话CPU卡也是IC卡的一种,是高级版的IC卡,CPU卡有信息处理的功能,优点是存储空间大、读取速度快、支持一卡多用功能等特点。ID卡没有算法,不可写入数据,其ID出厂一次性写入,应用人员只可读出卡号加以利用 ,ID卡容易复制,安全性较低。安全性:CPU卡内含有随机数发生器,硬件加密算法等,配合芯片上的OS系统,达到金融级的安全级别,防止重复卡、仿制卡、卡上数据非法修改。他们主要的区别在于工作频段。

f85270796的博客 482

工业级稳定!C# 实现 Modbus RTU 多设备并发通信实战

摘要:本文提出一种基于C#的Modbus RTU多设备并发通信方案,解决工业自动化中单线程通信的串口抢占、数据阻塞等问题。采用任务队列+线程安全锁+异步调度的三层架构,实现16台及以上RTU设备的稳定并发读写。方案包含串口管理单例、Modbus通信核心和任务调度层,支持超时重试、异常捕获等工业级容错机制。通过NModbus库和.NET框架,提供可直接用于工业现场的代码实现,已在工控项目中长期验证,有效提升多设备通信效率和稳定性。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 581

商业银行金融IC卡国密改造安全建设方案

一、背景 金融和重要领域国密改造是我国大力推进自主国产密码应用的重要政策。2011年3月,人民银行发布了《关于推进金融IC卡应用工作的意见》,开始全面启动我国金融IC卡迁移,要求2015年起银行业金融机构发卡银行卡均应为金融IC卡。2014年11月3日,人民银行印发了《关于进一步做好金融IC卡应用工作的通知》,要求自2015年4月1日起,各发卡银行新发金融IC卡应符合PBOC3.0规范。相较于P...

liujiong2000的博客 7027

富芮坤fr8008gp 240X280 lvgl项目启动

fr8008gp_240X280_lvgl项目启动

cheng___yi的博客 1758

大模型对齐的核心引擎:RLHF三阶段完整技术体系详解——从InstructGPT到ChatGPT与Claude 4.6的工程实践

RLHF从InstructGPT起步,经由ChatGPT、Claude系列的工程实践,已演变为现代大语言模型不可或缺的对齐基础设施。其三阶段流程——SFT构建基础能力基线,奖励模型将人类偏好编码为可微信号,PPO以KL约束驱动策略向偏好分布优化——构成了当代对齐技术的核心骨架。OpenAI的路线侧重于以海量人工标注和多目标奖励建模持续精细化RLHF流程,在规模与工程深度上持续推进;

nmdbbzcl的博客 1064

社会保障IC卡发卡方案

方案概述背景<br />  社会保障IC卡是劳动和社会保障部门面向城镇从业人员和离退休人员发放的IC卡,标识持卡人的个人参保状态、人员类别和公民身份号码,可以作为劳动者在劳动保障领域办理有关事务的身份证明和交易消费电子凭证,目前主要应用范围包括医疗保险、养老保险、失业保险、工伤保险、生育保险,并可以扩展到社会大保障的就业服务、职业技能培训和鉴定、劳动合同管理、工资收入管理、以及劳动和社会保障争议等方面。<br />  特别在最近几年,各地方政府都在积极贯彻国家的社会保障政策,使得更多的老百姓享受到了实惠。随

guangzi的专栏 1483

040、全志V853低功耗AI视觉平台的ISP调优——电池供电场景下的画质与功耗平衡

本文分享了全志V853 AI视觉平台在电池供电场景下的ISP调优经验。作者通过实际项目踩坑案例,揭示了V853 ISP的特殊性:不同于主流平台,其ISP与CPU共享时钟域,降噪能力有限,需特别注意功耗控制。关键优化策略包括:关闭无效ISP模块、优化Sensor联动时钟、采用场景自适应配置、开发快速启动模式等。特别指出V853个体差异大,量产需考虑高低温影响。文章强调V853的ISP功耗优化需从寄存器级别精打细算,不能简单套用其他平台经验,建议选型时单独评估ISP功耗,避免续航缩水。

zzfmlxs的博客 26

别再傻傻分不清!一张图看懂IC卡、ID卡、CPU卡、M1卡到底有啥区别(附选购指南)

本文详细解析了IC卡、ID卡和CPU卡的核心差异与应用场景,帮助读者快速区分这三种智能卡技术。通过技术本质、实战鉴别方法和选购指南,为物业管理者、智能家居爱好者等提供实用建议,特别适合需要了解RFID技术的用户。

adr5970的博客 511

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

社保/医保IC卡如何重写重用,全国各地市社保局需要哪些确实的帮助?

1.   分析提供原有数据库结构、数据字典。 2.   分析提供原有IC卡数据结构、新金保工程IC卡数据结构。 3.   分析提供共原有IC卡卡片密码及加密机制、新金保工程IC卡卡片密码及加密机制。 4.   分析提供原有IC卡数据加密机制、新金保工程IC卡数据加密机制。 5.   提供IC卡重写重用全自动处理动态库,实现原有IC卡在新金保系统中刷卡即自动判断是否需要处理,如需要

勤快人的资源空间 3091

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: java高级应用符合oo惯例的表现层控制
下一篇: Java 理论与实践: 再谈 Urban 性能传言
java169
博客等级 码龄18年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值