+ -
当前位置:首页 → 问答吧 → openssl 编程中制作证书,宽字节码的一个问题(附代码)

openssl 编程中制作证书,宽字节码的一个问题(附代码)

时间:2011-06-28

来源:互联网

RT
C/C++ code

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命令就无此问题,字符编码转换我一直很头大,请问该怎么解决?

作者: shiweifu   发布时间: 2011-06-28

\x00 是不是表示字符串结尾?

作者: justkk   发布时间: 2011-06-28