【问题标题】:OpenSSL ASN.1 programming tutorialOpenSSL ASN.1 编程教程
【发布时间】:2012-06-22 12:35:23
【问题描述】:

我正在寻找有关使用 OpenSSL 库进行 ASN.1 DER 编码的任何 C/C++ 教程、示例代码或文档。

【问题讨论】:

    标签: c openssl asn.1


    【解决方案1】:
    #include <openssl/asn1.h>
    #include <cstdio>
    #include <cstring>
    
    void xprint(void *data, int len) {
      unsigned char *ptr = reinterpret_cast<unsigned char*>(data);
      for (int i = 0; i < len; i++) {
        printf("%x ", *ptr);
        ptr += 1;
      }
      printf("\n");
    }
    
    void str_test() {
      ASN1_STRING asn1str;
      const char *s = "stackoverflow save the world!aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
      ASN1_STRING_set(&asn1str, s, strlen(s) + 1);
      const char *value = reinterpret_cast<char*>(ASN1_STRING_data(&asn1str));
      printf("The value is %s, strlen: %zu\n", value, strlen(value));
      unsigned char *ptr = new unsigned char[1024];
      int ret = M_i2d_ASN1_OCTET_STRING(&asn1str, &ptr);
      // int ret = i2d_ASN1_bytes(&asn1str, &ptr, V_ASN1_OCTET_STRING, V_ASN1_UNIVERSAL);
      printf("return: %d\n", ret);
      xprint(ptr - ret, ret);
    }
    
    int main(int argc, char** argv) {
      str_test();
      return 0;
    }
    

    希望这会为您节省一些时间和精力。

    http://www.umich.edu/~x509/ssleay/asn1_convert.html这个链接真的很有帮助。

    【讨论】:

    • 欢迎来到 Stack Overflow!请不要只用源代码回答。尝试对您的解决方案如何工作提供一个很好的描述。请参阅:How do I write a good answer?。谢谢
    【解决方案2】:

    好吧,正如您在 openssl 网站上看到的那样,没有 ASN.1 函数的官方文档。

    但您始终可以download openssl sources。解压后,您可以在 doc/crypto 目录文档中看到 ASN.1。

    # ~/tmp/openssl-1.0.1c/doc/crypto> ls -1 | grep -i asn
    ASN1_generate_nconf.pod
    ASN1_OBJECT_new.pod
    ASN1_STRING_length.pod
    ASN1_STRING_new.pod
    ASN1_STRING_print_ex.pod
    d2i_ASN1_OBJECT.pod
    

    这个文件是plain old documentation,我相信它可以转换为 HTML/PDF。它包含你想要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      • 2011-11-11
      • 2018-12-16
      • 1970-01-01
      • 1970-01-01
      • 2022-11-04
      • 1970-01-01
      相关资源
      最近更新 更多