2013-04-05 50 views
3

我有一个问题,并花了最后两天寻找答案。OpenSSL Diffie Hellman DER编码C

我用C语言生成了一个带有OpenSSL的DH对象(更具体的Objective-C,但我认为没有这样的东西),现在可以访问作为Bignums的p,q和publickey值。我需要将这些值作为ASN.1 DER Encoding作为一个base64字符串发送到服务器。

在Android客户端上,重要的一步是.getPublic()。getEncoded()后跟一个base64编码。 (是一些关键协议左右)

我该怎么做c或objective-c?代码示例会非常棒。

回答

1

对于DER编码,你可以通过i2d_DHParams来解决你的目的。

假设你在DH有DH参数,那么你可以调用

int len; 
    len = i2d_DHParams (dh, &buf); 
    //It should write encoded dh to buf and len should be number of bytes written. 

你可以看到DH方法here

+0

我已经试过了,但结果太短。 java文档描述的方法有点: [Here](http://docs.oracle.com/javase/1.5.0/docs/api/java/security/Key.html) 但我不知道我怎么能做到这一点。 – JulianM 2013-04-06 16:21:28

+0

@Joulez:如果输出采用Java代码进行base64编码,那么您需要将其编码到Base64中。 – doptimusprime 2013-04-07 05:43:28

+0

是的,无论如何。但getEncoded()方法在java中返回一个字节数组,并且在单独的步骤中获得base64编码。 – JulianM 2013-04-07 08:31:51