-->

是否有一个Java解析器BER-TLV?(Is there a Java parser for BE

2019-06-26 06:34发布

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

Answer 1:

教程在这里给出了如何解析BER-TLV一个提示。 使用JACCAL



Answer 2:

:您可以使用此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();

Maven的依赖

<!-- https://mvnrepository.com/artifact/com.payneteasy/ber-tlv -->
<dependency>
    <groupId>com.payneteasy</groupId>
    <artifactId>ber-tlv</artifactId>
    <version>1.0-8</version>
</dependency>


Answer 3:

我做了基于此处提供的信息的简单解析器: http://www.codeproject.com/Articles/669147/Simple-TLV-Parser

我不知道如果这个代码支持所有的标准,但它为我工作。

public static Map<String, String> parseTLV(String tlv) {
    if (tlv == null || tlv.length()%2!=0) {
        throw new RuntimeException("Invalid tlv, null or odd length");
    }
    HashMap<String, String> hashMap = new HashMap<String, String>();
    for (int i=0; i<tlv.length();) {
        try {
            String key = tlv.substring(i, i=i+2);

            if ((Integer.parseInt(key,16) & 0x1F) == 0x1F) {
                // extra byte for TAG field
                key += tlv.substring(i, i=i+2);
            }
            String len = tlv.substring(i, i=i+2);
            int length = Integer.parseInt(len,16);

            if (length > 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;
}


Answer 4:

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



Answer 5:

我发现Java卡类BER TLV。 希望那些帮助



Answer 6:

可能是这个免费的图书馆可以对您有用。 我用这一个简单的TLV解析。 反正它与MIT许可,您可以修改它。

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


文章来源: Is there a Java parser for BER-TLV?
标签: java parsing tlv