Java密码学 - 13.自定义ASN.1结构

  1. Java自定义ASN.1结构数据
  2. 存储数据
  3. 读取

ASN.1结构可用于 储存、发送、接收信息。

Java自定义ASN.1结构数据

CertificationRequest是继承ASN1Object

1
2
3
4
5
6
7
8
9
10
public class PKCS10CertificationRequest{
...
private CertificationRequest certificationRequest;
...
}

//模仿对象
public class CertificationRequest  extends ASN1Object{
...      
}

我们跟着CertificationRequest构造即可 , 需注意:

1
2
3
4
5
6
7
8
9
10
11
12
//CertificationRequest 源码
public ASN1Primitive toASN1Primitive()
{
    // Construct the CertificateRequest
    ASN1EncodableVector  v = new ASN1EncodableVector();

    v.add(reqInfo);
    v.add(sigAlgId);
    v.add(sigBits);

    return new DERSequence(v);
}
  • 所有对象均是继承ASN1Object。(reqInfo、sigAlgId、sigBits)。
  • 通过ASN1EncodableVector来构造层次。


存储数据

1
2
3
PKCS10CertificationRequest csr=...;
csr.toASN1Structure().getEncoded(); //转换成可存储的类型。
//...存储到文件等里。


读取

1
2
byte[] bytes = FileUtils.readFileToByteArray(new File(自定义数据包));
ASN1Sequence seq = ASN1Sequence.getInstance(bytes);

DEROctetString类型则是:

1
byte[] byte = new DEROctetString(seq).getOctets()

其他类型类似操作即可。