是否有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