iOS openssl庫(kù) x509證書解析

1. 第一步先去認(rèn)真看下下邊這兩個(gè)連接,了解一下這個(gè)x509證書解析到底是個(gè)什么玩意

http://www.360doc.com/content/16/0407/16/3242454_548621325.shtml

了解之后大約需要做三步:第一步導(dǎo)入openssl庫(kù),如何導(dǎo)入自行百度,注意路徑問(wèn)題,

路徑如圖,根據(jù)自己實(shí)際項(xiàng)目修改

第二部:將證書導(dǎo)入結(jié)構(gòu)體


第三部就是證書解析:我這只解析了證書版本,證書序列號(hào)(sn),證書頒發(fā)者名字(issuer_name),證書頒發(fā)者序列號(hào)(issuer_sn)


```

/** 獲取SN */

-(NSString*)get_SN:(X509* )m_px{

? ? NSString* str_SN=@"";

? ? ASN1_INTEGER*serial =X509_get_serialNumber(m_px);

? ? //打印證書序列號(hào)

? ? //printf("serialNumber is: \n");

? ? NSMutableString *str = [[NSMutableString alloc] init];

? ? for(inti =0; i < serial->length; i++) {

? ? ? ? //printf("%02x", serial->data[i]);

? ? ? ? [strappendString:[NSStringstringWithFormat:@"%02x",serial->data[i]]];

? ? }

? ? //小寫轉(zhuǎn)大寫

? ? // str_SN=str.uppercaseString;

? ? //奇數(shù)補(bǔ)0操作

? ? if(str_SN.length%2==1) {

? ? ? ? str_SN=[NSStringstringWithFormat:@"0%@",str_SN];

? ? }

? ? returnstr_SN;

}

/** 獲取版本號(hào) */

-(NSString*)get_version:(X509* )m_px{

? ? NSString* str_version=@"";

? ? NSIntegerver =X509_get_version(m_px);

? ? //? ? NSLog(@"ver=%zi",ver);

? ? switch(ver){

? ? ? ? case0:? ? //V1

? ? ? ? ? ? //...

? ? ? ? ? ? str_version=@"V1";

? ? ? ? ? ? break;

? ? ? ? case1:? ? //V2

? ? ? ? ? ? //...

? ? ? ? ? ? str_version=@"V2";

? ? ? ? ? ? break;

? ? ? ? case2:? ? //V3

? ? ? ? ? ? //...

? ? ? ? ? ? str_version=@"V3";

? ? ? ? ? ? break;

? ? ? ? default:

? ? ? ? ? ? //Error!

? ? ? ? ? ? break;

? ? }

? ? returnstr_version;

}

/** 獲取issuer 以及 issuer_sn */

-(NSDictionary*)get_issuer_nameAnd_issuer_sn:(X509* )m_px{

? ? NSMutableDictionary * dict_issuer =[[NSMutableDictionary alloc]init];

? ? [dict_issuersetObject:@""forKey:@"issuer_name"];

? ? [dict_issuersetObject:@""forKey:@"issuer_sn"];

? ? //解析

? ? //? ? NSMutableString *certInfo = [[NSMutableString alloc]init];

? ? //? ? NSMutableString *certCN = [[NSMutableString alloc]init];

? ? //? ? NSMutableString * _serialNumber = [[NSMutableString alloc]init];

? ? //? ? NSMutableString * _allCertsList = [[NSMutableString alloc]init];

? ? inti;

? ? intentriesNum;

? ? X509_NAME_ENTRY*name_entry;

? ? longNid;

? ? unsignedcharmsginfo[1024];

? ? intmsginfoLen;

? ? //獲取證書頒發(fā)者信息农渊,X509_NAME結(jié)構(gòu)體保存了多項(xiàng)信息,包括國(guó)家、組織榨惠、部門债查、通用名验庙、mail等质况。

? ? X509_NAME* issuer =X509_get_issuer_name(m_px);

? ? entriesNum =sk_X509_NAME_ENTRY_num(issuer->entries);? ? ? ? ? ? //獲取X509_NAME條目個(gè)數(shù)

? ? //循環(huán)讀取各條目信息

? ? for(i=0;i

? ? ? ? {

? ? ? ? ? ? //獲取第I個(gè)條目值

? ? ? ? ? ? name_entry =sk_X509_NAME_ENTRY_value(issuer->entries,i);

? ? ? ? ? ? //獲取對(duì)象ID

? ? ? ? ? ? Nid =OBJ_obj2nid(name_entry->object);

? ? ? ? ? ? msginfoLen=name_entry->value->length;

? ? ? ? ? ? memcpy(msginfo,name_entry->value->data,msginfoLen);

? ? ? ? ? ? msginfo[msginfoLen]='\0';

? ? ? ? ? ? //根據(jù)NID打印出信息

? ? ? ? ? ? //? ? ? ? ? NSLog(@"issuer type is %d",name_entry->value->type);

? ? ? ? ? ? switch(Nid)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? caseNID_countryName://國(guó)家C

? ? ? ? ? ? ? ? ? ? //printf("issuer 's C:%s\n",msginfo);

? ? ? ? ? ? ? ? ? ? //[certInfo appendString:[NSString stringWithFormat:@"C=%s,",msginfo]];

? ? ? ? ? ? ? ? ? ? //[certCN appendString:[NSString stringWithFormat:@"C=%s",msginfo]];

? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? caseNID_stateOrProvinceName://ST

? ? ? ? ? ? ? ? ? ? //printf("issuer 's ST:%s\n",msginfo);

? ? ? ? ? ? ? ? ? ? //[certInfo appendString:[NSString stringWithFormat:@"ST=%s,",msginfo]];

? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? caseNID_localityName://地區(qū)L

? ? ? ? ? ? ? ? ? ? //printf("issuer 's L:%s\n",msginfo);

? ? ? ? ? ? ? ? ? ? //[certInfo appendString:[NSString stringWithFormat:@"L=%s,",msginfo]];

? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? caseNID_organizationName://組織O

? ? ? ? ? ? ? ? ? ? //printf("issuer 's O:%s\n",msginfo);

? ? ? ? ? ? ? ? ? ? //[certInfo appendString:[NSString stringWithFormat:@"O=%s,",msginfo]];

? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? caseNID_organizationalUnitName://單位OU

? ? ? ? ? ? ? ? ? ? //printf("issuer 's OU:%s\n",msginfo);

? ? ? ? ? ? ? ? ? ? //[certInfo appendString:[NSString stringWithFormat:@"OU=%s,",msginfo]];

? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? caseNID_commonName://通用名CN

? ? ? ? ? ? ? ? ? ? //printf("issuer 's CN:%s\n",msginfo);

? ? ? ? ? ? ? ? ? ? //[certInfo appendString:[NSString stringWithFormat:@"CN=%s",msginfo]];

? ? ? ? ? ? ? ? ? ? [dict_issuersetObject:[NSStringstringWithFormat:@"%s",msginfo]forKey:@"issuer_name"];

? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? caseNID_pkcs9_emailAddress://Mail

? ? ? ? ? ? ? ? ? ? //printf("issuer 's emailAddress:%s\n",msginfo);

? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? caseNID_serialNumber://issuerSN

? ? ? ? ? ? ? ? ? ? //NSLog(@"issuer 's SN:%zi\n",Nid);

? ? ? ? ? ? ? ? ? ? //[certInfo appendString:[NSString stringWithFormat:@"sn=%s",msginfo]];

? ? ? ? ? ? ? ? ? ? [dict_issuersetObject:[NSStringstringWithFormat:@"%s",msginfo]forKey:@"issuer_sn"];

? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? default:

? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? //[_allCertsList appendString:certInfo];

? ? ? ? //[_allCertsList appendString:@"|"];

? ? ? ? returndict_issuer;

? ? ? ? }

```

/**************************************************************************************/

/**************************************************************************************/

/**************************************************************************************/

/**************************************************************************************/

改:下邊為解析源碼,需要的自行復(fù)制:

/**************************************************************************************/

//

//? JJDEAnalyticalCert.m

//? EIDprepareForSDK

//

//? Created by yyb on 2018/5/2.

//? Copyright ? 2018年 yyb. All rights reserved.

//

#import "JJDEAnalyticalCert.h"

#import"x509.h"

#import "x509v3.h"

#import "x509_vfy.h"

#import "JJDEGetCertInfo.h"

@interface JJDEAnalyticalCert()

@property (nonatomic,copy) Id_Block sendBlock;

@end

@implementationJJDEAnalyticalCert

//全局變量

static JJDEAnalyticalCert * _instance = nil;

//單例方法

+(instancetype)shareBlueTooth{

? ? return[[selfalloc]init];

}

////alloc會(huì)調(diào)用allocWithZone:

+(instancetype)allocWithZone:(struct_NSZone*)zone{

? ? //只進(jìn)行一次

? ? staticdispatch_once_tonceToken;

? ? dispatch_once(&onceToken, ^{

? ? ? ? _instance= [superallocWithZone:zone];

? ? });

? ? return _instance;

}

//初始化方法

- (instancetype)init{

? ? //只進(jìn)行一次

? ? staticdispatch_once_tonceToken;

? ? dispatch_once(&onceToken, ^{

? ? ? ? _instance= [superinit];

? ? ? ? ;

? ? });

? ? return _instance;

}

-(void)deCardSendInstructions_AnalyticalCertWithString:(NSString*)strName andObj:(NSDictionary*)objc andCompletion:(Id_Block)comBlock{

? ? JJDEGetCertInfo * degetCertInfo = [JJDEGetCertInfo shareBlueTooth];

? ? if(degetCertInfo.data_certInfo.length<=0) {

? ? ? ? return;

? ? }

? ? NSString * str_data=[JJBluetoothTools convertDataToHexStr:degetCertInfo.data_certInfo];//@"30820316308202BBA00302010202081000000000235751300C06082A811CCF550183750500303E310B3009060355040A0C0247413111300F06035504030C08654944204D494332310F300D06035504050C06303232303132310B300906035504061302434E301E170D3136303931323037333831305A170D3139303931323037333831305A306D314D304B06035504030C44414145397739444A62574C6D6248637744796278623039335446364549436D4A624F41546B5A50794A51414A6B78325644706154655A6351544E7942514F57657645303D310B300906035504060C02434E310F300D060355040A0C063331303030303059301306072A8648CE3D020106082A811CCF5501822D0342000413B29FD275B4A70FE70855280F6CE63CE9BAEC93097A7A71160B9AB5EF357585E71FAFDACD61593912877BA609A9A218ECE1279CA98451787EEA75C8DF9BF1CEA38201703082016C302B0603551D0E0424042204209FA4361184D90E43424EDB2A563EB2739CBAD0319F4367469DD64D21632A39E7302F0603551D23042830268024302280202F4E21716079671BFF36A480BA670C66D1F8D9396F1EAA67F4EC77E8F9D1FCB3300C0603551D1304053003010100300B0603551D0F0404030206C0301D0603551D250416301406082B0601050507030206082B0601050507030430360603551D20042F302D302B06082A811C86EF580202301F301D06082B060105050702011611687474703A2F2F6569642E636E2F637073301106096086480186F8420101040403020780303E06082B0601050507010104323030302E06082B060105050730028622687474703A2F2F63657274732E6569642E636E2F6549444D4943526F6F742E63657230470603551D1F0440303E303CA03AA0388636687474703A2F2F63726C2E6569642E636E2F646F776E6C6F61642F534D325F6549442532304D4943325F67726F7570305F622E63726C300C06082A811CCF550183750500034700304402201F6EFA9BAC64B381DEE7F49112CB6BB04BA9114708D4EFA63F45EC8FF945947C02204C3F481BCB8C6A0ADFF53440B83D35E23EB4BF041782D027F52B3DDF69CE5FE9";

? ? NSData* lpCertData =[JJBluetoothToolshexToBytes:str_data];

? ? Byte* bytes_lpCertData =(Byte*)[lpCertDatabytes];//031A

? ? X509* m_px=d2i_X509(NULL, (unsignedcharconst**)&bytes_lpCertData,794);

?? //獲取版本號(hào)

? ? //NSString * string_version = [self get_version:m_px];

? ? //獲取SN

? ? NSString* string_SN =[selfget_SN:m_px];

? ? //獲取頒發(fā)者名字和頒發(fā)者序列號(hào)

? ? NSDictionary* dict_issuer = [selfget_issuer_nameAnd_issuer_sn:m_px];

? ? //NSLog(@"%@",dict_issuer);

? ? //頒發(fā)者名字

? ? NSString* string_issuer_name=dict_issuer[@"issuer_name"];

? ? //頒發(fā)者序列號(hào)

? ? NSString* string_issuer_sn=dict_issuer[@"issuer_sn"];

? ? if(string_SN.length>0&& string_issuer_name.length>0&& string_issuer_sn.length>0) {

? ? ? ? self.string_SN=string_SN;

? ? ? ? self.string_issuer_name=string_issuer_name;

? ? ? ? self.string_issuer_sn=string_issuer_sn;

? ? ? ? if(comBlock) {

? ? ? ? ? ? comBlock(@{@"status":@"1",@"msg":@"證書解析成功"});

? ? ? ? }

? ? }else{

? ? ? ? self.string_SN=nil;

? ? ? ? self.string_issuer_name=nil;

? ? ? ? self.string_issuer_sn=nil;

? ? ? ? if(comBlock) {

? ? ? ? ? ? comBlock(@{@"status":@"0",@"msg":@"證書解析失敗"});

? ? ? ? }

? ? }

}

/** 獲取SN */

-(NSString*)get_SN:(X509* )m_px{

?NSString* str_SN=@"";

? ? ASN1_INTEGER*serial =X509_get_serialNumber(m_px);

? ? //打印證書序列號(hào)

? ? //printf("serialNumber is: \n");

? ? NSMutableString *str = [[NSMutableString alloc] init];

? ? for(inti =0; i < serial->length; i++)

? ? {

? ? ? ? //printf("%02x", serial->data[i]);

? ? ? ? [strappendString:[NSStringstringWithFormat:@"%02x",serial->data[i]]];

? ? }

? ? //小寫轉(zhuǎn)大寫

? ? //str_SN=str.uppercaseString;

? ? //奇數(shù)補(bǔ)0操作

? ? if(str_SN.length%2==1) {

? ? ? ? str_SN=[NSStringstringWithFormat:@"0%@",str_SN];

? ? }

? ? returnstr_SN;

}

/** 獲取版本號(hào) */

-(NSString*)get_version:(X509* )m_px{

? ? NSString* str_version=@"";

? ? NSIntegerver =X509_get_version(m_px);

//? ? NSLog(@"ver=%zi",ver);

? ? switch(ver)

? ? {

? ? ? ? case0:? ? //V1

? ? ? ? ? ? //...

? ? ? ? ? ? str_version=@"V1";

? ? ? ? ? ? break;

? ? ? ? case1:? ? //V2

? ? ? ? ? ? //...

? ? ? ? ? ? str_version=@"V2";

? ? ? ? ? ? break;

? ? ? ? case2:? ? //V3

? ? ? ? ? ? //...

? ? ? ? ? ? str_version=@"V3";

? ? ? ? ? ? break;

? ? ? ? default:

? ? ? ? ? ? //Error!

? ? ? ? ? ? break;

? ? }

? ? returnstr_version;

}

/** 獲取issuer 以及 issuer_sn */

-(NSDictionary*)get_issuer_nameAnd_issuer_sn:(X509* )m_px{

? ? NSMutableDictionary * dict_issuer =[[NSMutableDictionary alloc]init];

? ? [dict_issuersetObject:@""forKey:@"issuer_name"];

? ? [dict_issuersetObject:@""forKey:@"issuer_sn"];

? ? //解析

//? ? NSMutableString *certInfo = [[NSMutableString alloc]init];

//? ? NSMutableString *certCN = [[NSMutableString alloc]init];

//? ? NSMutableString * _serialNumber = [[NSMutableString alloc]init];

//? ? NSMutableString * _allCertsList = [[NSMutableString alloc]init];

? ? inti;

? ? intentriesNum;

? ? X509_NAME_ENTRY*name_entry;

? ? longNid;

? ? unsignedcharmsginfo[1024];

? ? intmsginfoLen;

? ? //獲取證書頒發(fā)者信息横堡,X509_NAME結(jié)構(gòu)體保存了多項(xiàng)信息,包括國(guó)家谴返、組織煞肾、部門、通用名亏镰、mail等扯旷。

? ? X509_NAME* issuer =X509_get_issuer_name(m_px);

? ? entriesNum =sk_X509_NAME_ENTRY_num(issuer->entries);? ? ? ? ? ? //獲取X509_NAME條目個(gè)數(shù)

? ? //循環(huán)讀取各條目信息

? ? for(i=0;i

? ? {

? ? ? ? //獲取第I個(gè)條目值

? ? ? ? name_entry =sk_X509_NAME_ENTRY_value(issuer->entries,i);

? ? ? ? //獲取對(duì)象ID

? ? ? ? Nid =OBJ_obj2nid(name_entry->object);

? ? ? ? msginfoLen=name_entry->value->length;

? ? ? ? memcpy(msginfo,name_entry->value->data,msginfoLen);

? ? ? ? msginfo[msginfoLen]='\0';

? ? ? ? //根據(jù)NID打印出信息

? ? ? ? //? ? ? ? ? NSLog(@"issuer type is %d",name_entry->value->type);

? ? ? ? switch(Nid)

? ? ? ? {

? ? ? ? ? ? case NID_countryName://國(guó)家C

? ? ? ? ? ? ? ? //printf("issuer 's C:%s\n",msginfo);

? ? ? ? ? ? ? ? //[certInfo appendString:[NSString stringWithFormat:@"C=%s,",msginfo]];

? ? ? ? ? ? ? ? //[certCN appendString:[NSString stringWithFormat:@"C=%s",msginfo]];

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? case NID_stateOrProvinceName://省ST

? ? ? ? ? ? ? ? //printf("issuer 's ST:%s\n",msginfo);

? ? ? ? ? ? ? ? //[certInfo appendString:[NSString stringWithFormat:@"ST=%s,",msginfo]];

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? case NID_localityName://地區(qū)L

? ? ? ? ? ? ? ? //printf("issuer 's L:%s\n",msginfo);

? ? ? ? ? ? ? ? //[certInfo appendString:[NSString stringWithFormat:@"L=%s,",msginfo]];

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? case NID_organizationName://組織O

? ? ? ? ? ? ? ? //printf("issuer 's O:%s\n",msginfo);

? ? ? ? ? ? ? ? //[certInfo appendString:[NSString stringWithFormat:@"O=%s,",msginfo]];

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? case NID_organizationalUnitName://單位OU

? ? ? ? ? ? ? ? //printf("issuer 's OU:%s\n",msginfo);

? ? ? ? ? ? ? ? //[certInfo appendString:[NSString stringWithFormat:@"OU=%s,",msginfo]];

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? case NID_commonName://通用名CN

? ? ? ? ? ? ? ? //printf("issuer 's CN:%s\n",msginfo);

? ? ? ? ? ? ? ? //[certInfo appendString:[NSString stringWithFormat:@"CN=%s",msginfo]];

? ? ? ? ? ? ? ? [dict_issuersetObject:[NSStringstringWithFormat:@"%s",msginfo]forKey:@"issuer_name"];

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? case NID_pkcs9_emailAddress://Mail

? ? ? ? ? ? ? ? //printf("issuer 's emailAddress:%s\n",msginfo);

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? case NID_serialNumber://issuerSN

? ? ? ? ? ? ? ? //NSLog(@"issuer 's SN:%zi\n",Nid);

? ? ? ? ? ? ? ? //[certInfo appendString:[NSString stringWithFormat:@"sn=%s",msginfo]];

? ? ? ? ? ? ? ? [dict_issuersetObject:[NSStringstringWithFormat:@"%s",msginfo]forKey:@"issuer_sn"];

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? default:

? ? ? ? ? ? ? ? break;

? ? ? ? }

? ? }

? ? //[_allCertsList appendString:certInfo];

? ? //[_allCertsList appendString:@"|"];

? ? returndict_issuer;

}

@end

```

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拯爽,一起剝皮案震驚了整個(gè)濱河市索抓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌毯炮,老刑警劉巖逼肯,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異桃煎,居然都是意外死亡篮幢,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門为迈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)三椿,“玉大人缺菌,你說(shuō)我怎么就攤上這事∷衙蹋” “怎么了伴郁?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蛋叼。 經(jīng)常有香客問(wèn)我焊傅,道長(zhǎng),這世上最難降的妖魔是什么狈涮? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任狐胎,我火速辦了婚禮,結(jié)果婚禮上歌馍,老公的妹妹穿的比我還像新娘握巢。我一直安慰自己,他們只是感情好松却,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布镜粤。 她就那樣靜靜地躺著,像睡著了一般玻褪。 火紅的嫁衣襯著肌膚如雪肉渴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天带射,我揣著相機(jī)與錄音同规,去河邊找鬼。 笑死窟社,一個(gè)胖子當(dāng)著我的面吹牛券勺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播灿里,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼关炼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了匣吊?” 一聲冷哼從身側(cè)響起儒拂,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎色鸳,沒想到半個(gè)月后社痛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡命雀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年蒜哀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吏砂。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡撵儿,死狀恐怖乘客,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情淀歇,我是刑警寧澤寨典,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站房匆,受9級(jí)特大地震影響耸成,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜浴鸿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一井氢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧岳链,春花似錦花竞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至苗分,卻和暖如春厌蔽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背摔癣。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工奴饮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人择浊。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓戴卜,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親琢岩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子投剥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容