Chinaunix

标题: openssl 编程中制作证书,宽字节码的一个问题(附代码) [打印本页]

作者: shiweifu    时间: 2011-06-28 14:26
标题: openssl 编程中制作证书,宽字节码的一个问题(附代码)

  1. bool Add_Name(X509_NAME * x509name, int type/*c\cn*/, char * iput/*中国*/,
  2.                 int ilen/*输入长度*/, char * outMsg)//支持中文名称
  3. {
  4.         wchar_t * ws = NULL;
  5.         wchar_t wc;
  6.         ASN1_STRING stmp, *str = &stmp;
  7.         UCHAR cbuf[256] = { 0 };
  8.         int wslen, wcnt, i;
  9.         char input[256] = { 0 };
  10.         strncpy(input, iput, ilen);
  11.         wslen = strlen(input) + 1;
  12.         memset(&stmp,0,sizeof(stmp));

  13.         if (wslen == 1)
  14.                 return TRUE;
  15.         //wslen -= 1;
  16.         /* REMOVE ws =new unsigned short[sizeof(wchar_t) * wslen]; */
  17.         ws = malloc(sizeof(wchar_t) * wslen);
  18.         if ((wcnt = mbstowcs(ws, input, wslen)) == -1) {
  19.                 sprintf(outMsg, "mbstowcs convert error");
  20.                 free(ws);
  21.                 return FALSE;
  22.         }
  23.         for (i = 0; i < (int) wcslen(ws); i++) {
  24.                 wc = ws[i];
  25.                 cbuf[2*i] = wc / 256;
  26.                 cbuf[2*i + 1] = wc % 256;
  27.         }

  28.         //ASN1_mbstring_copy(&str, cbuf, 2 * wslen , MBSTRING_BMP, B_ASN1_UTF8STRING);
  29.         ASN1_mbstring_copy(&str, cbuf, 2 * wslen , MBSTRING_BMP, B_ASN1_UTF8STRING);
  30.         X509_NAME_add_entry_by_NID(x509name, type, V_ASN1_UTF8STRING, stmp.data, stmp.length, -1, 0);
  31.         free(ws);
  32.         return TRUE;
  33. }
复制代码
最近研究下openssl和x509证书,这段代码是网上找来学习的,使用这段代码添加到证书请求中,无论是中文还是英文结尾均已
\x00结尾,使用openssl命令就无此问题,字符编码转换我一直很头大,请问该怎么解决?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2