是否有BER-TLV的Java解析器?

我是Java新手,所以我想使用标准解决方案,我认为,标准任务。 标签和值的长度未知。

这里的教程给出了如何解析BER-TLV的技巧。 使用JACCAL

我根据这里提供的信息做了一个简单的解析器: http : //www.codeproject.com/Articles/669147/Simple-TLV-Parser

我不知道这个代码是否支持所有标准,但它对我有用。

public static Map parseTLV(String tlv) { if (tlv == null || tlv.length()%2!=0) { throw new RuntimeException("Invalid tlv, null or odd length"); } HashMap hashMap = new HashMap(); for (int i=0; i 127) { // more than 1 byte for lenth int bytesLength = length-128; len = tlv.substring(i, i=i+(bytesLength*2)); length = Integer.parseInt(len,16); } length*=2; String value = tlv.substring(i, i=i+length); //System.out.println(key+" = "+value); hashMap.put(key, value); } catch (NumberFormatException e) { throw new RuntimeException("Error parsing number",e); } catch (IndexOutOfBoundsException e) { throw new RuntimeException("Error processing field",e); } } return hashMap; } 

javaemvreader项目包含一些解析BER-TLV的代码 。

我找到了BER TLV的Javacard类。 希望那些帮助

您可以使用此BER-TLV解析器: git上的源代码或下载jar 。
例子:

如何解析

 byte[] bytes = HexUtil.parseHex("50045649534157131000023100000033D44122011003400000481F"); BerTlvParser parser = new BerTlvParser(LOG); BerTlvs tlvs = parser.parse(bytes, 0, bytes.length); 

如何建立

 byte[] bytes = new BerTlvBuilder() .addHex(new BerTag(0x50), "56495341") .addHex(new BerTag(0x57), "1000023100000033D44122011003400000481F") .buildArray(); 

这个免费的图书馆可能对你有用。 我用这个来进行简单的TLV解析。 无论如何,它是MIT许可证,你可以修改它。

 https://github.com/VakhoQ/tlv-encoder