簡體   English   中英

OpenSSL ASN.1編程教程

[英]OpenSSL ASN.1 programming tutorial

我正在尋找有關使用OpenSSL庫進行ASN.1 DER編碼的任何C / C ++教程,示例代碼或文檔。

好吧,正如您在openssl網站上看到的那樣,沒有ASN.1功能的官方文檔。

但您可以隨時下載openssl源代碼 解壓縮后,您可以在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

這個文件是普通的舊文檔 ,我相信,它可以轉換為HTML / PDF。 它包含你想要的東西。

#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此鏈接非常有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM