`
lao_lee
  • 浏览: 97082 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

实现Information card的PIN code支持

阅读更多
声明: 本文所有code除摘自网络的已注明出处外,都是本人在个人时间进行练习的代码,系本人个人书写,没有copy自任何出处, 也与IBM, Eclipse, 以及任何其他组织无关,本人也不对其主张任何权利.

1. 如何判断一张卡是否被lock?
- 下面的字段不为空
RoamingInformationCard/InformationCardMetaData/PinDigest

2. 如何解锁?
2.1. 用户输入PIN code, 检测用户输入
String password = "12345678";
try {
  byte[] byte_pw = password.getBytes("UTF-16LE");
  MessageDigest md = MessageDigest.getInstance("SHA1");
  md.update(byte_pw);
  byte[] input_digest = md.digest();			
  byte[] stored_digest = ((PersonalCard)card).getPinDigest();
  boolean equalsTo = true;
  for(int i=0; i<input_digest.length; i++){
    if(input_digest[i] != stored_digest[i]){
      equalsTo = false;
    }
  }
  System.out.println("User input a " + (equalsTo ? "correct": "invalid") + " PIN code");


第二步:从正确的密码导出key
从PIN code倒出key, 倒出算法为PBKDF1 (RFC-2898).
输入参数:
Salt - MasterKey字段的第1-16字节 (0字节为version num)
Count - MasterKey字段的第17-20字节   
Key length - 32 octets
Hash function - SHA-256
MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
sha256.update(byte_pw);
sha256.update(salt);
byte[] digestBytes = sha256.digest();
for (int i = 1; i < 1000; i++) {
    sha256.update(digestBytes);
    digestBytes = sha256.digest();
}
        
sha256.reset();


第三步: AES的Sample程序(来自http://java.sun.com/developer/technicalArticles/Security/AES/AES_v1.html)
   
       KeyGenerator kgen = KeyGenerator.getInstance("AES");
       kgen.init(128); // 192 and 256 bits may not be available

       // Generate the secret key specs.
       SecretKey skey = kgen.generateKey();
       byte[] raw = skey.getEncoded();

       SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");

       // Instantiate the cipher
       Cipher cipher = Cipher.getInstance("AES");
       cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
       byte[] encrypted =
         cipher.doFinal((args.length == 0 ?
          "This is just an example" : args[0]).getBytes());
       System.out.println("encrypted string: " + asHex(encrypted));
       cipher.init(Cipher.DECRYPT_MODE, skeySpec);
       byte[] original =
         cipher.doFinal(encrypted);
       String originalString = new String(original);
       System.out.println("Original string: " +
         originalString + " " + asHex(original));
分享到:
评论

相关推荐

    Pin Information for the Cyclone® II EP2C8 & EP2C8A Devices

    通过详细解析引脚的银行编号、VREFB组别、引脚名称、功能以及配置选项,设计者能够更好地掌握如何根据项目需求配置和利用这些引脚,从而实现高效、可靠的系统设计。此外,掌握LVDS等高速信号的引脚配置方法,对于...

    Microsoft Symbol and Type Information/CodeView Debugging Information

    ### Microsoft Symbol and Type Information/CodeView Debugging Information #### 符号与类型信息概述 Microsoft Symbol and Type Information/CodeView Debugging Information 是一种用于描述编译后的程序代码中...

    Cyclone EP1C6 Device Pin information

    这里以144-Pin TQFP、240-Pin PQFP和256-Pin FineLine BGA三种封装为例,介绍了各个管脚的基本情况。 ##### 表格解析 - **Pin Name/Function**:管脚名称及主要功能。 - **Optional Function(s)**:该管脚可能具有...

    CardReader sample code

    通过分析和学习这个"CardReader sample code",开发者可以了解如何在.NET环境中与智能卡和RFID设备进行通信,处理接收到的数据,并实现特定的业务逻辑。这将有助于他们构建自己的智能卡读取应用,例如创建安全的身份...

    ASCII码(American Standard Code for Information Interchange)

    ASCII码,全称为American Standard Code for Information Interchange,即美国信息交换标准代码,是计算机科学中的基础编码系统。它在1963年由美国国家标准协会(ANSI)制定,并于1967年正式发布,旨在统一不同...

    Salzburg Card Information

    Salzburg Card Information

    electric product code information service (EPCIS)

    服务层则包含了服务操作,而绑定层则指定了这些服务在实际环境中的实现方式。 为了实现扩展性,EPCIS采用了子类化和扩展点机制。子类化允许开发者根据需求对核心数据类型进行扩展,添加新的属性或行为。扩展点则是...

    Cyclone EP1C12Q240 device Pin information

    通过对管脚信息的了解,设计者可以更高效地利用这款芯片实现所需功能。本文档提供的管脚列表和定义有助于理解如何正确连接和配置各个管脚,而PLL与Bank图示则进一步加深了对芯片内部结构的理解。 通过本文档的学习...

    Altera_Pin Information IV EP4CE22 Device-综合文档

    本文将围绕“Altera Pin Information for the Cyclone IV EP4CE22 Device”这一主题,深入解析其引脚信息,帮助读者理解和应用这款设备。 EP4CE22作为Cyclone IV系列的一员,拥有丰富的I/O资源和逻辑单元,适用于多...

    UECapabilityInformation.pdf

    在5G通信技术中,UECapabilityInformation是网络与终端设备之间进行能力信息交换的重要过程,这一过程涉及到UE(用户设备)向网络报告其支持的功能和性能特性。在3GPP规范36.331中,这个过程由eNB(演进型节点B,即...

    ISO/IEC 18004 Information technology — QR Code

    ### ISO/IEC 18004: 信息技术 — 自动识别与数据捕获技术 — 条码符号 — QR Code #### 标准概述 ISO/IEC 18004是一项国际标准,全称是“信息技术 — 自动识别与数据捕获技术 — 条码符号 — QR Code”。该标准首次...

    keil中,RTT 实现代码放到 vector和code 放到ram

    本文将详细介绍如何在Keil中配置RTT实现代码放置到`vector`和`RAM`,以及`code`放置到`RAM`的操作步骤和相关知识点。 首先,理解`vector`和`code`的含义至关重要。`vector`通常指的是中断向量表,它包含了系统中...

    VB.code.achieve.document.information.extraction.ra_The Informati

    VB实现文档信息提取技术代码VB code to achieve the document information extraction

    Information Builders公司介绍

    - **强大的技术支持与服务**:Information Builders提供全方位的技术支持与咨询服务,确保客户能够充分利用其产品功能。 #### 联系信息 - **地址**:北京市海淀区西直门北大街60号首钢国际大厦1216室 邮编:100088...

    条型码code39字体库

    Code39,全称美国标准39码(American Standard Code for Information Interchange,ASCII 39),是最早的条形码之一,适用于多种场景,包括库存管理、医疗标签、资产管理等。 Code39条形码的特点: 1. **字符集丰富...

    Age of Information A New Metric for Information Freshness.pdf

    此外,该系列的《Synthesis Lectures on Communication Networks》涵盖了广泛的主题,从算法到硬件实现,涉及网络安全、多址协议等多个方面,旨在帮助专业人士和学生跟上通信网络技术的快速发展,并为教学提供资源。...

    System Hardware Information Finder

    I started this utility to get some basic information about the hardware. After that I have received some emails from some of our fellow programmers, who are frequent visitors of this site, asking to ...

    8051 Jam Byte-Code Player

    For more information about Jam, including a copy of the Jam Byte-Code compiler and additional documentation go to: http://www.jamisp.com/. Where Can I Learn More About Support for this Jam Player? ...

    ATM.rar_cvv_magnetic_smartcard

    the customer is identified by inserting a plastic ATM card with a magnetic stripe or a plastic smartcard with a chip, that contains a unique card number and some security information, such as an ...

Global site tag (gtag.js) - Google Analytics