免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2768 | 回复: 0
打印 上一主题 下一主题

[C] openssl 编程中制作证书,宽字节码的一个问题(附代码) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-06-28 14:26 |只看该作者 |倒序浏览

  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命令就无此问题,字符编码转换我一直很头大,请问该怎么解决?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP