Chinaunix
标题:
openssl 编程中制作证书,宽字节码的一个问题(附代码)
[打印本页]
作者:
shiweifu
时间:
2011-06-28 14:26
标题:
openssl 编程中制作证书,宽字节码的一个问题(附代码)
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命令就无此问题,字符编码转换我一直很头大,请问该怎么解决?
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2