在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 是正常显示的。现在不知道怎么正常显示中文,求大家指点迷津。多谢多谢,已经困扰我很久了,知道的,真的给点帮助啊!
解决方案 »
- objective c 的对象指针到底是什么
- OC中 NSInteger 与int 有何不同啊?
- xcode中用interface builder建立一个view,怎么只有一个.xib文件,代码没有啊
- 求一款能装上mac系统的 其他品牌笔记本(神州除外)
- 请教一个比较基础的声明语法问题
- ios生涯得第一个产品
- 会c++和一点object-c,开发微信公众服务号,怎么个流程?
- ios 代码块 异步回调
- 求助!swift语言中怎么把Any类型的变量转换成AnyObject类型
- iOS 截图当前屏幕 包括状态栏
- tableView cellForRowAtIndexPath 方法不可循环对比?
- ios本地通知,如何立即通知
NSString *tmp = [[NSString alloc] initWithData:data encoding:NSUnicodeStringEncoding];