Java密码学

来源:互联网 发布:电脑运行网络命令大全 编辑:程序博客网 时间:2024/06/05 08:50

我们是通过ASN.1结构, 来构造信息和接收信息并提取所需要的信息

如何自定义ASN.1结构

我们查看PKCS10CertificationRequest的源码, 会发现CertificationRequest是继承ASN1Object

public class PKCS10CertificationRequest{...private CertificationRequest certificationRequest;...}public class CertificationRequest    extends ASN1Object{    }

于是我们跟着构造即可 , 这里值得注意的是

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结构, 也就明白, 它们是层次结构. 而层次结构之间 是通过ASN1EncodableVector这个类进行链接

//最后储存的时候PKCS10CertificationRequest csr=...;csr.toASN1Structure().getEncoded(); //然后再储存

或者你也可以override getEncoded()

你理解成原来的数据「123」变成

<data>123</data>

获取对象 ,我们也可以通过查看request的源码了解到

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

这里之后, 我们就需要将

<data>123</data>

变回123

DEROctetString类型的具体操作是

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

其他类型原理其实也就这样.

原创粉丝点击