`

ans.1 java编译器使用入门

 
阅读更多

eclipse上安装ans.1插件
可以在线安装,通过http://www.asnlab.org/updates,不过在国内可能需要翻_墙,反正我在线安装不了。
也可以访问地址https://www.asnlab.cn/downloads.html#update_site下载插件,先找ASN.1 Java编译器下载,还有Java SE运行库下载等会编译时用得着。在eclipse上本地安装,接着在https://www.asnlab.cn/asnjc/gettingstarted.html申请一个试用license(也可以买一个6000多只能一个人用。),会把license发到你的邮箱,然后windows-->Preferences-->ASN.1-->Compiler-->ASN.1 Java Compiler-->General-->Serial Number粘贴进去apply就行了.

一个例子:来自https://www.asnlab.cn/asnjc/gettingstarted.html
MyHTTP例子改编自 http://www.w3.org/Protocols/HTTP-NG/asn1.html, 它是一个FHTTP GET请求的简化形式。 对于我们的例子,假设我们需要应用以下我们已经在ASN.1开发工具 使用入门中看到过的ASN.1模块。
选择 File > New > Project...

在 ASN.1 类目中, 选择 ASN.1 Project, 然后点击 Next.
工程名输入 'MyHTTP' 然后点击 Finish.
现在ASN.1 文件可以添加到项目中,通过从其他地方复制到项目的源目录,或者按从以下步骤零开始创建ASN.1文件:
选择 File > New > Other...

在 ASN.1 类目中, 选择 ASN.1 Module, 然后点击 Next.
模块名中输入 'MyHTTP' 然后点击Finish.
在开启的编辑器中输入以下的源代码:

MyHTTP DEFINITIONS  
AUTOMATIC TAGS ::=  
BEGIN  
  
   GetRequest ::= SEQUENCE {  
      header-only  BOOLEAN,  
      lock         BOOLEAN,  
      accept-types AcceptTypes,  
      url          Url,  
      ...,  
      timestamp    GeneralizedTime  
   }  
     
   AcceptTypes ::= SET {  
      standards BIT STRING { html(0), plain-text(1), gif(2), jpeg(3) } (SIZE(4)) OPTIONAL,  
      others    SEQUENCE OF VisibleString (SIZE(4)) OPTIONAL  
   }  
     
   Url ::= VisibleString (FROM("a".."z"|"A".."Z"|"0".."9"|"./-_~%#"))  
     
   v GetRequest ::= {  
    header-only  TRUE,  
    lock         FALSE,  
    accept-types {  
        standards { html, plain-text }  
    },  
    url          "www.asnlab.com",  
    timestamp    "20100202020202Z"  
   }  
     
END  

 


保存ASN.1 文件, 编译好的Java类文件将自动生成(如果没有,请检查License Key是否设置好)。
创建一个Java项目test, 然后添加ASN.1 Java运行库到编译路径。
复制生成的Java类文件到项目的合适的包(本例中是"MyHTTP") 目录。
在项目中创建类TestMyHttp.java,输入如下内容:

public class TestMyHttp {  
  
    public static void main(String[] args) throws Exception {  
        GetRequest getRequest=new GetRequest();  
        getRequest.header_only=true;  
        getRequest.lock=false;  
        getRequest.accept_types=new AcceptTypes();  
        getRequest.accept_types.standards=new Standards(new byte[1],(byte)4);  
        getRequest.accept_types.standards.setHtml();  
        getRequest.accept_types.standards.setPlain_text();  
        getRequest.url="www.asnlab.com";  
        Calendar cal = Calendar.getInstance();  
        cal.set(Calendar.YEAR, 2010);  
        cal.set(Calendar.MONTH, Calendar.FEBRUARY);  
        cal.set(Calendar.DAY_OF_MONTH, 2);  
        cal.set(Calendar.HOUR_OF_DAY, 2);  
        cal.set(Calendar.MINUTE, 2);  
        cal.set(Calendar.SECOND, 2);  
        cal.set(Calendar.MILLISECOND, 0);  
        cal.set(Calendar.ZONE_OFFSET, 0);  
        getRequest.timestamp = cal.getTime();  
        ByteArrayOutputStream bos=new ByteArrayOutputStream();  
        getRequest.ber_encode(bos);  
        byte[] bs=bos.toByteArray();  
        for(int i=0; i<bs.length; i++) {  
            System.out.printf("%02X ", bs[i] & 0xFF);  
        }  
    }  
  
}  

 

编译该项目,如果自动编译Build automatically被关掉。
右击文件 TestMyHttp.java 然后选择 Run as &gt; Java Application:
30 2D 80 01 FF 81 01 00 A2 04 80 02 04 C0 83 0E 77 77 77 2E 61 73 6E 6C 61 62 2E 6F 72 67 84 0F 32 30 31 32 31 32 32 31 31 32 31 32 32 31 5A

BER编码后的逐字节逐比特的含义:

0x30 -- [0011|0000], [UNIVERSAL, CONSTRUCTED, 16(SEQUENCE)] - GetRequest
0x2D -- [0010|1101], length 45

0x80 -- [1000|0000], [CONTEXT, PRIMITIVE, 0(BOOLEAN)] GetRequest.header_only
0x01 -- [0000|0001], length 1
0xFF -- [0000|1111], value TRUE

0x81 -- [1000|0001], [CONTEXT, PRIMITIVE, 1(BOOLEAN)] GetRequest.lock
0x01 -- [0000|0001], length 1
0x00 -- [0000|0000], value FALSE

0xA2 -- [1010|0010], [CONTEXT, CONSTRUCTED, 2(SET)] - GetRequest.accept_types
0x04 -- [0000|0100], length 4

0x80 -- [1000|0000], [CONTEXT, PRIMITIVE, 0(BIT STRING)] AcceptTypes.standards
0x02 -- [0000|0010], length 2
0x04 -- [0000|0100], 4 unused bits
0xC0 -- [1100|0000], {html, plaint_text}

0x83 -- [1000|0011], [CONTEXT, PRIMITIVE, 3(VisibleString)] GetRequest.url
0x0E -- [0000|1100], length 14
0x77 0x77 0x77 0x2E 0x61 0x73 0x6E 0x6C 0x61 0x62 0x2E 0x6F 0x72 0x67 -- www.asnlab.org

0x84 -- [1000|0011], [CONTEXT, PRIMITIVE, 4(GeneralizedTime)] GetRequest.timestamp
0x0F -- [0000|1100], length 15
0x32 0x30 0x31 0x32 0x31 0x32 0x32 0x31 0x31 0x32 0x31 0x32 0x32 0x31 0x5A -- 20121221121221Z

 

分享到:
评论

相关推荐

    ANS.1 介绍文档,JAVA代码样例,JAR包

    在Java中处理ANS.1文件通常涉及到使用特定的库或框架,这些库提供了API来编码和解码ANS.1格式的数据。开发者可以通过编写Java代码来实现对ANS.1数据的序列化和反序列化。这通常涉及到以下步骤: 1. **序列化**: 将...

    ANS.1 VE 查看 编辑 工具

    标题中的“ANS.1 VE 查看 编辑 工具”指的是用于处理ASN.1(Abstract Syntax Notation One)编码的虚拟环境(VE)工具。ASN.1是一种国际标准,用于定义数据结构的抽象语法,广泛应用于通信协议、数据库、软件工程等...

    ANS.1格式查看(可编辑)

    这个“ANS.1格式查看(可编辑)”的资源可能是一个工具或软件,能够帮助用户查看和编辑ASN.1编码的数据。 ASN.1编码是基于规则的二进制编码方式,它允许复杂的数据结构(如记录、数组和枚举)被转换为二进制形式,...

    ansible-2.6.14-1.el7.ans.noarch.rpm

    ansible-2.6.14-1.el7.ans.noarch.rpm

    ansible-2.4.4.0-1.el7.ans.noarch.rpm

    ansible-2.4.4.0-1.el7.ans.noarch.rpm

    李宏毅 机器学习 作业1 ans.csv

    李宏毅 机器学习 作业1 ans.csv

    ansible-2.6.19-1.el7.ans.noarch.rpm

    ansible-2.6.19-1.el7.ans.noarch.rpm

    ansible-2.6.11-1.el7.ans.noarch.rpm

    ansible-2.6.11-1.el7.ans.noarch.rpm

    ex1_ans.rar

    2. **RAR格式**:"ex1_ans.rar" 使用的是RAR格式,这是由RarLab开发的压缩格式,提供了比ZIP更好的压缩率,但可能不被所有系统或软件广泛支持。 3. **解压缩工具**:要访问RAR文件的内容,需要使用解压缩工具,如...

    ds_ans.zip

    高一凡数据结构与算法参考程序,数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。...

    java 解析ASN.1 编码格式cdr话单文件例子

    3. **生成Java类**:使用ASN.1编译器(如Bouncy Castle的asn1tools)将ASN.1定义转换为Java类。这些类将包含解析和序列化所需的方法。 4. **解析CDR文件**:在Java代码中,实例化ASN.1编解码器,然后读取CDR文件的...

    Java程序的设计实用教程(第2版)-ans.doc

    2. **Java程序的执行过程**:Java程序的开发通常需要三个步骤:首先使用文本编辑器编写源代码文件(扩展名为.java),然后通过javac编译器将源文件转换为字节码文件(扩展名为.class),最后使用Java解释器运行字节...

    exam3_1_ans.py

    exam3_1_ans.py

    《ASN.1编码规则》

    为了更好地理解和使用ASN.1,你可以参考提供的《ASN.1编码规则详解(最全最经典).pdf》文档。该文档可能涵盖了ASN.1的基本概念、数据类型、编码规则的详细解释,以及实际应用案例分析,对于学习和应用ASN.1会有很大的...

    midterm_ans.mlx

    midterm_ans.mlx

    midterm2022_ans.mlx

    midterm2022_ans.mlx

    report06_ans.mlx

    report06_ans.mlx

    ch7-ans.bak

    ch7-ans.bak

    ans.zip_ssd6_visual c

    标题“ans.zip_ssd6_visual c”暗示了这个压缩包可能包含了与SSD6(可能是某种软件、系统或课程的版本号)相关的资料,并且这些资料是使用Visual C++编写的或者是关于Visual C++编程的。描述中的“pq1 ssd6 ...

    lab1_04_ans.exe

    lab1_04_ans.exe

Global site tag (gtag.js) - Google Analytics