在Xcode中使用openssl 解析X509 主题 subject 中文出现乱码:
subject = X509_get_subject_name(x509Cert); //获取证书主题信息
unsigned long rv = 0;
NSMutableString *subjectstring = [[NSMutableString alloc]init];
// X509_NAME_get_entry(subject, subject->modified)->value->data[i]; entriesNum = sk_X509_NAME_ENTRY_num(subject->entries);
//循环读取个条目信息
for(i=0;i<entriesNum;i++)
{
//获取第I个条目值
name_entry = sk_X509_NAME_ENTRY_value(subject->entries,i);
Nid = OBJ_obj2nid(name_entry->object);
//判断条目编码的类型
NSLog(@" type is %d",name_entry->value->type);
msginfoLen=name_entry->value->length;
memcpy(msginfo,name_entry->value->data,msginfoLen);
msginfo[msginfoLen]='\0';
switch(Nid)
{
case NID_countryName://国家C
//printf("issuer 's C:%s\n",msginfo);
[subjectstring appendString:[NSString stringWithFormat:@"C=%s,",msginfo]];
break;
case NID_stateOrProvinceName://省ST
//printf("issuer 's ST:%s\n",msginfo);
[subjectstring appendString:[NSString stringWithFormat:@"ST=%s,",msginfo]];
// [subjectstring appendString:tempstr];
break;
case NID_localityName://地区L
//printf("issuer 's L:%s\n",msginfo);
[subjectstring appendString:[NSString stringWithFormat:@"L=%s,",msginfo]];
break;
case NID_organizationName://组织O
//printf("issuer 's O:%s\n",msginfo);
[subjectstring appendString:[NSString stringWithFormat:@"O=%s,",msginfo]];
break;
case NID_organizationalUnitName://单位OU
//printf("issuer 's OU:%s\n",msginfo);
[subjectstring appendString:[NSString stringWithFormat:@"OU=%s,",msginfo]];
break;
case NID_commonName://通用名CN
//printf("issuer 's CN:%s\n",msginfo);
[subjectstring appendString:[NSString stringWithFormat:@"CN=%s",msginfo]];
break;
case NID_pkcs9_emailAddress://Mail
//printf("issuer 's emailAddress:%s\n",msginfo);
break;
}//end switch
}
subjectstring打印出来中文是乱码,英文是正常测试过多次,当name_entry->value->type==V_ASN1_BMPSTRING 主题subject的value type是V_ASN1_BMPSTRING的时候,也就是中文会出现乱码,是英文字符的话 主题subject的value type是V_ASN1_PRINTABLESTRING 是正常显示的。现在不知道怎么正常显示中文,求大家指点迷津。多谢多谢,已经困扰我很久了,知道的,真的给点帮助啊!
subject = X509_get_subject_name(x509Cert); //获取证书主题信息
unsigned long rv = 0;
NSMutableString *subjectstring = [[NSMutableString alloc]init];
// X509_NAME_get_entry(subject, subject->modified)->value->data[i]; entriesNum = sk_X509_NAME_ENTRY_num(subject->entries);
//循环读取个条目信息
for(i=0;i<entriesNum;i++)
{
//获取第I个条目值
name_entry = sk_X509_NAME_ENTRY_value(subject->entries,i);
Nid = OBJ_obj2nid(name_entry->object);
//判断条目编码的类型
NSLog(@" type is %d",name_entry->value->type);
msginfoLen=name_entry->value->length;
memcpy(msginfo,name_entry->value->data,msginfoLen);
msginfo[msginfoLen]='\0';
switch(Nid)
{
case NID_countryName://国家C
//printf("issuer 's C:%s\n",msginfo);
[subjectstring appendString:[NSString stringWithFormat:@"C=%s,",msginfo]];
break;
case NID_stateOrProvinceName://省ST
//printf("issuer 's ST:%s\n",msginfo);
[subjectstring appendString:[NSString stringWithFormat:@"ST=%s,",msginfo]];
// [subjectstring appendString:tempstr];
break;
case NID_localityName://地区L
//printf("issuer 's L:%s\n",msginfo);
[subjectstring appendString:[NSString stringWithFormat:@"L=%s,",msginfo]];
break;
case NID_organizationName://组织O
//printf("issuer 's O:%s\n",msginfo);
[subjectstring appendString:[NSString stringWithFormat:@"O=%s,",msginfo]];
break;
case NID_organizationalUnitName://单位OU
//printf("issuer 's OU:%s\n",msginfo);
[subjectstring appendString:[NSString stringWithFormat:@"OU=%s,",msginfo]];
break;
case NID_commonName://通用名CN
//printf("issuer 's CN:%s\n",msginfo);
[subjectstring appendString:[NSString stringWithFormat:@"CN=%s",msginfo]];
break;
case NID_pkcs9_emailAddress://Mail
//printf("issuer 's emailAddress:%s\n",msginfo);
break;
}//end switch
}
subjectstring打印出来中文是乱码,英文是正常测试过多次,当name_entry->value->type==V_ASN1_BMPSTRING 主题subject的value type是V_ASN1_BMPSTRING的时候,也就是中文会出现乱码,是英文字符的话 主题subject的value type是V_ASN1_PRINTABLESTRING 是正常显示的。现在不知道怎么正常显示中文,求大家指点迷津。多谢多谢,已经困扰我很久了,知道的,真的给点帮助啊!
解决方案 »
- 如何让控件uitextfield输入汉字,新手
- tableview 等图片下载完再更新cell内的uiimage?
- MKMapView 响应touchesbegan事件
- 请教,如何让传统asp.net web程序在Ipad上能运行
- 我的xcode只有4.3的sdk,怎么办啊?
- iphone开发中的小游戏的图片处理,有没有好的指导资料呢
- 如何以编程方式改变settings.bundle(设置束)的值
- app发布遇到Waiting for Export Compliance
- sqllite该怎么理解?
- CAShapeLayer 的缩放问题(transform.scale)
- tableView cellForRowAtIndexPath 方法不可循环对比?
- ios本地通知,如何立即通知
NSString *tmp = [[NSString alloc] initWithData:data encoding:NSUnicodeStringEncoding];