久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

C#國密算法庫拆解:SM2/SM3/SM4實(shí)現(xiàn)與聯(lián)調(diào)避坑

C#國密算法庫拆解:SM2/SM3/SM4實(shí)現(xiàn)與聯(lián)調(diào)避坑 簡介面向需要在 C#/.NET 項目中落地國密算法的開發(fā)者與學(xué)習(xí)者這套代碼示例圍繞 SM2、SM3、SM4 三種算法給出可運(yùn)行的 WinForm 演示幫助理解密鑰生成、簽名驗(yàn)簽、摘要計算及分組加解密的調(diào)用方式。壓縮包共 51 個文件約 5.33MB主體為 cs 源碼、resx 界面資源、dll 依賴庫與 exe 可執(zhí)行程序并附帶解決方案與項目配置便于在 Visual Studio 中打開、調(diào)試和二次改造。內(nèi)容涵蓋算法工具類、窗體交互邏輯及 BouncyCastle 加密庫引用讀者可對照界面操作觀察各算法的輸入輸出與參數(shù)配置快速梳理國密功能從界面到核心實(shí)現(xiàn)的代碼路徑。已有 1316 人學(xué)習(xí)下載適合作為 C# 國密入門、課程實(shí)驗(yàn)或業(yè)務(wù)模塊預(yù)研的參考樣例。1. 一次驗(yàn)簽失敗的聯(lián)調(diào)這套 C# 國密算法庫到底補(bǔ)的是哪個洞對接一個內(nèi)部系統(tǒng)的簽名接口對方說只收國密算法SM2 簽名加 SM3 摘要報文用 SM4 加密。很多人第一反應(yīng)是在項目里搜一下有沒有現(xiàn)成的算法包結(jié)果發(fā)現(xiàn)可用的 C# 國密算法實(shí)現(xiàn)要么只覆蓋其中一兩種要么把密鑰編碼、密文排列這些細(xì)節(jié)隱藏了起來等到對方驗(yàn)簽失敗就無從查起。這套包含 SM2、SM3、SM4 的 C# 實(shí)現(xiàn)價值在于把曲線參數(shù)、補(bǔ)位規(guī)則、ZA 值計算、C1C3C2 排列這些容易被第三方庫隱藏起來的部分全部展開成可讀代碼。適合正在做國密改造的后端開發(fā)也適合想搞清楚算法內(nèi)部機(jī)理、準(zhǔn)備自己動手增加支持的工程師。2. 目錄與運(yùn)行SM2/SM3/SM4 三套算法在工程里怎么分家2.1 三層拆分算法內(nèi)核、編碼適配、調(diào)用入口這類 C# 國密庫的目錄結(jié)構(gòu)通常分成三層這個劃分方式雖然簡單但基本不會出錯。算法內(nèi)核只關(guān)心數(shù)學(xué)和字節(jié)操作不接觸任何 IO編碼層負(fù)責(zé)十六進(jìn)制、Base64、ASN.1/DER、PEM 之間的轉(zhuǎn)換調(diào)用入口負(fù)責(zé)把參數(shù)整理好丟給內(nèi)核。第一次閱讀源碼時按這個順序看比從 Program.cs 往下追要快得多。SmCrypto/ ├── src/ │ ├── SmCrypto.Core/ # 純算法無外部依賴 │ │ ├── Sm2/ │ │ │ ├── Sm2Curve.cs # 曲線參數(shù)、點(diǎn)運(yùn)算、點(diǎn)乘 │ │ │ ├── Sm2.cs # 簽名驗(yàn)簽、加解密、KDF │ │ │ └── Sm2KeyPair.cs # 密鑰生成與公私鑰解析 │ │ ├── Sm3/ │ │ │ └── Sm3.cs # 常量、填充、壓縮函數(shù) │ │ ├── Sm4/ │ │ │ ├── Sm4.cs # 輪函數(shù)、單分組加解密 │ │ │ ├── Sm4Constants.cs # S 盒、FK、CK │ │ │ └── Sm4Padding.cs # PKCS7 / 無填充 │ │ ├── Encoding/ │ │ │ ├── Hex.cs # 大小寫、帶不帶空格 │ │ │ └── Asn1.cs # DER 序列化給密鑰和簽名用 │ │ └── Utils/ │ │ ├── BigIntegerExtensions.cs# 定長大端轉(zhuǎn)換、模逆 │ │ └── SecureRandom.cs # 密碼學(xué)安全隨機(jī)數(shù) │ └── SmCrypto.Console/ │ └── Program.cs # 手敲的驗(yàn)證入口 └── tests/ └── SmCrypto.Tests/ # 標(biāo)準(zhǔn)測試向量 自身往返測試看這個結(jié)構(gòu)能發(fā)現(xiàn)一個細(xì)節(jié)SM2 單獨(dú)占一個目錄還分了三個文件。原因很實(shí)在SM2 是橢圓曲線算法點(diǎn)運(yùn)算、曲線參數(shù)、業(yè)務(wù)層的簽名驗(yàn)簽是三件不同的事混在一個類里到后面加密鑰交換或者換曲線就麻煩了。SM3 和 SM4 各自只有一個主文件是因?yàn)樗鼈兊膶?shí)現(xiàn)相對獨(dú)立沒有那么多分支。2.2 目標(biāo)框架與依賴為什么寧可手寫也不用系統(tǒng)接口.NET 生態(tài)里做國密有個現(xiàn)實(shí)問題系統(tǒng)自帶的加密接口在多數(shù)版本上沒有覆蓋 SM2、SM3、SM4即使新版本在部分平臺上補(bǔ)了 SM3/SM4Windows 和 Linux 的行為也不完全一致跨平臺部署很容易遇到問題。所以這套實(shí)現(xiàn)選擇純托管代碼零外部依賴System.Numerics.BigInteger就是唯一的大數(shù)工具。目標(biāo)框架怎么選看調(diào)用方。要被老項目引用就多目標(biāo)輸出netstandard2.0加net8.0只做新服務(wù)直接上net8.0省事。真正影響代碼寫法的是這三處關(guān)注點(diǎn)netstandard2.0net8.0大數(shù)System.Numerics.BigInteger同上另有TryWriteBytes定長輸出高性能切片需要System.Memory包原生Spanbyte隨機(jī)數(shù)RNGCryptoServiceProviderRandomNumberGenerator.Fill我一般會統(tǒng)一寫RandomNumberGenerator.Create()拿一個實(shí)例兩個框架都能編譯不用寫#if。這一點(diǎn)看似無關(guān)緊要但真正到適配各個框架版本時這一點(diǎn)會節(jié)省很多時間。提示不要把System.Random用在任何密鑰、k 值、IV 上。它產(chǎn)生的序列可預(yù)測SM2 的 k 一旦可預(yù)測私鑰就等價于公開了。2.3 第一次運(yùn)行先把 SM3 的哈希值打印出來SM2 的調(diào)試成本高因?yàn)樗鼱砍峨S機(jī)數(shù)、點(diǎn)乘、編碼三件事所以第一次運(yùn)行不要碰 SM2先驗(yàn)證 SM3。新建一個控制臺項目引用 Core寫十行代碼using SmCrypto.Core.Sm3; // 標(biāo)準(zhǔn)附錄里的經(jīng)典向量SM3(abc) byte[] digest Sm3.Hash(System.Text.Encoding.ASCII.GetBytes(abc)); System.Console.WriteLine(Hex.ToHex(digest, upper: false));跑起來dotnet run --project src/SmCrypto.Console正常輸出應(yīng)該是66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0這 64 個十六進(jìn)制字符對上了說明填充邏輯、字節(jié)序、壓縮函數(shù)這三塊沒問題。再補(bǔ)一個長度不是 3 的用例驗(yàn)證填充邊界把a(bǔ)bcd重復(fù) 16 次正好 64 字節(jié)會觸發(fā)多補(bǔ)一整個分組期望結(jié)果debe9ff92275b8a138604889c18e5a4d6fdb70e5387e5765293dcba39c0c5732這兩個值都對SM3 這塊基本可以放心了。SM4 用標(biāo)準(zhǔn)向量key 0123456789abcdeffedcba9876543210、明文與 key 相同單分組加密結(jié)果是681edf34d206965e86b3e94f536e4246同一個塊再加密一次得到595298c7c6fd271f0402f804c33d3f66加解密往返能對回去才能說明輪密鑰沒有寫反。SM2 不適合這么驗(yàn)證后面第 4 章講怎么用往返測試加對方的公鑰做交叉驗(yàn)證。3. SM3 與 SM4從填充到輪函數(shù)兩段能直接抄的 C# 實(shí)現(xiàn)3.1 SM3 的填充與壓縮64 輪里真正在變的是什么SM3 輸出 256 位分組 512 位結(jié)構(gòu)上和常見的哈希算法相近但消息擴(kuò)展和輪函數(shù)里的置換是自己的一套。先看填充這是新手最容易寫錯的地方private static byte[] Pad(byte[] msg) { long bitLen (long)msg.Length * 8; // 比特長度用 long 防止大報文溢出 int padLen 64 - (int)((msg.Length 9) % 64); // 0x80 一字節(jié) 8 字節(jié)長度 if (padLen 64) padLen 0; // 剛好對齊時不再補(bǔ)整塊 byte[] buf new byte[msg.Length 1 padLen 8]; Buffer.BlockCopy(msg, 0, buf, 0, msg.Length); buf[msg.Length] 0x80; // 先補(bǔ)一個 1后面全 0 for (int i 0; i 8; i) buf[buf.Length - 1 - i] (byte)(bitLen (8 * i)); // 大端寫長度 return buf; }bitLen必須用 64 位整型長度字段是大端序這兩點(diǎn)在跨語言對接時最常出錯。padLen那個if判斷也不能少當(dāng)(msg.Length 9) % 64 0時會算出 64如果不處理就會多補(bǔ)一整塊哈希值直接不同。壓縮函數(shù)的核心是消息擴(kuò)展和 64 輪迭代private static void Compress(uint[] v, byte[] block, int offset) { uint[] w new uint[68]; uint[] w1 new uint[64]; for (int i 0; i 16; i) // 前 16 個字直接讀大端 w[i] ReadBe32(block, offset i * 4); for (int j 16; j 68; j) // 擴(kuò)展到 68 個字 w[j] P1(w[j - 16] ^ w[j - 9] ^ Rol(w[j - 3], 15)) ^ Rol(w[j - 13], 7) ^ w[j - 6]; for (int j 0; j 64; j) w1[j] w[j] ^ w[j 4]; // W 只是 W 的異或組合 uint a v[0], b v[1], c v[2], d v[3]; uint e v[4], f v[5], g v[6], h v[7]; for (int j 0; j 64; j) { uint t j 16 ? 0x79cc4519u : 0x7a879d8au; // 前 16 輪與后 48 輪常量不同 uint a12 Rol(a, 12); uint ss1 Rol(a12 e Rol(t, j % 32), 7); uint ss2 ss1 ^ a12; uint ff j 16 ? (a ^ b ^ c) : ((a b) | (a c) | (b c)); uint gg j 16 ? (e ^ f ^ g) : ((e f) | (~e g)); uint tt1 ff d ss2 w1[j]; uint tt2 gg h ss1 w[j]; d c; c Rol(b, 9); b a; a tt1; h g; g Rol(f, 19); f e; e P0(tt2); } v[0] ^ a; v[1] ^ b; v[2] ^ c; v[3] ^ d; // 末態(tài)異或回初值 v[4] ^ e; v[5] ^ f; v[6] ^ g; v[7] ^ h; } private static uint P0(uint x) x ^ Rol(x, 9) ^ Rol(x, 17); private static uint P1(uint x) x ^ Rol(x, 15) ^ Rol(x, 23);這里的參數(shù)說明一下v是 8 個 32 位的初始向量第一塊用固定常量后續(xù)塊用上一塊的輸出Rol(x, n)是 32 位循環(huán)左移n要先% 32否則 C# 的移位運(yùn)算符只取低 5 位Rol(t, j % 32)里的取模不能省。w數(shù)組 68 個字、w1數(shù)組 64 個字這兩個長度是固定的用List或者動態(tài)擴(kuò)容會讓每塊多做幾次分配壓測時差別能看出來。3.2 SM4 輪函數(shù)一個 T 變換貫穿 32 輪SM4 是分組長度 128 位、密鑰長度 128 位的分組密碼加密和解密用同一套輪函數(shù)只是輪密鑰順序反過來。它的全部復(fù)雜度都集中在T變換上// 字節(jié)代換把 32 位字按字節(jié)逐個查 S 盒 private static uint Tau(uint a) ((uint)SBox[(a 24) 0xFF] 24) | ((uint)SBox[(a 16) 0xFF] 16) | ((uint)SBox[(a 8) 0xFF] 8) | SBox[a 0xFF]; // 線性變換加密用 L密鑰擴(kuò)展用 L1少移位一次 private static uint L(uint b) b ^ Rol(b, 2) ^ Rol(b, 10) ^ Rol(b, 18) ^ Rol(b, 24); private static uint L1(uint b) b ^ Rol(b, 13) ^ Rol(b, 23); private static uint T(uint x) L(Tau(x)); // 輪函數(shù)里的合成置換 private static uint T1(uint x) L1(Tau(x)); // 密鑰擴(kuò)展里的合成置換S 盒是 256 字節(jié)的常量表放在Sm4Constants.cs里。寫的時候容易犯的錯是手抄表格抄錯一個字節(jié)結(jié)果只有某些特殊輸入才會出錯極難排查。建議直接從標(biāo)準(zhǔn)文檔復(fù)制然后寫一個單元測試斷言SBox[0] 0xd6、SBox[255] 0x48用首尾兩個值做初步校驗(yàn)。密鑰擴(kuò)展和單分組加解密public static uint[] ExpandKey(byte[] key) { if (key.Length ! 16) throw new ArgumentException(SM4 密鑰必須 16 字節(jié)); uint k0 ReadBe32(key, 0) ^ 0xa3b1bac6; // FK 是四個固定常量 uint k1 ReadBe32(key, 4) ^ 0x56aa3350; uint k2 ReadBe32(key, 8) ^ 0x677d9197; uint k3 ReadBe32(key, 12) ^ 0xb27022dc; uint[] rk new uint[32]; for (int i 0; i 32; i) { uint k4 k0 ^ T1(k1 ^ k2 ^ k3 ^ Ck(i)); // CK 由公式生成不必手寫表 rk[i] k4; k0 k1; k1 k2; k2 k3; k3 k4; } return rk; } // CK[i] (ck0,ck1,ck2,ck3)其中 ck_j ((4i j) * 7) mod 256 private static uint Ck(int i) { uint v 0; for (int j 0; j 4; j) v (v 8) | (uint)(((4 * i j) * 7) 0xFF); return v; } // 加解密共用解密時把輪密鑰倒著傳進(jìn)來即可 public static void CryptBlock(uint[] rk, byte[] input, int inOff, byte[] output, int outOff) { uint x0 ReadBe32(input, inOff); uint x1 ReadBe32(input, inOff 4); uint x2 ReadBe32(input, inOff 8); uint x3 ReadBe32(input, inOff 12); for (int i 0; i 32; i) { uint x4 x0 ^ T(x1 ^ x2 ^ x3 ^ rk[i]); // 一輪只產(chǎn)出一個新字 x0 x1; x1 x2; x2 x3; x3 x4; } // 輸出要反序這一步漏了會得到完全對不上的結(jié)果 WriteBe32(output, outOff, x3); WriteBe32(output, outOff 4, x2); WriteBe32(output, outOff 8, x1); WriteBe32(output, outOff 12, x0); }參數(shù)上要注意兩件事。第一rk是 32 個 32 位輪密鑰加密時正序解密時rk.Reverse()即可不需要另寫一個解密函數(shù)。第二最后輸出必須反序x3 x2 x1 x0這是標(biāo)準(zhǔn)里寫死的反變換很多人在這卡一下午因?yàn)榧用芙Y(jié)果看著“像那么回事”只是每個塊都對不上。3.3 分組模式與填充ECB 之外還得有 CBC 和 PKCS7單分組函數(shù)只是零件實(shí)際報文長度很少正好是 16 的倍數(shù)所以要有模式和填充。ECB 實(shí)現(xiàn)最簡單但同樣的明文塊會得到同樣的密文塊圖片、表格類數(shù)據(jù)一眼就能看出結(jié)構(gòu)業(yè)務(wù)上一般不允許用。CBC 更常見public static byte[] EncryptCbc(byte[] key, byte[] iv, byte[] plain) { if (iv.Length ! 16) throw new ArgumentException(CBC 的 IV 必須 16 字節(jié)); byte[] padded Sm4Padding.Pkcs7(plain, 16); // 補(bǔ)到 16 的倍數(shù) byte[] cipher new byte[padded.Length]; byte[] prev (byte[])iv.Clone(); uint[] rk ExpandKey(key); byte[] block new byte[16]; for (int i 0; i padded.Length; i 16) { for (int j 0; j 16; j) block[j] (byte)(padded[i j] ^ prev[j]); // 先和上一塊密文異或 CryptBlock(rk, block, 0, cipher, i); Buffer.BlockCopy(cipher, i, prev, 0, 16); // 本塊密文成為下一塊的 prev } return cipher; }Sm4Padding.Pkcs7的邏輯是缺 n 字節(jié)就補(bǔ) n 個值為 n 的字節(jié)正好對齊時補(bǔ)一整塊 16 個0x10。這個“正好對齊也要補(bǔ)”的規(guī)則是解密時判斷填充長度的依據(jù)少補(bǔ)這一塊對方解出來的尾巴會被當(dāng)成數(shù)據(jù)。IV 每次加密都要換新的隨機(jī)值跟著密文一起發(fā)過去不需要保密但絕不能固定不變否則相同明文前綴的密文前綴也相同。注意CBC 只保證機(jī)密性不保證完整性。要防篡改還得在密文后面附加 SM3 或 SM2 的校驗(yàn)值或者干脆用 SM2 加密會話密鑰、SM4 加密數(shù)據(jù)的兩段式方案。4. SM2 關(guān)鍵鏈路曲線參數(shù)、ZA 值與密文排列4.1 曲線參數(shù)與密鑰對先把 BigInteger 的字節(jié)序捋順SM2 用的是 256 位素域上的橢圓曲線曲線方程、基點(diǎn)、階都是固定常量直接照標(biāo)準(zhǔn)抄進(jìn)Sm2Curve.cs。真正的坑不在參數(shù)在BigInteger的字節(jié)序C# 的BigInteger內(nèi)部是小端構(gòu)造函數(shù)默認(rèn)還帶符號位而國密的所有數(shù)據(jù)都是大端無符號定長。// 定長 32 字節(jié)大端輸出左側(cè)補(bǔ) 0 補(bǔ)齊 internal static byte[] ToFixed32(BigInteger v) { byte[] raw v.ToByteArray(isUnsigned: true, isBigEndian: true); if (raw.Length 32) return raw; byte[] result new byte[32]; Buffer.BlockCopy(raw, 0, result, 32 - raw.Length, raw.Length); return result; } // 反過來讀的時候也要聲明無符號大端否則最高位為 1 會變成負(fù)數(shù) internal static BigInteger FromFixed32(byte[] buf, int offset) new BigInteger(new ReadOnlySpanbyte(buf, offset, 32), isUnsigned: true, isBigEndian: true);ToFixed32里那個補(bǔ)零動作不能省。橢圓曲線坐標(biāo)偶爾會出現(xiàn)高位為 0 的情況概率大約 1/256如果直接ToByteArray輸出會少一個字節(jié)長度變成 31對方解析直接報錯。這種概率性錯誤最難排查本地跑一百次都好上線跑一萬次報一次。密鑰對生成就是取一個[1, n-1]的隨機(jī)數(shù)當(dāng)私鑰再算d * G得到公鑰點(diǎn)public static (BigInteger d, byte[] publicKey) GenerateKeyPair() { BigInteger d; do { d Sm2Curve.RandomScalar(); } while (d.IsZero || d Sm2Curve.N); var (x, y) Sm2Curve.MultiplyG(d); // 未壓縮點(diǎn)格式04 || X(32) || Y(32)共 65 字節(jié) byte[] pub new byte[65]; pub[0] 0x04; Buffer.BlockCopy(ToFixed32(x), 0, pub, 1, 32); Buffer.BlockCopy(ToFixed32(y), 0, pub, 33, 32); return (d, pub); }公鑰點(diǎn)的序列化格式有三種未壓縮04||X||Y65 字節(jié)、壓縮02/03||X33 字節(jié)、純裸X||Y64 字節(jié)。不同系統(tǒng)默認(rèn)值不一樣聯(lián)調(diào)前先問清對方用哪種或者干脆在庫里三種都支持讀的時候看首字節(jié)判斷。4.2 簽名與驗(yàn)簽ZA 值沒算對后面全白搭SM2 簽名和很多人熟悉的橢圓曲線簽名差別在于被簽的不是消息的哈希而是ZA || M的哈希。ZA是用戶標(biāo)識、曲線參數(shù)、公鑰點(diǎn)的哈希摘要作用是把簽名和具體身份綁定起來。這一步漏了或者用戶 ID 用了默認(rèn)值而對方用的是自己的驗(yàn)簽 100% 失敗而且失敗信息沒有任何提示。// ZA SM3(ENTL || ID || a || b || Gx || Gy || Px || Py) private static byte[] ComputeZa(byte[] userId, BigInteger px, BigInteger py) { int bitLen userId.Length * 8; // ENTL 是 ID 的比特長度2 字節(jié)大端 var ms new MemoryStream(); ms.WriteByte((byte)(bitLen 8)); ms.WriteByte((byte)bitLen); ms.Write(userId); ms.Write(ToFixed32(Sm2Curve.A)); ms.Write(ToFixed32(Sm2Curve.B)); ms.Write(ToFixed32(Sm2Curve.Gx)); ms.Write(ToFixed32(Sm2Curve.Gy)); ms.Write(ToFixed32(px)); ms.Write(ToFixed32(py)); return Sm3.Hash(ms.ToArray()); } public static (BigInteger r, BigInteger s) Sign(byte[] message, BigInteger d, byte[] userId) { var (px, py) Sm2Curve.MultiplyG(d); byte[] za ComputeZa(userId, px, py); // e SM3(ZA || M)再當(dāng)作 256 位大端無符號整數(shù) byte[] digest Sm3.Hash(Concat(za, message)); BigInteger e new BigInteger(digest, isUnsigned: true, isBigEndian: true); while (true) { BigInteger k Sm2Curve.RandomScalar(); var (x1, _) Sm2Curve.MultiplyG(k); BigInteger r (e x1) % Sm2Curve.N; if (r.IsZero || (r k) % Sm2Curve.N 0) continue; // 規(guī)范要求重取 k BigInteger s BigInteger.ModPow(1 d, Sm2Curve.N - 2, Sm2Curve.N) * (k - r * d) % Sm2Curve.N; if (s.Sign 0) s Sm2Curve.N; // C# 取模會保留負(fù)號必須手動修正 if (s.IsZero) continue; return (r, s); } }逐段說明。ComputeZa里的所有長度都必須定長 32 字節(jié)少一位整體就變了所以統(tǒng)一走ToFixed32。默認(rèn)用戶 ID 是 16 字節(jié)的固定字符串很多系統(tǒng)的開放接口就是用它但私有協(xié)議經(jīng)常換成自己的 appId這一項必須和對方確認(rèn)。ModPow(x, n-2, n)是在求模逆因?yàn)閚是素數(shù)費(fèi)馬小定理成立比手寫擴(kuò)展歐幾里得快也不用擔(dān)心邊界。s的負(fù)數(shù)處理是 C# 特有的一處。C# 的%運(yùn)算符對負(fù)數(shù)返回負(fù)值s.Sign 0時加一次n才能回到[0, n-1]。在 Java 或 Python 里寫習(xí)慣的人換到 C# 上很容易忽略這一點(diǎn)結(jié)果只有極少部分簽名是負(fù)數(shù)測試樣本少的時候根本發(fā)現(xiàn)不了。驗(yàn)簽就是反過來算檢查r、s是否在[1, n-1]算t (r s) mod nt 0直接拒然后算點(diǎn)(x1, y1) s*G t*P判斷(e x1) mod n r。4.3 加解密與密文順序C1C3C2 和 C1C2C3 的互相傷害SM2 加密產(chǎn)出的三部分C1是隨機(jī)點(diǎn)kGC2是明文異或 KDF 流C3是校驗(yàn)摘要。老版本標(biāo)準(zhǔn)把順序?qū)懗蒀1C2C3新標(biāo)準(zhǔn)改成C1C3C2兩套在現(xiàn)實(shí)系統(tǒng)里都還在用所以庫里一定要留一個開關(guān)。public static byte[] Encrypt(byte[] message, byte[] publicKey, bool c1c3c2 true) { var (x, y) Sm2Curve.DecodePoint(publicKey); // 04 || X || Y while (true) { BigInteger k Sm2Curve.RandomScalar(); var (x1, y1) Sm2Curve.MultiplyG(k); var (x2, y2) Sm2Curve.Multiply(new Point(x, y), k); byte[] t Kdf(Concat(ToFixed32(x2), ToFixed32(y2)), message.Length); if (t.All(b b 0)) continue; // 全 0 說明 KDF 失效規(guī)范要求重來 byte[] c1 Sm2Curve.EncodePoint(x1, y1); // 65 字節(jié) byte[] c2 Xor(message, t); byte[] c3 Sm3.Hash(Concat(ToFixed32(x2), message, ToFixed32(y2))); return c1c3c2 ? Concat(c1, c3, c2) : Concat(c1, c2, c3); } }KDF 是基于 SM3 的計數(shù)器派生internal static byte[] Kdf(byte[] z, int klen) { byte[] output new byte[klen]; for (int i 0, ct 1; i klen; i 32, ct) { // 計數(shù)器是 4 字節(jié)大端接在共享點(diǎn)后面一起哈希 byte[] h Sm3.Hash(Concat(z, new byte[] { (byte)(ct 24), (byte)(ct 16), (byte)(ct 8), (byte)ct })); Buffer.BlockCopy(h, 0, output, i, Math.Min(32, klen - i)); } return output; }解密的順序是先按配置把三段拆開用C1和自己的私鑰算出共享點(diǎn)(x2, y2)用同樣的 KDF 得到t異或回C2最后重算C3比對。C3比對必須用固定時間比較逐字節(jié)異或累加不要用SequenceEqual提前返回這類細(xì)節(jié)在安全審計時會被挑出來。5. 避坑與排查聯(lián)調(diào)現(xiàn)場最常見的五個問題這一章是整套實(shí)現(xiàn)里最值錢的部分。算法本身照著標(biāo)準(zhǔn)寫就行真正耗時間的是下面這些表現(xiàn)完全一樣、原因各不相同的問題。5.1 驗(yàn)簽一直返回 false但雙方代碼看著都“對”現(xiàn)象自測簽名驗(yàn)簽往返完全正常一旦換成對方給的公鑰就失敗把對方發(fā)來的簽名拿去驗(yàn)也失敗兩邊都不報異常只是布爾值 false。原因九成是 ZA 里的用戶 ID 不一致。默認(rèn) ID 是 16 個字節(jié)的固定串而對方可能用了自己的應(yīng)用標(biāo)識另一個可能是對方把ZA || M里的M先做了 Base64 解碼再哈希而你直接對字符串字節(jié)哈希。解決讓對方明確給出 ID 的原始字節(jié)不是 Base64不是十六進(jìn)制并且約定M到底是原始報文還是某種規(guī)范化之后的字符串。確認(rèn)后先用SM3(ZA)單獨(dú)對比一次把 ZA 的哈希值發(fā)給對方核對這比反復(fù)試簽名快得多。ZA 一致了簽名再不對才是曲線參數(shù)或s負(fù)數(shù)處理的問題。5.2 SM4 加密結(jié)果第一塊對、后面全不對現(xiàn)象16 字節(jié)以內(nèi)的短報文加密結(jié)果和對方一致一旦超過 16 字節(jié)第一塊密文相同第二塊開始全亂。原因CBC 的鏈?zhǔn)疆惢驅(qū)戝e了。常見兩種寫法錯誤一是用明文塊而不是密文塊作為下一輪的prev二是循環(huán)里prev更新寫在異或之前。解決把Buffer.BlockCopy(cipher, i, prev, 0, 16)放在CryptBlock之后、下一輪異或之前中間不要有別的賦值。驗(yàn)證方法是拿 32 字節(jié)的固定輸入手工用第一塊密文異或第二塊明文看結(jié)果是不是和內(nèi)部中間值一致。5.3 SM2 加密偶發(fā)“密文長度不對”重啟又好了現(xiàn)象接口大部分時間正常偶爾報密文長度異常日志里能看到長度是 96 或 98 而期望 97 或 112 之類的值。原因BigInteger.ToByteArray()輸出的長度不固定。坐標(biāo)高位為 0 時會少一個字節(jié)如果沒用isUnsigned: true最高位為 1 時還會多出一個0x00符號字節(jié)。兩種都會讓C1的長度在 64、65、66 之間抖。解決所有點(diǎn)坐標(biāo)輸出統(tǒng)一走定長 32 字節(jié)的轉(zhuǎn)換函數(shù)不要直接調(diào)ToByteArray。再在解碼側(cè)加一層防御讀到C1時按首字節(jié)判斷格式04未壓縮、02/03壓縮、其余按裸坐標(biāo)補(bǔ)齊別硬編碼固定偏移量。5.4 大量數(shù)據(jù)加密時 CPU 打滿單條報文要幾十毫秒現(xiàn)象壓測時 SM4 的吞吐還能接受但整個接口 RT 很高火焰圖顯示時間集中在 SM2 的標(biāo)量乘上。原因一次 SM2 加解密要做兩次點(diǎn)乘kG和kP樸素的雙倍點(diǎn)算法每次都做模逆模逆是這里面最貴的一步另外BigInteger是不可變類型循環(huán)里頻繁產(chǎn)生中間對象GC 壓力也上來了。解決把點(diǎn)運(yùn)算改到雅可比坐標(biāo)下做只在最后一步轉(zhuǎn)回仿射坐標(biāo)一次點(diǎn)乘的模逆從幾百次降到 1 次kG因?yàn)榛c(diǎn)固定可以預(yù)計算一張表做固定窗口加速。業(yè)務(wù)側(cè)更好的做法是不用 SM2 直接加密大報文改成 SM2 加密一把隨機(jī)的 SM4 密鑰數(shù)據(jù)走 SM4性能差距是數(shù)量級的。5.5 升級框架版本后簽名結(jié)果變了現(xiàn)象從舊框架遷到新框架同樣的私鑰、同樣的報文對方突然驗(yàn)簽失敗而自測往返還是通的。原因隨機(jī)數(shù)來源換掉了或者BigInteger的行為在新運(yùn)行時上有細(xì)微差異。更隱蔽的一種是把k寫成了固定值做“可復(fù)現(xiàn)測試”上線忘了改回去兩次簽名用了同一個k從本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
97在线国产精品| 欧美亚洲| 亚洲精品蜜桃久久久久久久| 欧美96精品在线| 天天狂操夜夜狂日| 欧美色道啊| 高清不卡视频| 国产67194| 国产精品爱欲| 视频一区二区三区精品| 性色高清..……| 麻豆区99999| 国产无套粉嫩白浆在| 麻豆国产97在线| 俺也射| 熟妇熟女一区二三区| 亚洲天堂久久| 色色婷婷五月天| 国产av又色又爽又黄| 91狠狠综| 操碰97| 蜜臀久久久99久久久久 | 久久精品免费| 高凊专区人人操| 97自拍视频在线| 蜜乳av首页| 极品美女福利在线观看| 五月婷婷丁香中文字幕| 色色色天美视频| 97在线精品观看视频| 亚洲欧美一区二区网址| 可以在线观看的黄色网址| 国产精品高潮呻吟av久久4虎| 97这里只有精品| 欧美色图91| 国产丁香精品露脸视频| 中文字幕乱妇免费视频| A一区片| 男人的天堂 在线一区| 青青草福利视频| 亚洲色图欧美| 精品久久久久久无码| 日本人妻丰满熟妇久久久久久| 97干97色| 7777奇米影视久久| 人人射人人操人人摸| 日韩另类| 久久国产视频专区一二三| 久久久久久久 九九九九九九九| 看看小穴| 99色婷婷中文字幕乱色| 亚洲诱惑天堂 | 五月婷网站| 国产大陆天天艹| 久久性爱网站| 亚洲有码 欧美精品| 吻戏激情性巴克| 97久久资源| 91国产大片| 淫骚熟女一区二区三区| 夜夜欢天天干| 熟女精品va中文字幕| 超碰在线99| 色老汉玖玖爱| 日天天九九天堂666| 丰满人妻-区二区三区免费看| 亚洲欧美伦综合| 国内毛片热久久思思热| 中文字幕精品资源在线| 亚州黄站| 私人尤物在线精品不卡| 人妻乱仑一区二区三区| 亚av顶级裸体一区二区三区四区五区| 亚洲资源一区| 欧美,日韩综合久久| 人妻精品视频一区二区| 久久精品91| 91亚洲色图| 韩日性爱av| 日本在线一二| 韩国嫰模上门援交视频| 无码最新| 嫩草 人人网精品| 国产精品人妻无码久久久老鸭窝| 色香色欲天天综合网天天来吧| 国产精品一区二区在钱播放| 人人操人人操人妻人| 2018天天日天天日| 久久久9品一区二区三区| 久久亚洲熟妇在线视频| 国产一区在线播放| 婷婷91| 日韩欧美水蜜桃人妻| 国产老女人久久毛| 噜噜吧,噜噜色,噜噜| 日韩电影天堂视频二区三区| 伊人麻豆传媒| 日韩精品99999| 九九九不卡| 欧美日韩国产三级黄色| 91久久18禁| 亚州欧美色图| 日日操天天操| 久久久久久久强迫| 蜜桃精品一区二区三区ww| julia国产在线| 午夜影美女日鸡鸡天天视频国产| 懂色av中文字幕一区二区三区天美 | 久久久国产av美女私房| 看看小穴| 亚洲中文字幕熟女| 在线观看十八禁| 熟女91网站| 一块操欧美| 操死我了啊啊啊| 久久av一级av少妇av高潮| 亚洲色图20p| 天天综合-91入口| 精品人人插人人操| 91超碰丝袜制服| 自拍大香蕉乱插| 国产乱青青草久久| 欧美成人一区二区三区在线播放| 夜夜青青无码影院| 精品人人插人人操| 99999亚洲另类| 欧美色图天堂在线| 自拍偷拍第26| 国产精品第二页| 高清无码在线播放网站| 日产123区精品免费观看| 国产精品99精品视频网站| 亚洲欧美爆| 久久无码一区二区二三区性色| 欧美超碰96| 久久草草亚洲蜜桃臀| 9超碰免费| 亚欧成人综合影院| 偷偷人人精品女女久久| 嗯嗯啊在线视频| 看免费的黄片| 青青草大香蕉视频| 性色乱AV一区二区| 日韩国产乱子伦App| 老女人91| 日韩啪啪啪啪啪| 欧美99999| 九九英色视频| 国产麻豆一级精品视频| 97欧美在线| 97日视频| 色播综合| 国产丝袜美女在线一区| 成人精品水蜜桃久久久久久久| 97最新在线播放视频| 精品九九九九九九| 久久精品国产99国产精品亚洲| 波多野结衣一级视频| 亚洲丝袜制服国产91_国语字幕免费观看完整版下载第5集_ | 蜜色网色哟哟| 亚洲人妻中文高清| 精品国产乱码久久| 蜜臀久久精品久久久久视频| 热久久精品| 亚洲精品xxx| 91亚洲人| 少妇精品久久久八区九区| 国产av尤物| 天天操人人操狠狠插| 精品久操| 丝袜美腿校园春色| 射 色综合| 色嗨嗨在线| www.亚洲成人一区| 亚洲欧美天堂| 人人妻人人爱人人玩| 亚拍在线| 日韩av色图综合| 久久ww| 免费一级a毛片久久久久久鸭绿欲| 中文字幕人妻丝袜乱一区三区| 色狠人在线99| 久草草一二三四区久久| 九九夜精品九九在线| 男人的天堂2019AV| 亚洲图片欧美在线视频| 亚洲欧美综合区自拍另类| 亚洲伊人成综合成人网| 色欲天天综合久久久无码网中文| 欧美九九九| 九九九九97| 日本不卡二三区| 天天欧美色| 涩五月婷婷| 性爱av在线免费观看| 成人乱人伦一区二区| 激情小说图片亚洲首页| 91久久免费视频互動交流| 午夜男人的天堂| 丰满熟女人妻一区二区三五十一路| 欧美亚洲影视| 超碰97资源大奶| 欧亚乱色熟一区二区三四区| 日韩性色b| 日韩久久三区| 青娱乐导航AV| 九九热精品在线| 亚洲天堂,男人| 国产欧美一区激情交| 精品区国产区一区二区三区| 婷婷在线精品| 校园春色综合| 国产成自自拍在线观看| 97 视频在线| 午夜福利在线视频1000| 亚洲drav色图| 精品无人区麻豆乱码1区2区图片 | 亚洲图片欧洲图片aⅴ| 欧美精品xxxwww| 国产尤物AV尤物在线观看不卡| 亚洲免费成人在线高清无码视频 | 这里只有精品视频| 国产白嫩精品久久| 都市激情人妻一区二区青青操视频 | 中文乱码99| 黄网站黄视频网站进入口| 91麻豆天美国产| 一本一首道人妻少妇免费久久| 制服中出中文人人精品| 国产精品对白自产拍| 亚洲图片小说欧洲| 精品欧美老熟女一二区| 蜜乳av一区二区| 乱伦日本色图AⅤ| 免费观看啪视频| 玖玖综合.com| 久久精品视频一区三区小泽玛利亚| 人妻少妇精品无码专区二区密桃| 国产一区二区三区高清视频| 国产精品久久久久中文字幕| 伊人久久88国产女| 色婷婷婷五月天激情四射| 国产精品天干天干综合网麻豆| 亚洲一区二区中文字幕| 9国产超碰| 亚洲国产欧美中文永久| 少妇人妻精品| 屁股久久久久久| 中国一级操逼视频| 啊灬快c我灬啊灬用力灬啊灬-国产精品性做久久久久久-成人AV | 国产亚洲深夜激情| 亚洲黄色影视| 99精品网站| 亚洲激情久久久伊人综合| 乱伦熟女论坛| 狠狠狠狠狠| 亚洲综合图色在线| 999久久久免费精品国产牛牛| ?亚洲伊人伊成久久人综合网| 日本一区二区三区欧美日韩中文字幕| 一级黄碟| 韩国手机不卡无码三级视频| 色色色欧美| 亚洲欧洲日产国产综合网| 东京太热男人的天堂久久久| 亚州一区二区成人片免费| 久久精品国产精品亚洲艾通辽熟妇| 中文幕97| 精品久久久av无码免费| 玖玖视频在线资源一区二区三区| 亚洲精品黑丝| 国产高清在线观看欧美| 久久国产视频专区一二三| 亚洲欧洲综合| 日本三级日本三级99| 性爱AV天堂| 免费av高清无码| 天堂蜜桃无码视频一区二区| 国产400孕妇孕交群| 国产懂色精品国产av| 91美女色视频亚洲| www.yeyecao| 日本 免费 一区二区三区 久久香蕉| 亚洲深夜福利| 超碰在线国产| 啊啊啊好大好深| 大香蕉乱伦视频网| 青青草华人在线欧美在线| 欧美 日韩 亚洲 春色| 青青草在线成人视频| 97鸡把在线视频| 人妻精品一区二区在线| 国产精品乱码久久久、久久| 天天看,天天做| 长久操视频| 国产三区免费在线观看| 色97国产69香蕉| 这里都是精品在线观看| 亚州欧美另类| 伊人青青一区成人视频在线观看区| 嗯嗯啊好爽| 欧美拳交在线播放| 五月丁香激情四射| 久久鲁夜| 强歼乱伦资源网| 97在线日韩中文字幕| 最近的最新的中文字幕视频| 欧美 色 亚洲| 800zy一区二区| 91精品久久久| 欧美97色| 久久超碰97中文字幕| 国产一区自拍欧美日韩| 99少妇| 精品一区二区三区蜜桃臀赵总 | 狂操嫩妻视频一区二区三区| 人人操人人爽人人操人人| 亚洲熟妇熟在线电影视频| 91精品久久久久五月天精品| 热热色青青草| 97色欧州| 男人的天堂2019AV| 人人操人人插人人摸人人干| 麻豆色99999| 视频二区美腿丝袜制服人妻欧美| 91网九色蝌蚪操熟女| 亚洲色图美腿丝袜| 超碰97精品在线| 激情抓乳插进去啪啪啪日韩| 成人无码欧美一级A片狼牙直播| 亚洲人妻一区二区三区| 一区二区三区探花在线观看| 欧美色图亚洲色| 天天α片| 国产少妇与亚洲av| 2018色综合天天操| 女同女同恋久久级三级| 猛猛干| 欧美一级专区免费大片| 欧州色图区| 男女激情黄色网址| 久久久新亚洲AV| 超碰9 7女人 | 天天操天天干一区二区| 91狠狠综| 男人精品区| 成人精品欧洲亚洲| 美女啊啊啊啊啊啊啊| 亚欧日韩成人| 嫩草美女久久| 91丝袜在线观看| 久久久久久免费电影| 熟女一区二区| 精品一区二区3区| 日亚韩精品视频二区三| 狠狠操夜夜| 国产精品人妻无码久久久互動交流| 精品女同一区| 职场同事知名国产国产精品久久欧美日韩| 亚洲人精| 99爱久久视频频| 可以看的av| 蜜乳AV一区二区三区四| 亚洲中文一区二区三区| 欧美日韩大黄片| 婷婷丁香激情| 人妻三级在线中文字幕| 欧美美女视频| 男人兔费天堂| 九九五月天| 欧美熟女少妇| 五月婷网站| 久久久久久加勒比| 大屁股人妻女教师撅着屁股| 97在线视频免费观看| 日天天九九天堂666| 亚欧操逼片在线观看 | 免费观看性欧美一级| 综合网天天| 青草一区二区| 激情小说图片亚洲首页| 麻豆国产97在线| 国产女同在线观看视频| 免费少妇一区二区| 人妻日日干| 亚洲码专区| 无码 有码 国产18p| 久久久国产亚洲精品系列| 十八禁的黄污污免费网站| 九九精品99| 超碰成人公开| 色爱国产| 亚洲精品天天影视综合网 | 丝袜狠狠草尤物人妻av91| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 成人电影一区| 偷拍欧美激情| 狠狠2050在线观看| 欧美性色欧美| 欧美精品久久96人妻无码| 亚洲AV麻豆Aⅴ无码电影一| 蜜乳成人AV| 黄色一区二区秘书性感| 午夜福利成人免费视频| 国产精品老熟女一区二区| 欧亚乱色熟一区二区三四区| 欧美青青视频| 欧美成人精品一区二区男人蜜臀| 欧美中文综合| 人人操人人操人人人操| 亚洲色久| 1二区9| 亚洲色天堂九9| 精品亚洲天堂| 欧美性爱三区二区| 精品视频日日夜夜| 91精产一区二区三区| 伊人性在线视频| 久久久久久网址| 91在线精品| 日韩乱码Av| 试看福利| 日韩欧美日韩| 久久久久国产精品片区无码直播| 91女人的网站| 99热婷婷一区二区三| 成人午夜高潮av猛片| 俺去俺来也在线www| 在线观看一卡二卡| 国产不卡的视频| 蜜臀一区二区三区在线| 国产免费一区在线观看| 天堂在线一区二区| 青青久久艹| 欧美性爱1080p| 久久a久久| 2017天天操天天日| 91天堂色男人的天堂| 九九热精品在线| 国产视频97| 亚瑟国产精品久久无码| 亚洲有薄码区日本系列中文字幕| 亚洲九九视频在线观看| 成人一级性爱| 刺激精品视频| 国产精品分类在线观看| 亚洲AV免费在线观看| 亚洲少妇自拍中文字幕懂色| 亚洲高清无码在线桃色| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 91九久| 中文字幕一区二区三区人妻不卡| 国产午夜无码片在线观看影视 | 大色综合| 久操B网| 另类图片天天影视| 国产按摩一区二区三区| 伊人91| 爱射综合| 日夜精品| 一本道综合色图| 欧成人在线| 三级片网站在线播放| 人妻人久久精品中文字幕| 萌白酱自拍视频| 午夜后入| 国产精品久久久久久久毛片1| 国产精品熟女九九九| 亚洲国产美女久久久久| 亚洲日韩青青草色月| 国产综合日韩伦理| 日本天堂网| av黄图片在线观看| 青青草国产亚洲精品久久 | 啊啊好多水| 日韩免费看在线黄色片| 久久综合av| 1769一区二区| 99久久久| 色噜噜国产在线| 国产精品久久久久久亚洲色欲| 欧美亚洲第1页| 手机看片日韩人妻| 久久骚| 日本欧美国内在线| 激情小说亚洲| 成人A片男人的天堂| 激情小说图片亚洲首页| 亚洲综合一| 欧美一区二区亚洲天堂| 久久久久国产精品久久久| 夫妻四区五区六区| 芊芊操逼视频无码| 欧美日韩久久精品爱爱| 国产精品亚洲四五区在线观看| 天天干天天燥| 桑老女人九区| 欧美18禁91| 欧美三级中文字幕hd| 99热这里只有精品18| 精品v1区| 第一高清av中文字幕| 亚洲国产综合图区中文字幕| 亚洲诱惑| 吻戏激情性巴克| 久久久久久久久久va| 久久网亚洲| 顶级少妇BT天堂| 亚洲国产麻豆一区二区三区| 91狠狠| 大香蕉之青青草原| 精精夜夜| 亚洲色综合| 欧美A片中文字幕| 2017天天操天天日| 欧洲精品一区二区三区| 人妻丝袜无 码视频专区| 中文色综合| 中文 人妻 制服| 91nbbbbbb| 78综合网| 狠狠干综合| 亚洲精品官网在线观看| 呦呦一区| 97这里有精品| 中出20p| 91国产美女丝袜足交精品视频 | 影音先锋每日最新资源在线观看 | 色噜噜人妻丝袜a∨先锋影| 东北毛片| 啊啊啊啊啊啊在线观看| 国产精品69久久久久孕妇欧美| 亚洲乱色视频一区、二区在线| 91精品黄在线观看| 国精精品无码一二三区水多多| 欧美日本成人一区二区| 亚洲色人阁| 日韩青久久| av东京热男人的天堂| 精品国产一区二区久久| 亚洲91少妇| 亚洲第一综合| 三级三久久线久久99久目本WW| 日韩欧美综合激情| 欧美日韩一区二区三区四区蜜桃| 日本1区2区不卡视频| 热99re69精品8在线播放| 欧美图片校园春色| 欧美一二级| 亚洲综合 欧美| 97一区二区三区视频| 日本999精品视频| 成年男人的天堂| 人妻精品综合中文字幕在线| 国产欧美精品日韩区二区麻豆天美| www99热| 激情五月婷婷综合| 丁香五月成人| 91女在线观看| 日欧美色| 在线情色电影 91大 | 无码不卡亚洲成?人片| 精品人妻一区二区三区日产| 色婷婷国产精品一区在线观看| 五十路三区在线| 人妻少妇精品久久久久久久| 精品一级毛片在线观看| 中文字幕日韩专区精品系列 | 亚洲精品一二三四区| 天堂资源欧美| 国产精品天干天干综合网麻豆| 91五月天| 天天影视91看看| 欧美宗合网| 日本一级真人黄色性爱视频| 国产亚洲精品精AV.| 日韩精品在线观看观看| 精品-91人妻子系列| 亚洲激情网一二三四区| 97露脸精品丝袜| 狠狠躁天天躁日日躁97| 天天干夜夜鈤| 免费看片黄| 思思热影视| 性爱视频久久| 国产精品久久久777| 夜夜免费视频| 九九九九精品| 家庭乱伦网站国产| 吻戏激情性巴克| 天天看片麻豆| 猛猛干| 中文字幕一区二区免费在线| 婷婷91| 久久天天躁日日躁狠狠躁| 久久久久国产精品人妻aⅴ天堂| 校园春色美腿丝袜| 欧美真人抽搐一进一出gif| 中文字幕123| 黄色网址久久精品欧美喷水| 91老熟女老女人国产老太| 中文字幕一区二区三区人妻不卡| 亚洲精品一区二区精华| 丁香九月激情| 欧美在线视频播放| 亚洲天堂一区| 色色色色网站| 蜜桃色院一区久久| 久久精品| 婷婷久久五月天| 美女黄码视频午夜| 亚洲欧美另类激情小说| 欧美顶级黄片AAAAA在线免费看| 台湾佬中文娱乐自偷自拍| 九九久精品| 人人操人人干网页| 欧美久久婷| 中文字幕三四五区| 九九综合久久| 成人熟女区| 天天干天天舔| 日韩pv中文| 蜜臀久久99精品久久久久电影| 亚洲色欲天天天堂色欲网女| 艳美熟妇先锋一二三区| 国产精品不卡少妇白| 1禁看欧美黄片免费看| 欧美日韩电影一区二区| 操一操摸一摸| 日韩97超碰中文字幕| 蜜桃久久一区| 综合一区中亚洲国产成人综合精品| 亚洲精品美女操逼| 琪琪精品免费一区二区三区 | 久久精品福利影院| 日日干日日操五月天伦理视频| 91宗合网| www.色五月| 亚洲欧美97√| 久久乐| 春色91| 五月天激情小说网| 99999国产精品| 色婷婷六月| 精品少妇99| 国产超碰在线| 国产精品诱惑| 91丝袜美女| 日本韩高清无砖码22o| 欧美黑人猛交春色影视大全| 好色综合| 久久成年精品| 久操网址| 超碰9 7女人 | 亚洲97综| 亚州综合电影| 欧美色视频在线| 精品妇操一区二区三区| 色丁香久久| 97免费在线观看| 熟妇一区二区三区| 国产成年精品高清在线观看91| 成人久久精品| 在线性黄高清免费视频| 玖玖综合网| 亚洲国产综合久久久性感熟妇| 三级日本一区二区三区| 91爱看| 精品-91人妻子系列| 超碰色老头| 欧美色图片91| 92午夜免费福利视频| 综合色欧美| 人人污日韩一区二区| av在线观看不卡网站| 黑人粗大V S日韩女优视频| 色婷婷狠狠18禁| 欧美国产精品久久九九| 任你干在线视频| 亚洲精品色| 久热在线精品免费观看| 欧美色吧综合| 春色校园综合网| 黑人精品成人一区二区三区| 久久老女人| 天天插天天操天天摸天天射天天看| 一区二区娱乐网站| 岛国免费视频在线| 四虎精品永久在线观看| 欧美熟妇乱码在线一区| 亚洲精品a人片在线观看视| 四虎在线观看视频| 性九九九九九九| 久久亚洲骚逼综合| JULIA一区二区三区在线播放| 亚洲精品久久久久毛片A片拉屎| 呦女网站| 少妇一区二区三区在线观看| 97人人模人人爽人人| AV在线性爱| 骚女天天综合网| 天天超级碰碰碰| 国产免费大片| 日本色色色| 又大又长又粗又爽又黄| 96精品久久久久久久久| 国产熟女高潮一区二区三区| 91麻豆天美国产| 爱爱60秒免费视频| 日本熟女中文| 欧美丝袜制服久久| 成人av在线播放| 婷婷五月天激情四射| 国产97/欧美| 中文字幕第23区| 91亚州欧美| 四月丁香婷婷| 67914亚洲精品| 超碰人人色| 免费在线观看国内色片网站网址 | av线电影| 亚洲 另类 丝袜 自拍 动漫| 夜夜高潮夜夜爽| 精品女人999| 五月天伊人| 国产超碰人人操| 夜间福利片1000无码| 俄罗斯一区二区视频在线观看 | 欧洲精品一区二区三区| 久久久久久性爱视频| 日韩乱码Av| 中文字幕二区日韩天堂 | yw尤物av无码点击进入麻豆| 亚洲一区二区三区婷婷| 日韩欧美女求操每天更新| 日韩欧美久久婷婷网站| 老鸭窝成人| 久久久久久无码人妻中文字幕| 97就爱干| 大香蕉在线SuP| 啊啊啊啊啊舒服| 亚洲日韩资源| 78操B| 啊啊啊爽爽| 操逼操2| 国产家庭乱伦表演| 午夜操逼不卡| 亚洲最新中文字幕免费| 色噜噜人妻丝袜a∨先锋影| 日韩乱伦视频| 大香网伊人久久综合| 色婷婷影院| 97超碰美国| av操操不卡| 黄资源| 蜜桃臀AV在线| 国产97免费视频| 人人操,人人液| 精品国产91av一区二区三区| 国产强奸超碰AV| 加勒比大香蕉视频在线| 熟女在线视频| 亚洲偷拍欧美激情| 色老大| 老司机午夜精品视频| 人人看欧美性爱| 精品国产精品一区二区| 精品久久久久,69国产成人精| 夜夜夜夜夜夜夜夜夜狠狠狠狠狠狠狠| 亚洲欧洲色情高清| 青青草在线视频播放器| 男女一进一出视频久久| 欧美成人A天堂片在线观看| 亚欧韩av| 色综合中文字幕不卡| 麻豆精品三区视频| 诱惑网综合| 中文字幕乱在线伦视频中文字幕乱码在线| 色爱三区| 嗯阿好爽好紧| 亚洲精品蜜桃久久久| WWW.操逼.COM| 天天色播亚洲综合网站| 九一亚洲国产免费| 欧美性第1页| 日本熟女不卡视频| 大香蕉久操| 狠狠亚洲| 亚洲综合首页| A 天堂在线观看视频| 色噜噜国产在线| 老熟妇一区二区三区| 亚洲不卡三级手机播放| 国内自拍 日韩激情 99| 2019天天操天天爽天天拍| 夜夜久久久| 国产毛片在线| 欧美日韩理论一区| 男人的天堂com| 欧美日韩精品一区二区三区高清| 青青草九九九九九| 黑丝制服中文字幕| 无码WWW免费视频网站| 中文字幕在在线观看网站| 亚洲欧洲日韩中文字幕一区| 亚洲免费在线探花| 亚洲图片欧美制度| 九九九九九九九九九国产精品 | 中文字幕国产| 丁香六月东京热| 欧美亚洲日韩16色| 亚洲无码国产探花在线观看| 激情一区二区三区在线观看| 亚洲欧美国产精品久久久久久久| 巨爆乳一区二区爆乳区| 中文字幕天天天天天| 亚洲国产精品无石码久久| 久久精品99| 影音资源男人日韩| 国产高清MV操逼视频| 操一区| 欧美熟妇成人一区二区| 久久久久中出| 午夜精品久久一区二区| 夜夜嗨AV一区天天| 色欲久久99国产精品久久久久久| 日韩啪啪网| 丝袜美腿91| 亚洲图片偷拍视频区| 亚洲AV在线资源| aaaa少妇高潮大片| 亚欧操逼片在线观看 | 色大师网站www永久网站视频| 午夜小电影在线插入淫高潮| 欧洲无码一区二区| 2017av无码免费无线播| 久久一二区四| 亚洲无无码αⅴ每日更新| 色狠人在线99| 国产强奸乱伦xd| 天天干天天中出av| 少妇干B| 国产AV天美传媒一区二区三区 | 国产乱人妻精品入口| 久操凹凸视频| 中文字幕在线第二页| 爱我干综合| 女生91网站| 肉丝网站91| 福利社区午夜一区二区| 美女丝袜激情小说| 三级三久久线久久99久目本WW| julia国产在线 | 人人搞人人插人人操| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 黄页网站免费高清在线观看| 久久精品男人的天堂| 人妻AV在线| 精品一区二区三区国产| 欧美日韩国产电影| 在线看免费无码AV天堂的| 伦理第一页| 激情图片亚洲色图| 久久久久成人亚洲国产| 欧美日韩欧美| 欧美久久久15P| 大香蕉一线视频| 麻豆熟妇乱妇熟色A片在线看| 中文字幕二区日韩天堂| 伊人丁香五月婷婷| 欧美肥臀在线| 97综合日韩| 插欧洲美女欧美精品| 蜜臀久久99精品久久久| 小骚逼被操的爽不爽| 91碰碰碰| 国产精品亚洲高清在线| 国产精品伦理| 日韩精品99久久久久久中文字幕 | 老熟女区| 99啪啪视频| 青青免费在线视频一区| 人妻蜜桃臀| 欧美熟妇操操视频| 深爱五月婷婷| 国产欧美一级在线观看| 欧美亚洲情色| 日本97久久| 欧美亚洲影视| 99这里有精品| 亚洲 一区二区 自拍| 黑人猛交| 婷婷人妻激情| 99re在线视频国产| av操操不卡| 九九伊人网| 成人性爱av.com| 亚洲成人激情小说视频| 欧美97免费| 九九国产| 日韩/97| 色哟哟的毛片| 2020国产精品| 岛国AB视频| 日本高清视频xxxx| 狠狠操狠狠操操| 嫩草 我啊~嗯~在线| 96久久精品一二三区色欲| 97 亚洲 日韩 欧美 在线| 欧美日韩性爱视屏免费看了| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 澳门人妻久久| 色婷婷久久| 成人午夜小视频手机在线看| 超碰97人妻免费在线| 97极品无码| 欧美少妇高潮| 久久成人精品| 亚洲熟妇综合久久久久久| 蜜臀99999| 狠肏骚人妻| 亚洲精品蜜桃久久久一区二区三区| 大香蕉av在线| 91丨九色丨国产打屁股| 欧美顶级黄片AAAAA在线免费看| 能在线播放的国产三级| 操逼天美3区| 人人妻人人爽 97人人看碰人免费公开视频| 91天天看| 国产又黄又粗又猛大片| 婷婷婷婷婷婷久久久久| 久久久久久久人妻丝袜| 91无遮挡| 亚洲午夜未满十八勿入网站日本又色又爽又黄 | 1024午夜激情男人的天堂| 欧美亚洲美少妇一区二区| 欧美一区二区传媒| 国产美女91视频| 日逼五月天| 嗯嗯啊好大| 新精精品久久精品| 精品久久9| 久久久少妇诱惑精品视频| 麻豆a'v电影| 午夜美女诱惑电源网| 人妻第一页| 久久久久亚洲| 日韩欧美操逼xxx| 中文字幕一区二区免费在线| 岛国网址国产 | 大香蕉婷婷| 精品一区二区啪啪啪| 后入 亚洲 美女 射| 日日日啊啊啊| 99热 按摩 日韩| av草草在线电影| 限制级中的三级片中的黑粗大屌屌日人妻熟女 | 欲色综合| 女性喷水高潮在线观看| 亚洲欧美在线观看无码| 国产操操日韩三级黄| 强奸乱亚洲| 超碰资源亚洲97| 10000部十八禁看电影| ...日韩成人一区二区三区字幕| 久久精品人妻一区二区三区| 一区二区影视| 色黄污美女啪啪啪免费网站| 国产午夜激片Av毛片不卡| 久久综合99| 欧美综合加勒比在线| 91亚洲欧美综合高清在线| 亚洲美女精品九九视频| 国产精品爱欲| 国产高潮AA片免费看| 色一射色一射| 狠狠干妹子| 亚洲天天综合| 中日韩欧美精品无码AⅤ一区二区| 久久九九99| 欧美A√综合网| 亚洲中文丝袜美腿诱惑字幕| 18禁止看精品中文字幕| 一区二区娱乐网站| 久久精品一区| 日日骚网站| 日韩中文字幕人妻视频| 熟女人妻av在线资源,黄色的资源| 亚州久久9| 欧美色图第一页| 久久久无码av精| 青青色综合| 久久久91| 精品国产乱码久久久久久口爆网站| 亚洲熟妇极品| 国产丝袜一区二区三区| 无码人妻一区二区三区色欲aⅴ| 人妻精品视频一区二区| 久久国99999| 国产精品乱码久久久久| 久久久久久久久成人av解说| 人妻在线臀日韩| 99精品九九九九九九| 青青久久手机线视频| 尤物av网站| 久操免费观看| 久久99亚洲精品久久99果| 日本精品性生活久久久| 少妇综合网| 丁香六月婷婷| 青青草中出视频| 久久综合亚洲色1080p| 欧美熟女激情| 极品销魂美女一区二区| 一个人免费HD91视频| 少妇精品久久久| 国模私拍一区二区三区神乳| 国产成人资源| 91熟女在线| 色五月av| 中文字幕一区二区无码成人| 欧美v亚洲v日韩v最新在线二区 | 亚欧韩av| 人妻无码一区二区三区久久99| 亚洲第一免费视频| 啊啊啊好舒服好爽啊啊啊视频| 日本精品五区| 在线观看AV不卡| 91人妻少妇| 日韩AV电影网站| 99精品人妻| 欧亚综合一卡二卡中文字幕| 日韩有码专区| 97超碰国产亚洲精品资源| 97Ai亚洲| 国产欧美第五页| 天天爽天天操啊啊啊| 屌逼传媒| 国产60页| 操我啊啊啊啊啊| 精品无码欧美三级| 久久蜜桃综合网| 久久久精品电影| 加勒比海成人视频网 | 热热色综合网| 激情综合五月| 99re98| 97天天爽| 亚洲男人久久综合天堂| 亚洲国产精品久久久男人的天堂| 思思热免费在线视频| 亭亭在线资源| 色啪网| 人妻夜夜爽天天爽三区麻豆AV网站| 天天操女人| 91搞逼视频| 哑洲在线| 亚 欧 美 综合| 日韩免费av片高清无码| 高潮综合网| 国产超碰| 97爱综合| 2017大香蕉国产精品久久| 韩国午夜理伦三级好看| 欧美亚洲系列| 综精品久久久aaaa| 免费精品人妻一区二区三| 亚洲国产福利视频| 日韩在线视频1234| 91亚洲色人| 四虎免费在线播放| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 96麻豆精品一区二区三区| 欧中日成人免费影视| 国产熟女免费观看久久| 日逼97| 1二区9| 色色色综合网| 精品丝袜无码一区二区三APP| 夜夜夜夜爽| 欧美综合97www| 高跟丝袜AV专区国产| 欧美懂色综合网| 91麻豆一二三区| 国产乱码久久| 五月丁香拍拍激情综合三级| 精品日日人妻| 国产久久一区二区| 国产亚洲一黄| 2019天天干天天操| 天天综合97| 久久久久幕乱码| 一区二区三区男女操逼黄色小电影| 一,爱啪啪,在线免费视频| 色欲久久99国产精品久久久久久| 今日头条成人一区二区三区四虎精品| 激情久久av一区av二区av| 国产v片在线免费观看| 中国91AV| 一区二区三区色综合| 中文字幕在线观看AV| 第一高清av中文字幕| 国产成年女人免费视频播放a| 久久熟女嫩草成人片免费| 亚洲天堂加勒比| 亚洲的天堂网| 精品国产自在在线99| 不卡免费av在线播放| 操操吧亚洲乱伦视频| 九九碰九九爱97超| 欧美96交| 欧美亚洲高清不卡| 亚洲不卡不卡中文字幕不卡| 欧美在线播放aaaa| 亚洲乱伦图片视频| 亚洲电影中字一区二区| 激情欧美97| 超碰导航97| 久久九九热| 日日噜噜夜夜久久亚洲一区二区| 超碰激情808| 国产女人高潮视频| 97色色婷婷| 亚洲成人久久美女| 欧美性爱十八禁| 91爆操视频| 大香蕉黄色一级片免费看| 中文字幕av亚洲精品| 男人久久天堂| 中文字幕一区二区三区50路| 日日夜夜骑| julia国产在线| 成人草草视频| 久久久久久无码人妻中文字幕| 久久精品国产久精国产| 久久久久78| 伊人991| 国产精品欧美激在线| 欧美 亚洲 大香| 亚洲av热热色| 丝袜视频一区二区在线播放国产中文| 超碰在线974| 精品97精品97| 亚洲欧洲日产国产综合网| 久久久久9999妇女| 新视频sss国产| 加勒比五月天| 果冻传媒一区二区三区| 色97国产69香蕉| 久久久精品,3| 夜夜欢天天干| 91丝袜在线观看| 国产成人91一区二区三区| 91被操| 一起草欧美| 无码国产精品久久久久| 激情专区综合| 日韩乱码Av| 婷婷情色五月天| 久久久久久久久久久久欧美日|