DES辅柴、AES狮惜、RSA、Base64碌识、MD5加密原理介紹碾篡,代碼實(shí)現(xiàn)

關(guān)于網(wǎng)絡(luò)安全的數(shù)據(jù)加密部分,本來(lái)打算總結(jié)一篇博客搞定筏餐,沒(méi)想到東西太多开泽,這已是第三篇了,而且這篇寫(xiě)了多次魁瞪,熬了多次夜穆律,真是again and again惠呼。三篇起個(gè)名字:數(shù)據(jù)加密三部曲,前兩部鏈接如下:

  1. 整體介紹:網(wǎng)絡(luò)安全——數(shù)據(jù)的加密與簽名,RSA介紹

github下載地址

https://github.com/mddios/EncryptionTools

除了RSA外,代碼提供兩種加解密方法:

  • 一個(gè)是我自己封裝的NSString的分類洛口,用起來(lái)也比較方便矫付,也足夠我們?nèi)粘J褂谩?/li>
  • 另一個(gè)是https://github.com/kelp404/CocoaSecurity,也將其集成到了工程第焰。

一买优、DES對(duì)稱加密

關(guān)于DES 3DES加密解密原理不再介紹,現(xiàn)在已經(jīng)用的不多挺举,如果你的項(xiàng)目還在使用DES加密杀赢,還是趕快換吧,換做AES或者更強(qiáng)的非對(duì)稱RSA加密湘纵。

另外它與AES有很多的相似性葵陵,也可以參照AES介紹。下面是具體的用法瞻佛。

對(duì)"123"加密脱篙,密鑰為16進(jìn)制的3031323334353637(01234567)

使用電腦終端:

echo -n "123" | openssl enc -des-ecb -a -K 3031323334353637

結(jié)果:
MV5dUGKtzbM=

代碼加密解密使用:

首先引入頭文件NSString+Encryption.h
/*
 DES加密 key為NSString形式 結(jié)果返回base64編碼
 */
- (NSString *)desEncryptWithKey:(NSString *)key;

/*
 DES加密 key為NSData形式 結(jié)果返回NSData
 */
- (NSData *)desEncryptWithDataKey:(NSData *)key;

#pragma mark - DES解密

/*
 DES解密,字符串必須為base64格式伤柄,key為字符串形式
 */
- (NSString *)desDecryptWithKey:(NSString *)key;

/*
 DES解密
 */
+ (NSData *)desDecryptWithData:(NSData *)data dataKey:(NSData *)key;

二绊困、AES對(duì)稱加密

AES是高級(jí)加密標(biāo)準(zhǔn)Advanced Encryption Standard的縮寫(xiě),有多種模式适刀,下面介紹使用最多的兩種

ECB(Electronic Code Book秤朗,電子密碼本)模式

是一種基礎(chǔ)的加密方式,要加密的數(shù)據(jù)被分割成分組長(zhǎng)度相等的塊(不足補(bǔ)齊笔喉,補(bǔ)齊方式下文介紹)取视,然后單獨(dú)的一個(gè)個(gè)組加密,合在一起輸出組成密文常挚。

電腦終端:

echo -n "123" | openssl enc -aes-128-ecb -a -K 30313233343536373839414243444546
加密結(jié)果:
0b6ikfq9CQs11aSCnNXIog==

代碼加密解密使用:

首先引入頭文件NSString+Encryption.h

/**
 AES-ECB模式加密
 @param key Hex形式作谭,密鑰支持128 192 256bit,16奄毡、24折欠、32字節(jié),轉(zhuǎn)換為16進(jìn)制字符串長(zhǎng)度為32、48锐秦、64咪奖,長(zhǎng)度錯(cuò)誤將拋出異常
 @return 加密結(jié)果為base64編碼
 */
- (NSString *)aesECBEncryptWithHexKey:(NSString *)key;

/**
 AES-ECB模式加密
 @param key 字符串形式,密鑰支持128 192 256bit酱床,16羊赵、24、32字節(jié)扇谣,長(zhǎng)度錯(cuò)誤將拋出異常
 @return 加密結(jié)果為base64編碼
 */
- (NSString *)aesECBEncryptWithKey:(NSString *)key;

/**
 AES-ECB模式加密
 @param key 密鑰支持128 192 256bit昧捷,16、24揍堕、32字節(jié),長(zhǎng)度錯(cuò)誤將拋出異常
 */
- (NSData *)aesECBEncryptWithDataKey:(NSData *)key;

/*
 ECB模式解密汤纸,返回base64編碼
 */
- (NSString *)aesECBDecryptWithHexKey:(NSString *)key;

/*
 ECB模式解密衩茸,返回NSData
 */
- (NSData *)aesECBDecryptWithDataKey:(NSData *)key;

CBC(Cipher Block Chaining,加密塊鏈)模式

CBC模式

是一種循環(huán)模式贮泞,也將要加密的數(shù)據(jù)分割為長(zhǎng)度相等的組(不足補(bǔ)齊楞慈,補(bǔ)齊方式下文介紹),前一個(gè)分組的密文和當(dāng)前分組的明文異或操作后再加密啃擦,這樣做的目的是增強(qiáng)破解難度囊蓝,會(huì)比ECB安全一點(diǎn)。但是也因?yàn)樗麄兊年P(guān)聯(lián)性令蛉,造成以下三個(gè)缺點(diǎn):

  • 不利于并行計(jì)算:很明顯第一組完成才能計(jì)算第二組然后第三組聚霜。。珠叔。
  • 誤差傳遞:也是依次傳遞
  • 需要初始化向量IV:第二組根據(jù)第一組的結(jié)果來(lái)加密蝎宇,那第一組根據(jù)誰(shuí)呢?那就是需要額外提供初始化向量

可以在電腦終端(openssl):

echo -n "123" | openssl enc -aes-128-cbc -a -K 30313233343536373839414243444546 -iv 30313233343536373839414243444546

結(jié)果:
5IQJlqxa2e5NGzGqqPpoSw==

代碼加密解密使用:

首先引入頭文件NSString+Encryption.h

/**
 AES-CBC模式加密祷安,默認(rèn)模式
 @param key Hex形式姥芥,密鑰支持128 192 256bit,16汇鞭、24凉唐、32字節(jié),轉(zhuǎn)換為16進(jìn)制字符串長(zhǎng)度為32霍骄、48台囱、64,長(zhǎng)度錯(cuò)誤將拋出異常
 @param iv 進(jìn)制字符串形式读整;初始化向量iv為16字節(jié)玄坦。如果為nil,則初始化向量為0
 @return 加密結(jié)果為base64編碼
 */
- (NSString *)aesEncryptWithHexKey:(NSString *)key hexIv:(NSString *)iv;

/**
 AES-CBC模式加密,默認(rèn)模式
 @param key 密鑰支持128 192 256bit煎楣,16豺总、24、32字節(jié)择懂,長(zhǎng)度錯(cuò)誤將拋出異常
 @param iv 進(jìn)制字符串形式喻喳;初始化向量iv為16字節(jié)。如果為nil困曙,則初始化向量為0
 @return 加密結(jié)果為base64編碼
 */
- (NSString *)aesEncryptWithKey:(NSString *)key iv:(NSString *)iv;

/**
 AES-CBC模式加密表伦,默認(rèn)模式
 @param data 要加密的數(shù)據(jù)
 @param key 密鑰支持128 192 256bit,16慷丽、24蹦哼、32字節(jié),長(zhǎng)度錯(cuò)誤將拋出異常
 @param iv 初始化向量iv為16字節(jié)要糊。如果為nil纲熏,則初始化向量為0
 @return 加密結(jié)果為NSData形式
 */
- (NSData *)aesEncryptWithDataKey:(NSData *)key dataIv:(NSData *)iv;

/**
 AES-CBC模式解密,要求NSString為base64的結(jié)果
 @param key 密鑰支持128 192 256bit锄俄,16局劲、24、32字節(jié)奶赠,長(zhǎng)度錯(cuò)誤將拋出異常
 @param iv 進(jìn)制字符串形式鱼填;初始化向量iv為16字節(jié)。如果為nil毅戈,則初始化向量為0
 */
- (NSString *)aesBase64StringDecryptWithHexKey:(NSString *)key hexIv:(NSString *)iv;

/**
 AES-CBC模式解密
 @param key 密鑰支持128 192 256bit苹丸,16、24苇经、32字節(jié)谈跛,長(zhǎng)度錯(cuò)誤將拋出異常
 @param iv 初始化向量iv為16字節(jié)。如果為nil塑陵,則初始化向量為0
 */
+ (NSData *)aesDecryptWithData:(NSData *)data dataKey:(NSData *)key dataIv:(NSData *)iv;

三感憾、RSA非對(duì)稱加密

關(guān)于介紹,之前的博客已經(jīng)給出令花,具體可以參考:網(wǎng)絡(luò)安全——數(shù)據(jù)的加密與簽名,RSA介紹

openssl 生成的密鑰PEM文件為Base64編碼(這里的Base64格式阻桅,長(zhǎng)度超過(guò)64字符插有換行,生成的私鑰為PKCS#1格式)兼都,下面是具體的openssl生成公私鑰步驟:

  • 1 生成私鑰嫂沉,1024bit,PKCS1Padding格式,Base64編碼
命令行:openssl genrsa -out rsa_private_key.pem 1024

結(jié)果如下:
-----BEGIN RSA PRIVATE KEY-----
MIICWwIBAAKBgQDOxoZIsFbFMeR0OWnc/sF5A3Gj0BWsoClQW3BKgvMQ85ZXVCM6
7g6XItl5sSW2EyMaIeQ8tRsM0HI4oCvlOMjSVgdyZmqbUfaZDoDYPW2pDbLqMDr/
o1eKxYpssbAyH6ZDyJeTOEu9yF7XUsIilokzc0D9i+uPc8yp/vLYTPDJEQIDAQAB
AoGAFUMevcy8L2zQ9A6PTzU3Cc2L2u9juyuA9A1i/5Z1jhGuLO6u7Llb8LiZqkTH
/u/61Q4VHRT2YhvxEteNi/WJ2L+1wTZYWbE/NIHBls4dTDt4aiMGUG2y6uBcFPmB
97sjT3ofcOHVZuFc80ktyhVuvx5osB8obZHbjn+3hn/pIF0CQQDx1bollu3XXL08
YJrS1mpB3F/87HXcxDa0dWUoqBRUCPjqC+8SuxaddPK6RFvkb1UyWJNzQ5Mb3OZt
65/sipdDAkEA2uMWf0ukTRhxiEYhZIJDSaERYeaWFU+mc6mC2//Tcvy7hldBe15n
7UQNKWl7DbI3Z7NmuKPa+rWqwASqtBAHGwJAOav7iW1V6Q8fvd9X7MHfczdn2LxX
Wz+bwCti5XA38NZ27fHMoM3nFcPHAu68b1yxl6ESAOHzmihy93HCoLloWwJARodX
j2rTJRhUNMHMLrOedNIWZMJE59cDXk9nX/X9rxZqYi4pZlQUDqqXxxk60j3zhlGT
Lrl1bMUuoLKgQmbLswJAIfv1Vw18YcEexWPBkn5iKufu0Fo7+Z776lDLYP1kNyQZ
eohofAAWYNQvHZ4WTpiIxi2FZ9xIRu+M7smsIs0h2g==
-----END RSA PRIVATE KEY-----
  • 2 根據(jù)上面的私鑰生成公鑰
命令行:openssl rsa -in rsa_private_key.pem -out rsa_public_key.pem -pubout

結(jié)果如下:
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOxoZIsFbFMeR0OWnc/sF5A3Gj
0BWsoClQW3BKgvMQ85ZXVCM67g6XItl5sSW2EyMaIeQ8tRsM0HI4oCvlOMjSVgdy
ZmqbUfaZDoDYPW2pDbLqMDr/o1eKxYpssbAyH6ZDyJeTOEu9yF7XUsIilokzc0D9
i+uPc8yp/vLYTPDJEQIDAQAB
-----END PUBLIC KEY-----
  • 3 將私鑰生成pkcs8格式扮碧,可在iOS工程中直接使用
openssl pkcs8 -topk8 -in rsa_private_key.pem -out pkcs8_rsa_private_key.pem -nocrypt

結(jié)果:
-----BEGIN PRIVATE KEY-----
MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAM7GhkiwVsUx5HQ5
adz+wXkDcaPQFaygKVBbcEqC8xDzlldUIzruDpci2XmxJbYTIxoh5Dy1GwzQcjig
K+U4yNJWB3JmaptR9pkOgNg9bakNsuowOv+jV4rFimyxsDIfpkPIl5M4S73IXtdS
wiKWiTNzQP2L649zzKn+8thM8MkRAgMBAAECgYAVQx69zLwvbND0Do9PNTcJzYva
72O7K4D0DWL/lnWOEa4s7q7suVvwuJmqRMf+7/rVDhUdFPZiG/ES142L9YnYv7XB
NlhZsT80gcGWzh1MO3hqIwZQbbLq4FwU+YH3uyNPeh9w4dVm4VzzSS3KFW6/Hmiw
HyhtkduOf7eGf+kgXQJBAPHVuiWW7ddcvTxgmtLWakHcX/zsddzENrR1ZSioFFQI
+OoL7xK7Fp108rpEW+RvVTJYk3NDkxvc5m3rn+yKl0MCQQDa4xZ/S6RNGHGIRiFk
gkNJoRFh5pYVT6ZzqYLb/9Ny/LuGV0F7XmftRA0paXsNsjdns2a4o9r6tarABKq0
EAcbAkA5q/uJbVXpDx+931fswd9zN2fYvFdbP5vAK2LlcDfw1nbt8cygzecVw8cC
7rxvXLGXoRIA4fOaKHL3ccKguWhbAkBGh1ePatMlGFQ0wcwus5500hZkwkTn1wNe
T2df9f2vFmpiLilmVBQOqpfHGTrSPfOGUZMuuXVsxS6gsqBCZsuzAkAh+/VXDXxh
wR7FY8GSfmIq5+7QWjv5nvvqUMtg/WQ3JBl6iGh8ABZg1C8dnhZOmIjGLYVn3EhG
74zuyawizSHa
-----END PRIVATE KEY-----

可以在終端對(duì)"123"RSA加密趟章,由于使用PKCS#1生成隨機(jī)碼杏糙,所以每次加密結(jié)果會(huì)不一樣

echo "123" | openssl rsautl -encrypt  -inkey rsa_public_key.pem -pubin | Base64

加密結(jié)果(Base64):
ZDBtICMxy2JHg6QDqolyAeqBRMseqJQ33tYQRE26c69/dGlS3TJ2xzMRZlsww+NnQH48KVthyCJ6nIhgAvhmAOaG+MvMqhZT/G180euH3OfLX8/VcIWqelxm8IYzA3NRD8n2jWbWoxZHh8Sp3n+YM7vor+8Q3SsFXMuurwT+xPI=

例程RSA加密使用了第三方框架,鏈接如下:https://github.com/ideawu/Objective-C-RSA蚓土,在使用時(shí)公鑰可以直接使用宏侍,私鑰需要使用pkcs8格式。公私鑰可以加-----BEGIN PRIVATE KEY----------END PRIVATE KEY-----蜀漆,也可以不加谅河,程序會(huì)自動(dòng)處理。

四确丢、實(shí)際使用

選擇哪種算法當(dāng)然是根據(jù)自己的需求來(lái)定

  • 如果不是關(guān)鍵的數(shù)據(jù)可以使用DES加密绷耍,或者Base64編碼不直接看到數(shù)據(jù)即可,這樣速度快
  • 稍微重要的數(shù)據(jù)鲜侥,可以用AES加密褂始,一定要保護(hù)好密鑰
  • 關(guān)于錢(qián)、用戶登陸之類的比較重要描函,數(shù)據(jù)量也少崎苗,可以使用RSA加密

另外,我們也可以對(duì)稱加密和非對(duì)稱加密結(jié)合使用赘阀,對(duì)數(shù)據(jù)進(jìn)行AES或DES加密益缠,AES或DES的密鑰隨機(jī)生成脑奠,并使用RSA將其加密基公。對(duì)方收到信息后,先RSA解密得到密鑰宋欺,然后在解密得到加密的數(shù)據(jù)轰豆。這樣的話,隨機(jī)算法就比較重要齿诞。

五酸休、關(guān)于Padding

  • 數(shù)據(jù)長(zhǎng)度

AES和DES在ECB或者CBC模式下,要加密的數(shù)據(jù)必須是分組長(zhǎng)度的整數(shù)倍祷杈,比如AES是128位16字節(jié)斑司,而DES是64位8字節(jié),那么加密數(shù)據(jù)必須是16(AES)或者8(DES)的整數(shù)倍但汞,如果不是那么就需要填充(pad)宿刮。

  • 密鑰長(zhǎng)度

不像數(shù)據(jù)長(zhǎng)度必須是block的整數(shù)倍,密鑰長(zhǎng)度是固定的私蕾。

AES有三種:128僵缺、192、256bit

pad的方式有很多種踩叭,而且你也可以自定義磕潮,用的比較多的有PKCS7Padding翠胰、PKCS1Padding和PKCS5Padding。

  • PKCS7Padding:用十六進(jìn)制0x07來(lái)填充自脯,下面為一個(gè)簡(jiǎn)單的實(shí)現(xiàn)方法(其實(shí)很多加密工具已經(jīng)實(shí)現(xiàn)之景,這里只是舉個(gè)例子)
// plainData為要加密的數(shù)據(jù),“16”是block大小
while (plainData.length % 16 != 0) {
    // PKCS7Padding模式
    Byte PKCS7Pad = 0x07;
    [plainData appendData:[[NSData alloc] initWithBytes:&PKCS7Pad length:1]];
}
  • PKCS5Padding:稍麻煩一點(diǎn)冤今,比如需要填充7個(gè)字節(jié)就填充0x07闺兢,需要填充6個(gè)字節(jié)就是0x06。戏罢。屋谭。需要填充1個(gè)字節(jié)就是0x01

加解密雙方必須使用相同的方式,不然解密就會(huì)失敗龟糕。

關(guān)于電腦終端Openssl加密解密命令

對(duì)"123"加密桐磁,密鑰為"30313233343536373839414243444546"(16進(jìn)制,對(duì)應(yīng)ASCII碼為0~F)讲岁,初始化向量為"30313233343536373839414243444546"(16進(jìn)制我擂,對(duì)應(yīng)ASCII碼為0~F)

echo -n "123" | openssl enc -aes-128-cbc -a -A -K 30313233343536373839414243444546 -iv 30313233343536373839414243444546

下面對(duì)參數(shù)做說(shuō)明:

  • echo -n "123" |:輸出123且不換行,“|”是管道符號(hào)缓艳,將前面的輸出作為后面的輸入校摩,即"123"作為后面要加密的數(shù)據(jù)。openssl命令是對(duì)文件加密阶淘,這樣做好處是直接可以對(duì)字符串加密衙吩。
  • enc:對(duì)稱加密
  • -aes-128-cbc:算法名字模式
  • -a:加密結(jié)果進(jìn)行base64編碼
  • -A:輸出不換行,默認(rèn)情況下溪窒,base64編碼結(jié)果換行
  • -K:后面跟密鑰坤塞,16進(jìn)制形式
  • -iv:初始化向量(CBC模式有)

另外,默認(rèn)pad為PKCS5Padding

如果想對(duì)openssl有更詳細(xì)的了解澈蚌,可以參考 趙春平寫(xiě)的《Openssl編程》里面有很多實(shí)用東西摹芙,另外也將書(shū)的pdf格式上傳到了github工程里面,鏈接見(jiàn)文章最后

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宛瞄,一起剝皮案震驚了整個(gè)濱河市浮禾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌份汗,老刑警劉巖盈电,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異裸影,居然都是意外死亡挣轨,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)轩猩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)卷扮,“玉大人荡澎,你說(shuō)我怎么就攤上這事∥钋拢” “怎么了摩幔?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)鞭铆。 經(jīng)常有香客問(wèn)我或衡,道長(zhǎng),這世上最難降的妖魔是什么车遂? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任封断,我火速辦了婚禮,結(jié)果婚禮上舶担,老公的妹妹穿的比我還像新娘坡疼。我一直安慰自己,他們只是感情好衣陶,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布柄瑰。 她就那樣靜靜地躺著,像睡著了一般剪况。 火紅的嫁衣襯著肌膚如雪教沾。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天译断,我揣著相機(jī)與錄音授翻,去河邊找鬼。 笑死镐作,一個(gè)胖子當(dāng)著我的面吹牛藏姐,可吹牛的內(nèi)容都是我干的隆箩。 我是一名探鬼主播该贾,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼捌臊!你這毒婦竟也來(lái)了杨蛋?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤理澎,失蹤者是張志新(化名)和其女友劉穎逞力,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體糠爬,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡寇荧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了执隧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片揩抡。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡户侥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出峦嗤,到底是詐尸還是另有隱情蕊唐,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布烁设,位于F島的核電站替梨,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏装黑。R本人自食惡果不足惜副瀑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望恋谭。 院中可真熱鬧俗扇,春花似錦、人聲如沸箕别。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)串稀。三九已至除抛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間母截,已是汗流浹背到忽。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留清寇,地道東北人喘漏。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像华烟,于是被迫代替她去往敵國(guó)和親翩迈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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