- 论坛徽章:
- 0
|
- bool Add_Name(X509_NAME * x509name, int type/*c\cn*/, char * iput/*中国*/,
- int ilen/*输入长度*/, char * outMsg)//支持中文名称
- {
- wchar_t * ws = NULL;
- wchar_t wc;
- ASN1_STRING stmp, *str = &stmp;
- UCHAR cbuf[256] = { 0 };
- int wslen, wcnt, i;
- char input[256] = { 0 };
- strncpy(input, iput, ilen);
- wslen = strlen(input) + 1;
- memset(&stmp,0,sizeof(stmp));
- if (wslen == 1)
- return TRUE;
- //wslen -= 1;
- /* REMOVE ws =new unsigned short[sizeof(wchar_t) * wslen]; */
- ws = malloc(sizeof(wchar_t) * wslen);
- if ((wcnt = mbstowcs(ws, input, wslen)) == -1) {
- sprintf(outMsg, "mbstowcs convert error");
- free(ws);
- return FALSE;
- }
- for (i = 0; i < (int) wcslen(ws); i++) {
- wc = ws[i];
- cbuf[2*i] = wc / 256;
- cbuf[2*i + 1] = wc % 256;
- }
- //ASN1_mbstring_copy(&str, cbuf, 2 * wslen , MBSTRING_BMP, B_ASN1_UTF8STRING);
- ASN1_mbstring_copy(&str, cbuf, 2 * wslen , MBSTRING_BMP, B_ASN1_UTF8STRING);
- X509_NAME_add_entry_by_NID(x509name, type, V_ASN1_UTF8STRING, stmp.data, stmp.length, -1, 0);
- free(ws);
- return TRUE;
- }
复制代码 最近研究下openssl和x509证书,这段代码是网上找来学习的,使用这段代码添加到证书请求中,无论是中文还是英文结尾均已
\x00结尾,使用openssl命令就无此问题,字符编码转换我一直很头大,请问该怎么解决? |
|