日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

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

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

C#國(guó)密算法庫(kù)拆解:SM2/SM3/SM4實(shí)現(xiàn)與聯(lián)調(diào)避坑 簡(jiǎn)介面向需要在 C#/.NET 項(xiàng)目中落地國(guó)密算法的開(kāi)發(fā)者與學(xué)習(xí)者這套代碼示例圍繞 SM2、SM3、SM4 三種算法給出可運(yùn)行的 WinForm 演示幫助理解密鑰生成、簽名驗(yàn)簽、摘要計(jì)算及分組加解密的調(diào)用方式。壓縮包共 51 個(gè)文件約 5.33MB主體為 cs 源碼、resx 界面資源、dll 依賴庫(kù)與 exe 可執(zhí)行程序并附帶解決方案與項(xiàng)目配置便于在 Visual Studio 中打開(kāi)、調(diào)試和二次改造。內(nèi)容涵蓋算法工具類(lèi)、窗體交互邏輯及 BouncyCastle 加密庫(kù)引用讀者可對(duì)照界面操作觀察各算法的輸入輸出與參數(shù)配置快速梳理國(guó)密功能從界面到核心實(shí)現(xiàn)的代碼路徑。已有 1316 人學(xué)習(xí)下載適合作為 C# 國(guó)密入門(mén)、課程實(shí)驗(yàn)或業(yè)務(wù)模塊預(yù)研的參考樣例。1. 一次驗(yàn)簽失敗的聯(lián)調(diào)這套 C# 國(guó)密算法庫(kù)到底補(bǔ)的是哪個(gè)洞對(duì)接一個(gè)內(nèi)部系統(tǒng)的簽名接口對(duì)方說(shuō)只收國(guó)密算法SM2 簽名加 SM3 摘要報(bào)文用 SM4 加密。很多人第一反應(yīng)是在項(xiàng)目里搜一下有沒(méi)有現(xiàn)成的算法包結(jié)果發(fā)現(xiàn)可用的 C# 國(guó)密算法實(shí)現(xiàn)要么只覆蓋其中一兩種要么把密鑰編碼、密文排列這些細(xì)節(jié)隱藏了起來(lái)等到對(duì)方驗(yàn)簽失敗就無(wú)從查起。這套包含 SM2、SM3、SM4 的 C# 實(shí)現(xiàn)價(jià)值在于把曲線參數(shù)、補(bǔ)位規(guī)則、ZA 值計(jì)算、C1C3C2 排列這些容易被第三方庫(kù)隱藏起來(lái)的部分全部展開(kāi)成可讀代碼。適合正在做國(guó)密改造的后端開(kāi)發(fā)也適合想搞清楚算法內(nèi)部機(jī)理、準(zhǔn)備自己動(dòng)手增加支持的工程師。2. 目錄與運(yùn)行SM2/SM3/SM4 三套算法在工程里怎么分家2.1 三層拆分算法內(nèi)核、編碼適配、調(diào)用入口這類(lèi) C# 國(guó)密庫(kù)的目錄結(jié)構(gòu)通常分成三層這個(gè)劃分方式雖然簡(jiǎn)單但基本不會(huì)出錯(cuò)。算法內(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)核。第一次閱讀源碼時(shí)按這個(gè)順序看比從 Program.cs 往下追要快得多。SmCrypto/ ├── src/ │ ├── SmCrypto.Core/ # 純算法無(wú)外部依賴 │ │ ├── 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 / 無(wú)填充 │ │ ├── Encoding/ │ │ │ ├── Hex.cs # 大小寫(xiě)、帶不帶空格 │ │ │ └── Asn1.cs # DER 序列化給密鑰和簽名用 │ │ └── Utils/ │ │ ├── BigIntegerExtensions.cs# 定長(zhǎng)大端轉(zhuǎn)換、模逆 │ │ └── SecureRandom.cs # 密碼學(xué)安全隨機(jī)數(shù) │ └── SmCrypto.Console/ │ └── Program.cs # 手敲的驗(yàn)證入口 └── tests/ └── SmCrypto.Tests/ # 標(biāo)準(zhǔn)測(cè)試向量 自身往返測(cè)試看這個(gè)結(jié)構(gòu)能發(fā)現(xiàn)一個(gè)細(xì)節(jié)SM2 單獨(dú)占一個(gè)目錄還分了三個(gè)文件。原因很實(shí)在SM2 是橢圓曲線算法點(diǎn)運(yùn)算、曲線參數(shù)、業(yè)務(wù)層的簽名驗(yàn)簽是三件不同的事混在一個(gè)類(lèi)里到后面加密鑰交換或者換曲線就麻煩了。SM3 和 SM4 各自只有一個(gè)主文件是因?yàn)樗鼈兊膶?shí)現(xiàn)相對(duì)獨(dú)立沒(méi)有那么多分支。2.2 目標(biāo)框架與依賴為什么寧可手寫(xiě)也不用系統(tǒng)接口.NET 生態(tài)里做國(guó)密有個(gè)現(xiàn)實(shí)問(wèn)題系統(tǒng)自帶的加密接口在多數(shù)版本上沒(méi)有覆蓋 SM2、SM3、SM4即使新版本在部分平臺(tái)上補(bǔ)了 SM3/SM4Windows 和 Linux 的行為也不完全一致跨平臺(tái)部署很容易遇到問(wèn)題。所以這套實(shí)現(xiàn)選擇純托管代碼零外部依賴System.Numerics.BigInteger就是唯一的大數(shù)工具。目標(biāo)框架怎么選看調(diào)用方。要被老項(xiàng)目引用就多目標(biāo)輸出netstandard2.0加net8.0只做新服務(wù)直接上net8.0省事。真正影響代碼寫(xiě)法的是這三處關(guān)注點(diǎn)netstandard2.0net8.0大數(shù)System.Numerics.BigInteger同上另有TryWriteBytes定長(zhǎng)輸出高性能切片需要System.Memory包原生Spanbyte隨機(jī)數(shù)RNGCryptoServiceProviderRandomNumberGenerator.Fill我一般會(huì)統(tǒng)一寫(xiě)RandomNumberGenerator.Create()拿一個(gè)實(shí)例兩個(gè)框架都能編譯不用寫(xiě)#if。這一點(diǎn)看似無(wú)關(guān)緊要但真正到適配各個(gè)框架版本時(shí)這一點(diǎn)會(huì)節(jié)省很多時(shí)間。提示不要把System.Random用在任何密鑰、k 值、IV 上。它產(chǎn)生的序列可預(yù)測(cè)SM2 的 k 一旦可預(yù)測(cè)私鑰就等價(jià)于公開(kāi)了。2.3 第一次運(yùn)行先把 SM3 的哈希值打印出來(lái)SM2 的調(diào)試成本高因?yàn)樗鼱砍峨S機(jī)數(shù)、點(diǎn)乘、編碼三件事所以第一次運(yùn)行不要碰 SM2先驗(yàn)證 SM3。新建一個(gè)控制臺(tái)項(xiàng)目引用 Core寫(xiě)十行代碼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));跑起來(lái)dotnet run --project src/SmCrypto.Console正常輸出應(yīng)該是66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0這 64 個(gè)十六進(jìn)制字符對(duì)上了說(shuō)明填充邏輯、字節(jié)序、壓縮函數(shù)這三塊沒(méi)問(wèn)題。再補(bǔ)一個(gè)長(zhǎng)度不是 3 的用例驗(yàn)證填充邊界把a(bǔ)bcd重復(fù) 16 次正好 64 字節(jié)會(huì)觸發(fā)多補(bǔ)一整個(gè)分組期望結(jié)果debe9ff92275b8a138604889c18e5a4d6fdb70e5387e5765293dcba39c0c5732這兩個(gè)值都對(duì)SM3 這塊基本可以放心了。SM4 用標(biāo)準(zhǔn)向量key 0123456789abcdeffedcba9876543210、明文與 key 相同單分組加密結(jié)果是681edf34d206965e86b3e94f536e4246同一個(gè)塊再加密一次得到595298c7c6fd271f0402f804c33d3f66加解密往返能對(duì)回去才能說(shuō)明輪密鑰沒(méi)有寫(xiě)反。SM2 不適合這么驗(yàn)證后面第 4 章講怎么用往返測(cè)試加對(duì)方的公鑰做交叉驗(yàn)證。3. SM3 與 SM4從填充到輪函數(shù)兩段能直接抄的 C# 實(shí)現(xiàn)3.1 SM3 的填充與壓縮64 輪里真正在變的是什么SM3 輸出 256 位分組 512 位結(jié)構(gòu)上和常見(jiàn)的哈希算法相近但消息擴(kuò)展和輪函數(shù)里的置換是自己的一套。先看填充這是新手最容易寫(xiě)錯(cuò)的地方private static byte[] Pad(byte[] msg) { long bitLen (long)msg.Length * 8; // 比特長(zhǎng)度用 long 防止大報(bào)文溢出 int padLen 64 - (int)((msg.Length 9) % 64); // 0x80 一字節(jié) 8 字節(jié)長(zhǎng)度 if (padLen 64) padLen 0; // 剛好對(duì)齊時(shí)不再補(bǔ)整塊 byte[] buf new byte[msg.Length 1 padLen 8]; Buffer.BlockCopy(msg, 0, buf, 0, msg.Length); buf[msg.Length] 0x80; // 先補(bǔ)一個(gè) 1后面全 0 for (int i 0; i 8; i) buf[buf.Length - 1 - i] (byte)(bitLen (8 * i)); // 大端寫(xiě)長(zhǎng)度 return buf; }bitLen必須用 64 位整型長(zhǎng)度字段是大端序這兩點(diǎn)在跨語(yǔ)言對(duì)接時(shí)最常出錯(cuò)。padLen那個(gè)if判斷也不能少當(dāng)(msg.Length 9) % 64 0時(shí)會(huì)算出 64如果不處理就會(huì)多補(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 個(gè)字直接讀大端 w[i] ReadBe32(block, offset i * 4); for (int j 16; j 68; j) // 擴(kuò)展到 68 個(gè)字 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ù)說(shuō)明一下v是 8 個(gè) 32 位的初始向量第一塊用固定常量后續(xù)塊用上一塊的輸出Rol(x, n)是 32 位循環(huán)左移n要先% 32否則 C# 的移位運(yùn)算符只取低 5 位Rol(t, j % 32)里的取模不能省。w數(shù)組 68 個(gè)字、w1數(shù)組 64 個(gè)字這兩個(gè)長(zhǎng)度是固定的用List或者動(dòng)態(tài)擴(kuò)容會(huì)讓每塊多做幾次分配壓測(cè)時(shí)差別能看出來(lái)。3.2 SM4 輪函數(shù)一個(gè) T 變換貫穿 32 輪SM4 是分組長(zhǎng)度 128 位、密鑰長(zhǎng)度 128 位的分組密碼加密和解密用同一套輪函數(shù)只是輪密鑰順序反過(guò)來(lái)。它的全部復(fù)雜度都集中在T變換上// 字節(jié)代換把 32 位字按字節(jié)逐個(gè)查 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里。寫(xiě)的時(shí)候容易犯的錯(cuò)是手抄表格抄錯(cuò)一個(gè)字節(jié)結(jié)果只有某些特殊輸入才會(huì)出錯(cuò)極難排查。建議直接從標(biāo)準(zhǔn)文檔復(fù)制然后寫(xiě)一個(gè)單元測(cè)試斷言SBox[0] 0xd6、SBox[255] 0x48用首尾兩個(gè)值做初步校驗(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 是四個(gè)固定常量 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 由公式生成不必手寫(xiě)表 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; } // 加解密共用解密時(shí)把輪密鑰倒著傳進(jìn)來(lái)即可 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)出一個(gè)新字 x0 x1; x1 x2; x2 x3; x3 x4; } // 輸出要反序這一步漏了會(huì)得到完全對(duì)不上的結(jié)果 WriteBe32(output, outOff, x3); WriteBe32(output, outOff 4, x2); WriteBe32(output, outOff 8, x1); WriteBe32(output, outOff 12, x0); }參數(shù)上要注意兩件事。第一rk是 32 個(gè) 32 位輪密鑰加密時(shí)正序解密時(shí)rk.Reverse()即可不需要另寫(xiě)一個(gè)解密函數(shù)。第二最后輸出必須反序x3 x2 x1 x0這是標(biāo)準(zhǔn)里寫(xiě)死的反變換很多人在這卡一下午因?yàn)榧用芙Y(jié)果看著“像那么回事”只是每個(gè)塊都對(duì)不上。3.3 分組模式與填充ECB 之外還得有 CBC 和 PKCS7單分組函數(shù)只是零件實(shí)際報(bào)文長(zhǎng)度很少正好是 16 的倍數(shù)所以要有模式和填充。ECB 實(shí)現(xiàn)最簡(jiǎn)單但同樣的明文塊會(huì)得到同樣的密文塊圖片、表格類(lèi)數(shù)據(jù)一眼就能看出結(jié)構(gòu)業(yè)務(wù)上一般不允許用。CBC 更常見(jiàn)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 個(gè)值為 n 的字節(jié)正好對(duì)齊時(shí)補(bǔ)一整塊 16 個(gè)0x10。這個(gè)“正好對(duì)齊也要補(bǔ)”的規(guī)則是解密時(shí)判斷填充長(zhǎng)度的依據(jù)少補(bǔ)這一塊對(duì)方解出來(lái)的尾巴會(huì)被當(dāng)成數(shù)據(jù)。IV 每次加密都要換新的隨機(jī)值跟著密文一起發(fā)過(guò)去不需要保密但絕不能固定不變否則相同明文前綴的密文前綴也相同。注意CBC 只保證機(jī)密性不保證完整性。要防篡改還得在密文后面附加 SM3 或 SM2 的校驗(yàn)值或者干脆用 SM2 加密會(huì)話密鑰、SM4 加密數(shù)據(jù)的兩段式方案。4. SM2 關(guān)鍵鏈路曲線參數(shù)、ZA 值與密文排列4.1 曲線參數(shù)與密鑰對(duì)先把 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)還帶符號(hào)位而國(guó)密的所有數(shù)據(jù)都是大端無(wú)符號(hào)定長(zhǎng)。// 定長(zhǎng) 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; } // 反過(guò)來(lái)讀的時(shí)候也要聲明無(wú)符號(hào)大端否則最高位為 1 會(huì)變成負(fù)數(shù) internal static BigInteger FromFixed32(byte[] buf, int offset) new BigInteger(new ReadOnlySpanbyte(buf, offset, 32), isUnsigned: true, isBigEndian: true);ToFixed32里那個(gè)補(bǔ)零動(dòng)作不能省。橢圓曲線坐標(biāo)偶爾會(huì)出現(xiàn)高位為 0 的情況概率大約 1/256如果直接ToByteArray輸出會(huì)少一個(gè)字節(jié)長(zhǎng)度變成 31對(duì)方解析直接報(bào)錯(cuò)。這種概率性錯(cuò)誤最難排查本地跑一百次都好上線跑一萬(wàn)次報(bào)一次。密鑰對(duì)生成就是取一個(gè)[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)前先問(wèn)清對(duì)方用哪種或者干脆在庫(kù)里三種都支持讀的時(shí)候看首字節(jié)判斷。4.2 簽名與驗(yàn)簽ZA 值沒(méi)算對(duì)后面全白搭SM2 簽名和很多人熟悉的橢圓曲線簽名差別在于被簽的不是消息的哈希而是ZA || M的哈希。ZA是用戶標(biāo)識(shí)、曲線參數(shù)、公鑰點(diǎn)的哈希摘要作用是把簽名和具體身份綁定起來(lái)。這一步漏了或者用戶 ID 用了默認(rèn)值而對(duì)方用的是自己的驗(yàn)簽 100% 失敗而且失敗信息沒(méi)有任何提示。// 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 的比特長(zhǎng)度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 位大端無(wú)符號(hào)整數(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# 取模會(huì)保留負(fù)號(hào)必須手動(dòng)修正 if (s.IsZero) continue; return (r, s); } }逐段說(shuō)明。ComputeZa里的所有長(zhǎng)度都必須定長(zhǎng) 32 字節(jié)少一位整體就變了所以統(tǒng)一走ToFixed32。默認(rèn)用戶 ID 是 16 字節(jié)的固定字符串很多系統(tǒng)的開(kāi)放接口就是用它但私有協(xié)議經(jīng)常換成自己的 appId這一項(xiàng)必須和對(duì)方確認(rèn)。ModPow(x, n-2, n)是在求模逆因?yàn)閚是素?cái)?shù)費(fèi)馬小定理成立比手寫(xiě)擴(kuò)展歐幾里得快也不用擔(dān)心邊界。s的負(fù)數(shù)處理是 C# 特有的一處。C# 的%運(yùn)算符對(duì)負(fù)數(shù)返回負(fù)值s.Sign 0時(shí)加一次n才能回到[0, n-1]。在 Java 或 Python 里寫(xiě)習(xí)慣的人換到 C# 上很容易忽略這一點(diǎn)結(jié)果只有極少部分簽名是負(fù)數(shù)測(cè)試樣本少的時(shí)候根本發(fā)現(xiàn)不了。驗(yàn)簽就是反過(guò)來(lái)算檢查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)里都還在用所以庫(kù)里一定要留一個(gè)開(kāi)關(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 說(shuō)明 KDF 失效規(guī)范要求重來(lái) 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 的計(jì)數(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) { // 計(jì)數(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; }解密的順序是先按配置把三段拆開(kāi)用C1和自己的私鑰算出共享點(diǎn)(x2, y2)用同樣的 KDF 得到t異或回C2最后重算C3比對(duì)。C3比對(duì)必須用固定時(shí)間比較逐字節(jié)異或累加不要用SequenceEqual提前返回這類(lèi)細(xì)節(jié)在安全審計(jì)時(shí)會(huì)被挑出來(lái)。5. 避坑與排查聯(lián)調(diào)現(xiàn)場(chǎng)最常見(jiàn)的五個(gè)問(wèn)題這一章是整套實(shí)現(xiàn)里最值錢(qián)的部分。算法本身照著標(biāo)準(zhǔn)寫(xiě)就行真正耗時(shí)間的是下面這些表現(xiàn)完全一樣、原因各不相同的問(wèn)題。5.1 驗(yàn)簽一直返回 false但雙方代碼看著都“對(duì)”現(xiàn)象自測(cè)簽名驗(yàn)簽往返完全正常一旦換成對(duì)方給的公鑰就失敗把對(duì)方發(fā)來(lái)的簽名拿去驗(yàn)也失敗兩邊都不報(bào)異常只是布爾值 false。原因九成是 ZA 里的用戶 ID 不一致。默認(rèn) ID 是 16 個(gè)字節(jié)的固定串而對(duì)方可能用了自己的應(yīng)用標(biāo)識(shí)另一個(gè)可能是對(duì)方把ZA || M里的M先做了 Base64 解碼再哈希而你直接對(duì)字符串字節(jié)哈希。解決讓對(duì)方明確給出 ID 的原始字節(jié)不是 Base64不是十六進(jìn)制并且約定M到底是原始報(bào)文還是某種規(guī)范化之后的字符串。確認(rèn)后先用SM3(ZA)單獨(dú)對(duì)比一次把 ZA 的哈希值發(fā)給對(duì)方核對(duì)這比反復(fù)試簽名快得多。ZA 一致了簽名再不對(duì)才是曲線參數(shù)或s負(fù)數(shù)處理的問(wèn)題。5.2 SM4 加密結(jié)果第一塊對(duì)、后面全不對(duì)現(xiàn)象16 字節(jié)以內(nèi)的短報(bào)文加密結(jié)果和對(duì)方一致一旦超過(guò) 16 字節(jié)第一塊密文相同第二塊開(kāi)始全亂。原因CBC 的鏈?zhǔn)疆惢驅(qū)戝e(cuò)了。常見(jiàn)兩種寫(xiě)法錯(cuò)誤一是用明文塊而不是密文塊作為下一輪的prev二是循環(huán)里prev更新寫(xiě)在異或之前。解決把Buffer.BlockCopy(cipher, i, prev, 0, 16)放在CryptBlock之后、下一輪異或之前中間不要有別的賦值。驗(yàn)證方法是拿 32 字節(jié)的固定輸入手工用第一塊密文異或第二塊明文看結(jié)果是不是和內(nèi)部中間值一致。5.3 SM2 加密偶發(fā)“密文長(zhǎng)度不對(duì)”重啟又好了現(xiàn)象接口大部分時(shí)間正常偶爾報(bào)密文長(zhǎng)度異常日志里能看到長(zhǎng)度是 96 或 98 而期望 97 或 112 之類(lèi)的值。原因BigInteger.ToByteArray()輸出的長(zhǎng)度不固定。坐標(biāo)高位為 0 時(shí)會(huì)少一個(gè)字節(jié)如果沒(méi)用isUnsigned: true最高位為 1 時(shí)還會(huì)多出一個(gè)0x00符號(hào)字節(jié)。兩種都會(huì)讓C1的長(zhǎng)度在 64、65、66 之間抖。解決所有點(diǎn)坐標(biāo)輸出統(tǒng)一走定長(zhǎng) 32 字節(jié)的轉(zhuǎn)換函數(shù)不要直接調(diào)ToByteArray。再在解碼側(cè)加一層防御讀到C1時(shí)按首字節(jié)判斷格式04未壓縮、02/03壓縮、其余按裸坐標(biāo)補(bǔ)齊別硬編碼固定偏移量。5.4 大量數(shù)據(jù)加密時(shí) CPU 打滿單條報(bào)文要幾十毫秒現(xiàn)象壓測(cè)時(shí) SM4 的吞吐還能接受但整個(gè)接口 RT 很高火焰圖顯示時(shí)間集中在 SM2 的標(biāo)量乘上。原因一次 SM2 加解密要做兩次點(diǎn)乘kG和kP樸素的雙倍點(diǎn)算法每次都做模逆模逆是這里面最貴的一步另外BigInteger是不可變類(lèi)型循環(huán)里頻繁產(chǎn)生中間對(duì)象GC 壓力也上來(lái)了。解決把點(diǎn)運(yùn)算改到雅可比坐標(biāo)下做只在最后一步轉(zhuǎn)回仿射坐標(biāo)一次點(diǎn)乘的模逆從幾百次降到 1 次kG因?yàn)榛c(diǎn)固定可以預(yù)計(jì)算一張表做固定窗口加速。業(yè)務(wù)側(cè)更好的做法是不用 SM2 直接加密大報(bào)文改成 SM2 加密一把隨機(jī)的 SM4 密鑰數(shù)據(jù)走 SM4性能差距是數(shù)量級(jí)的。5.5 升級(jí)框架版本后簽名結(jié)果變了現(xiàn)象從舊框架遷到新框架同樣的私鑰、同樣的報(bào)文對(duì)方突然驗(yàn)簽失敗而自測(cè)往返還是通的。原因隨機(jī)數(shù)來(lái)源換掉了或者BigInteger的行為在新運(yùn)行時(shí)上有細(xì)微差異。更隱蔽的一種是把k寫(xiě)成了固定值做“可復(fù)現(xiàn)測(cè)試”上線忘了改回去兩次簽名用了同一個(gè)k從本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲熟妇一,二,三期| 男人的天堂在线有码| 九九九九88| 无人区高清电影免费观看一区二区三 www.qmcai2.com | 爱av免费| 97资源站久久| 精品一区二区成人| 欧美亚洲厕所精品偷拍91| 日韩黄片影院| av在线人气| 亚洲欧美一区二区网址| 精品人妻一区二区三区-国产| 日韩欧视频| 成人日本视频人妻在线| 日韩精品 欧美激情| 国产精品久久久久久久黄无码| 国产熟妇一区二区| 精品国产人成在线| 日日日日做夜夜夜夜做无码97| 岛国大片在线观看网站入口| 久久夜精品一区二区三区| 国产亚洲色停停久久99精品91| 综合网欧美在线| 亚州一区二区| 第四色色综合91| 亚洲精品国语在线播放| 国产不卡中文字幕免费avi| 久久精品福利影院| 欧美综合在线91| 美国一区二区三区视频| 亚洲不卡一| 不卡啪啪视频| 伊人加勒比| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 色图四区| 精品夜夜澡人妻无码| 超碰91在线| 少妇与黑人高潮在线| 中文字幕日韩专区精品系列| 日本精品一区二区三| 综合激情五月丁香| 色色网91| 97久久久网站| 亚洲天堂另类小说男人| 日操粉逼逼| 亚洲 欧美 日韩另类 麻豆| 色色激情五月天| 亚洲啪啪综合?v一区综合精品区| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 一区二区乱码福利| 欧美亚洲韩国视频十五区| 色色婷婷丁香| 色在线综合| 经典丝袜一区| 盗摄 精品 另类 一区| 九热中文字幕| 污电影在线观看| 亚洲色啪| 在线a v| 蜜臀无码一区二区| 又摸又舔在线观看网站| 国产在线精品偷| 91在线视频国产网站| 熟妇高潮精品一区二区三区下载| 色性综合| 综合网色| 三级激情网站| 啊啊啊啊啊啊在线观看| 色爽——AV| 精品精品精品| 日韩人妻播放| 狠狠操狠狠操操| 美国三级日本三级久久99| 操狠狠| 少妇啪啪自拍| 性猛交| 欧美洲精品一级| 久久啊哟| 婷婷五月天小说| 免费的黄片有限公司| 欧美 亚洲精品首页| 国产精品色哟哟| 婷婷尹人大香蕉免费| 久久国产乱子伦精品免费女人| 躁躁躁日日躁2020| 91日日夜夜| 天堂国产AV| 五月激情在线| 国产成人自拍视频在线| 蜜乳Av成人片网站| 国产呦精品系列在线观看| 性高潮久久久久久久久久久| 男人的天堂无码| 天美一二三在线观看Av| 韩国久久97| 不卡免费av在线播放| 少妇一区二区三区高速| 无码精品久久| 性色av大全| 97超碰美女| 丰满欧美放荡少妇在线| 亚洲天堂日本| 久久鲁夜| 粉嫩AV一区夜夜嗨| 一二三四视频在线社区中文字幕| 色爱欲亚洲| 97超碰美国| 日韩性爱播放| 久久伊人五月天| 欧美大香蕉专区网| 久久国产精品熟女人妻| 亚洲熟女乱熟乱熟妇综合网二区| 成人av动漫在线观看| 日韩天天本| 67914在线精品观看| 色综合久久88色综合久久天天| 国产无码精品无码| 亚洲影院无码在线| 男女日B国产| 日韩av无码网站| 99色网| AV天堂因数| 熟妇女伦乱视频视频| 无毛精品| 国产AB视频| 男人天堂网手机版婷婷| 中文字幕精品专区搜索结果91| 中文字幕AV片| 蜜臀久久99精品久久久久久-DVD原版全| 黑人精品XXX一区一二区| 九九九九一区| 91天美免费| 91日韩网站| 国产91丝袜 在线播放| 97视频播放| 日本不卡中文| 国产精品午夜AV完会免费| 精品少妇人妻| 最新国产精品| 热久日综合| 中文字幕老熟妇黄色视频| 狠狠色婷婷777| 三四中文字幕| 2021国产成人精品久久| 2018天天日天天日| 凹凸视频在线观看伊人| 99精品久久| 色综合天天| 爽爽歪在线视频| 免费的av网| 美骚妇av高清在线| 色偷偷综合91久久噜噜| 国产又黄又粗又猛大片| 色就色综合| 国产剧情AV不卡在线观看| 亚洲最大无码中文字幕网站| 2001天天操| 亚州乱码中文字幕综合久久久| 熟女欧美日韩综合婷婷| 舔人妻中文免费视频| 97碰碰色| 日韩性爱再线视频| 欧美日韩99精品麻豆传媒| 中文字幕日韩精品一区二区三区| 色悠久久久av| 亚洲美女av无码| 美国人人操人人操| 这里只有精品视频| 亚洲老司机123专区| 97欧美色综合| 国产高清成人免费视频| 睡产熟女乱伦| 日韩紧密久久| 桑老女人九区| 欧美18 在线观看| 色官网在线| 精品久久久九九九孕妇| 久久有码视频| 人人艹亚洲| 丁香五月激情五月| 精品久久9| 九九九九九九视频免费| 亚洲黄色a级片| 久久久久9久久久久| 老色鬼成人精品视频下载大在线观看| 国产免费一区2区3区| 国产大学生口爆吞精合集| 天综合网| 91天天爽| 国产精品爽爽v| 思思热在线| 少妇第一页| 久久伊人最新网址视频| 国产亚洲精品自在线亚洲情侣| 抽插爽| 欧美性高潮在线| 人干人人人操人人摸| 欧美日日网| 国产91丝袜 在线播放| 國產尤物AV尤物在線觀看| 嫩草 人人网精品| 99re黄| 欧美日韩国产中文精品字幕自在自线| 激情露脸爱| 亚州综合在线| 99久久99久久综合| 日本免费一区二区不卡| 色色福利| 色偷综合| 能在线播放的国产三级| 成人天天看站长推荐| 五十路三区在线| 免费人成?大片在线播放| 操人妻逼91| 九九九九热| 色九九九九久| 96久久久久久久| 日韩,欧美,中文在线| 久久国产对白激情浪潮| 无遮挡男女激烈动态图| 大香蕉伊利av| 91春色| 综合熟女| 久久精品国产Aⅴ| 日韩一级二级| 欧美色图20p| 亚洲色图超碰在线| 久操精品| 少妇国产不卡| 最新日日夜夜天天干干| 99九九久久| 亚洲黄色视频在线观看视频| 加勒比海成人视频网| 美女操逼A A| 丝袜综合| 91在线视频免费播放| 91在线/欧洲| 亚洲人妻在线一区| 91女优在线观看| 欧美不卡二区| 白嫩妹子国产骚| 丁香婷婷九月| av网站免费看| 欧美日韩婷婷中文| 亚洲无码久久久久久久| 午夜福利合集| 精品久久青青草| 懂色Av| 日本加靬比网站发布页| 成人麻豆av电影网站| 亚洲亚洲亚洲天堂天堂| 少妇超碰在线| 五月婷网站| 神马九九九| 亚洲激情综合| AV一起草在线| 人乳av| 婷婷色综合| 中文字幕在线观看网址| 天天插天天操天天摸天天射天天看| 国产久久av| 毛片99-全集电影手机免费观看完整-B029AV | 久久欧美按摩999| 欧洲特黄毛片免费看欧洲毛片| 人妻密肉在线观看| 99re公开精品免费视频| 高清无码学生妹高潮| 日日狠狠久久偷偷色综合免费| 日韩熟女三十乱伦| 一区二区亚州激情久婷婷欧美| 国产成人网址| 超碰97人人cao| 97久久天天综合色天天综合色电影| 久久99网站| 中文乱码字字幕在线第5页| 国产精品高潮久久AV| 中文操嬖片。| 99精品国产户外露出| 少妇精品久久久| 伊人激情| 欧美操逼熟女| 神马久久午夜| 久草精品一区 | 日本 情色 1区2区3区| 999久久久精品国产| 国产一区二区在线播放量| 天天情欲宗合网| 国产精品对白内射| 日韩AC| 国产二区三区免费视频| 国模不卡| 国产精品农村妇女精品| 高清不卡国产| 熟女在线视频| 久热9| 欧美国产伊人久久久久| 七月丁香婷婷| 97视频免费在线| 91暧暧| 天天日天天干天天整| 3PAV乱伦视频| 欧美激情精品久久久久久| 人人爽人人精品乱人伦AV| 欧美性天天影视| 国产aⅴ无码片毛片一级网站| 国内一区二区免费| 欧美日日人人天天| 日韩av电影网站| 97久久久精品| 97精品国产97久久久久久户外免费| 网页导航五月天免费一二三区| 亚洲本色精品一区二区久久| 欧美加勒比| 天天综合网视频91| 99精品丰满人妻无码| 加勒比AV网| 东北夫妻性偷拍| 99热伊人| 色香蕉影院| 狠狠激情综合狠狠操中文字幕| 三级激情网站| 啪啪视频亚洲第一| 老外又粗又长一晚做五次| 国内伊人久久久久久网站视频| 99热线麻豆| 亚洲伊人久久精品影院| 久草男人天堂| 久久精品老司| 精品十三区| 91红杏| 九一亚洲国产免费| 久久一二区四| 中文字幕片| 丝袜综合色图| WWW.加勒比人妻一区不卡.com| 中文字幕视频2区| 北条麻妃99精品青青久久| 男人天堂久久精品| 情色日播放AV| 中文一区二区婷婷视频| 日日天天久久啊啊aaa| 欧美大香蕉在线观看| 奸色色 男人天堂 天天射| 欧美久久九九| 亚洲综合有玛| 蜜臀99999| 神马久久久久久久久久久久| 免费亚洲国产精品久久一区| 国产亚热在线久久| 中文字幕人妻丝袜乱一区三区| 青青久草| 蜜臀久久99精品久久久电影| 黄片qw| 日韩综合成人免费视频| 精品人妻一区| 人人透人人操| 久久99国产综合精品女同| 天天看片天天爽| 欧美亚洲丝袜美女电影| 超碰碰激情97+久| 大香蕉色欲AV| 日韩在线电影| 内射老妇BBWX0C0CK| 亚洲成人性爱网站在线播放| 亚洲一卡2卡3卡4卡乱码网站| 3P乱轮视频| 欧美在线播放aaaa| 日本女厕偷拍| 色哟哟av| 啪啪视频免费在线观看| 天天干干天天干干| 久久9视频| 极品丝袜无码| 黑人精品久久97| 啊啊啊慢点| TS人妖另类精品视频系列| 性爱视频免费网址| 国产高潮AA片免费看| 久超碰在| 超碰欧美在线欧美| 97亚洲中文| 内射夫妻三片| 久精品无码av一区二免费国产在线观看 | 久久久婷| 狠狠亚洲| 色五月AV| 国产精品无码论坛| 好湿好紧好爽 视频| 97超碰这里只有精品| 精品美女少妇一区二区| 青青操综合网| 观看免费区二区三区二| 在线洲亚线| 久久国产在线一区二区| 黄片www.| 国产欧美日韩臀| 欧洲亚洲人妻无码高清久久三区四区| 人人干黄色| 成人av免费观看| 大香蕉色网| 青青草AV色| 精品人妻视频入口| 91chinese在线| 密臀视频一区二区三区| 成人怡红院| 国产强上视频在线观看| 色眯眯射| 激情欧美97| 一区二区三区免费岛国片| 国产精品情侣啪啪| 久久中文字幕在线观看| 全球成人中文在线| 1204金沙人妻懂旧版免费| 精品人妻av区天天看片| 国产av美女被艹的乱叫| 欧亚久久偷拍视频| 精品一级毛片在线观看| 狠狠色综合网| 大逼色网站| 国产操逼逼网| 无毛精品| 欧美日韩国产中文精品字幕自在自线| 蜜桃视频一区二区三区 | 超碰97久久| 制服乱伦| 搡老熟女国产1000部| 欧美一级AAAAAAA| 曰韩精品九九无码| 91国产丝袜白虎| 久久精品国产亚洲AV高级北京| 久久超碰免费的| 五十路熟女人妻一区二区在线观看 | 青青青草伊人精品| 色在线亚洲视频www| 江都AV在线| 久久九色| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 亚州91| 中文字幕 人妻不满 在线视频| 亚洲se电影| 日韩无码黄色片| 操逼精品视频| ji熟女.com| 99热导航| 强奸乱伦大香蕉| 欧美 熟女 日韩| 国产精品原创巨作?v网站| 99久久无色码| 蜜臀AV秘一区翔田千里| 日日黄色三级网站| 成人免费看吃奶视频网站| 欧美性色综合网| 人妻偷拍一区二区三区| 欧美人妻色| 九九热久久99精品re| 2019天天操天天爽天天拍| 日韩欧美亚欧在线视频| 亚洲五区熟女| 国产亚洲欧美每日在线| 成人十八禁日韩欧美一二三| 中文字幕91页| 亚洲日本大香蕉1| www.色婷婷.com| 久久久久夜夜夜夜| 97国产亚洲中文在线| 日韩人妻有码免费视频| 97超碰超欧美。| 婷婷深爱五月| 香蕉99秘 一区精品蜜桃臀| 少妇二级| 操操吧亚洲乱伦视频| 夜夜 中文视频rt| 91高清无码下载| 91狠狠狠| 一区黄二区黄| 中文字幕一区二区韩| 爱丝福利| 天美国产三级传媒| 99在线免费公开视频| 国产精品国产| 男人的天堂2010| 人妻另类 专区 欧美 制服| 97干天天| 天美麻花大全视频| 国产精品美女久久久久久网站| 亚洲色图国产另类| 2024人人操人人摸| 欧美成人免费在线观看| 欧美第一页| 美女黄色一级A视频| 熟女激情综合网| 超碰 国产熟女精品一区| 欧美精品第3页| 国产v片在线免费观看| 伊人色综合欧美| 六月丁香五月婷婷| 曰韩操B| 精品人妻一区二区三区视频在线| 精久久久91| 精品-91人妻子系列| 一级性爱视频免费观看| 色综合 加勒比| 宅男91视频在线播放| 日韩欧美国产一区二区三区四区| 亚洲人妻日日日| 歐美性天天| 日本免费中文一区二区三区四区 | 午夜福利成人免费视频| 色在线视频导航| 呻吟 欧美 日本 中出| 色综合中文字幕不卡| 亚洲一区二区三区AV无码| 天堂v无码免费视频| 99最新日韩偷拍视频| 毛片17S| 色色操| 日本精品无码三级网站| 久久产精品一区二区三区电影| 中文字幕精品三级久久久| 任我爽视频在线观看| 大香蕉乱伦视频网| 日本一区二区三区四区免费观看| A级片日韩欧美国产欧美视频精选观看| 一个国产在线综合网站| 免费亚洲国产精品久久一区| 国产偷拍网站| 国产精品一区二区密臀| 欧美一品道| 自拍欧美| 蜜桃中文字日产乱幕4区| 超碰91在线| 久久毛卡| 99视频这有这里有精品| 亚州欧美色图| 97碰碰色| 精品无码少妇| 人妻喷水| 久久久性少妇| 精人妻无码一区二区三区伊人直播| 亚洲国产剧情少妇激情| 欧美视频在线第3页| 久久九九综合| 精品国产片亚洲一区| 欧美日韩 强奸乱伦| 韩三级a视频在线观看| 亚洲综合电影| 啊啊啊啊啊啊好多水| 大粗鳼巴久久久久| 99999国产| 国产97色在线 | 亚洲| 欧美在线干| 99热日| 99黄页网站| laoshunv91| 性性欧美| 青青草久草AV| 91在线国产后入风骚翘臀美女素人| 精品中文日韩字幕视频| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 午夜精品人妻二区三区| 91 综合 色| 激情人妻另类| 很狠操| 伊人久日| 91美| 老熟女网站| 丁香九月婷婷| 日本αv| 手机午夜电影神马久久| 超碰国产精品无码| 亚洲精品天堂久久A∨51成人漫| 亚洲乱伦图片视频| 日韩人妻 中文字幕| 亚洲砖码砖专无区2023| 91色婷婷综合久久中文字幕二区| 99视频内射三四| 国产欧美日韩在线观看麻豆传媒公司| 啊好大好舒服| 9精品在线| 另类专区加勒比| 天堂亚洲精品| 男人的天堂 在线一区| 亚洲成人黄色在线观看| 亚洲国产奇米影视久久| 爽 好舒服 无码刺激久久| 超碰91在线| 亚洲有码 视频一区| 久久久久9久久久久| 使劲用力艹少妇视频一区二区 | 91狠狠综| 国内偷自视频区视频综合| 五月天丁香婷婷综合网站| 日本片日本片祼观看网站在线看中文版网页在线看 | 懂色av色欲av蜜臀av| 亚洲国产午夜真人一级片中文字幕精品黄网站 | 99热97| 中文字幕久久精视频久久大全| 国产精品国产| 中文字幕97| 伊人久久综合精品欧美| 色综合五月天| 欧美大战久久久伊人| 全国男人天堂网| 日韩性爱啪啪视频| 手机在线看片免费人成视频| 台湾佬激情综合| 91久久久老司机| 欧美在线天堂| 日韩精品人妻一| 人妻加勒比东京热| 天综合网欧美| 91在线视频国产网站| 欧美成人性爱视频免费观看| 你操综合| 久久久月天| 香蕉黄色一级视频| 99久久婷婷国产综合精品草原| 岛国人妻少妇av在线观看| 安微少妇操BBB| 亚洲一区中文精品| 91综合在线| AV丝袜东京热| 午夜性生活av免费在线看| 欧美日韩国内不卡| 亚洲少妇在线影音| 超碰色综合| 日韩精品中文字幕二区| 热久日综合| 97视频在线| 乱色视频中文字幕| 国产第11页| 国产成人91一区二区三区| 99爱爱| 黄色片G G G| 2018天天日天天日| 日本有码久久| 九九九九热只有精品| 久久婷婷成人综合色怡春院| 亚洲狠狠入| 精品视频在线观看| 99热最新网址| 高清无码在线播放网站| 91欧美网| 偷拍综合亚洲| 图色综合网| 五月丁香婷婷综合网| 天天干天天燥| 亚洲伊人成综合成人网| 欧美在线|亚洲| 热久久国产精品视频大陆精品| www.99热| 九九热九九| 家庭乱伦网站国产| 秋霞网—男女啪啪亚洲免费体验区 | 国产精品嫩草影院免费| AⅤ片水多多| 97天天| 日日躁天天躁狠狠躁| 色网综合网| 久久曰曰| 爱爱动态试试看6 0秒| 麻豆天美久久91| 美女黄色一级A视频| www.色操逼| 日韩A优精品在线观看| 99这里只有精品国产| 日韩一级欧美一级国产一级台湾 | 99精品无码| 欧美激情精品久久久| 久久伦理视频久久大香蕉视频| 桃色六月天| 精品v1区| 激情图片亚洲色图| 9 1果冻精品视频| 人妻少妇久久| 亚洲在钱| 玖玖大干人妻| 97欧美资源| 91狠狠综合久久| 老熟妇一区二区三区| 久久仑合| 亚洲诱惑| 精品国产久久乱码| 99re在线视频这里只有精品| 91热色| 美女天天干| 久久精品区| 日本道不卡| 亚洲中文字幕在现观看| 久久这里只精品免费福利| 欧美呦呦性爱| 人人摸人人添人人操 | 中文字幕精品探花视频| 久久精品国产精品一区| 99视频这有这里有精品| 中文字幕一区电影在线观看| 91精品人妻电影| 日韩精品一区二区三区色欲| 99热精品在线播放| 大香蕉在线视频15| 98精品国产乱码久久久久久| 亚洲欧美啪啪| 欧美96精品在线| 视频国产成人精品日本亚洲18| 国产传媒午夜理伦精品| 国产成人免费观看在线视频| 五月婷婷六月激情| 好吊色一区| 国产精品九九| 91成人无码| 1级午夜影院费免区| 国产剧情AV不卡在线观看| 欧美性爱五月天| 99久久久无码| 91美女視頻| 久久9精品| 岛国1区2区3区在线观看| 亚洲精品第一| 久久国产精品91| 在线亚洲丝袜视频网站| 日日摸日日碰夜夜爽视频| 久久国产在线一区二区| 91成人在线免费视频| 啊啊啊不要好疼视频| 97色色,97综合| 夜夜嗨一区二区三区直播内容| 激情天天视频| 五月丁香激情综合| 丰满精品人妻少妇久久字幕| 欧美男人的天堂| 18啪啪手机免费性爱| 激情五月婷婷综合| 污污污8888| 男人综合网| 国产aⅴ无码片毛片一级网站| 熟妇在线视频一区二区| 999熟女精品| 思思热在线视频免费| 久9视频| 国产一区二区久久| 91久久久亚洲| 狠狠综合网| 久久久久久久9最新免费视频观看| 日日爱99| 久热伊人| 精品人妻伦一区二区三区久久| 中文字幕一区二区视频在线观看 | 免费啪啪av| 国产精品天美传媒| 欧美97av| 久久婷婷综合国际产色怕| 欧美精品双插| 国产精品人妻免费精品| 亚洲成人在线播放| 91蜜桃传媒精品久久久一区二区| 九月激情婷婷| 韩国女主播青草在线| 国产农村妇女精品| 天天干少妇| 亚洲色婷婷综合久久久久中文| 艹少妇网站| 亚洲黄a三级三级三级看三级| 国产精品点击进入在线影院高清| 99热66| 久久老熟女| 久久婷婷亚洲| 老鸭窝成人| 欧美性爱系列| 99热99re6国产在线播放| 中文字幕日韩人妻视频一区二区三区| 五月天综合网| 色黄污美女啪啪啪免费网站| 精品美女在线视频| 啪啪性爱免费视频| 性色高清在线| 日韩一级性爱无码| 亚洲妇色| 国产又色又粗又黄又爽| 91麻豆天美传媒HD| 最新国内自拍av免费| 91天美传媒精品| 亚洲国产av中文字幕久久 | 国产免费一区二区三区最新不卡| 夜夜欧美| oumeisetu综合| 激情色图| 天天看特黄的免费网站| 日本三级A片网站com| 亚洲精美粉嫩嫩泬在线观看 | 超碰91在线| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 超碰九色| 美女黄站| 日日干夜夜操视频h| 性暴力欧美猛交在线直播| 欧美少妇色综合| 日韩欧美字幕亚洲一区二区| 亚洲天在线| 久久黄黄| 老熟女搡BBBB搡BBBB视频| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 伊人精品久久网站| 天天综合网在线| 秋霞网—男女啪啪亚洲免费体验区| 日韩啪啪啪视频| 中文字幕一区二区韩| 日韩欧美蜜桃精品久久中文字幕久久| 天天天天天天天天天天干美女| 欧亚韩国999| 亚州情色j区| 99久久精品无码一区二区毛片免费| 亚洲激情色片| 国产精选三级在线观看| 97干97色| 国产青青美女玩逼视频| 一区二区三区视频| 亚洲一区二区三区春色| 国产情色在线| 天天操狠狠日夜夜干超碰撸com视频在线观看 | 久热一区二区| 日本好吊色视频| 日韩三级视频一区二区三区| 自拍偷拍国产欧美日韩韩| 伊人午夜福利视频| 国产不卡片| 天天做日日做天天欢。| 啊啊嗯嗯好爽| 综合激情一一91| 久久国产三区| 日韩人妻 中文字幕| 熟女人妻一区二区三区| 国产精品久久久九九九| 日韩有码一区三区| 性开放中文AV高清无码免费看| 777超碰| 国桃视频产巨乳精品一区二区在线| 国产精品色色| 91操人| 日本操逼aaaaa| 东京热,男人的天堂| 骚熟女吞| 大香蕉免| 狠狠色综合网| 熟女色综合久久| 中文字幕高清精品一区| 国产97免费视频| 粉嫩久久久极品| 樱花草社区www中国| 欧美色图天堂在线| 操逼网免费无码视频| 日本1区2区不卡视频| 欧成人精品H无码| 少妇激情AV| 日韩啪啪啪视频| 国产九九久久久精品| 人人爱操| 美女黄频a美女大全免费皮| 乱伦一区二区三区‘| 插入逼91| 91天美| 青草地一本线一区二区三区| 欧洲大香蕉| 欧美日韩亚洲天堂网| 国产免费大片| 少妇二级| 成人情色一区二区| 亚洲日韩精品在线播放| 网页导航五月天免费一二三区 | 久久久999国产精品| 欧美色图人妻| 婷婷15月天青娱乐| 亚洲欧洲无码97久久精品| 欧美色九九九| 色性荡荡荡荡视频| 91爱综合| 青青草在线成人视频| 五月婷婷深深爱| 狠狠色一区二区中文字幕| 成人三级片无码| 99久久精品无码一区二区| 日本精品网站在线中文| 日本高清免费一本视频在线观看| 热99这里有精品综合久久 | 天天日日舔舔| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 欧美性高潮| 亚洲图片欧美偷拍| 亚洲黄色AV电影| 成人国产二区三区在线,男女精品。| 情色大香蕉| 日日夜夜骑| 欧美 亚洲 在线| 少妇综合网| 天天做天天爱夜夜爽毛片试看| 欧美性爽xyxOOOO| 中国AV美女| www.av在线视频| 国产偷拍自拍在线视频| 精品亚洲国产成人AV制服丝袜| 国产在线精品偷| 97色色网| 中文字幕在线观看第二页| 97人人爱人人做人人乐| 美女诱惑在线一区| 日本国产二线女色| 伊人91| a片自拍直播视频| 国产一在线观看| 插欧洲美女欧美精品| 色爱综合网| 97大色网| 91熟女视频网| 九九九九热| 欧美色视频在线| 日本日逼视频网| 澳门成人网站久国产日韩| 国产白丝在线| 大粗鳼巴久久久久| 大屁股人妻女教师撅着屁股| 亚洲啪啪视频一区二区| 国产精品色色| 天堂在线一区二区| 亚洲国产97在线精品一区| 探花精品 一区二区| 人妻少妇被猛烈进入中| www激情| 午夜天堂精品久久| 国内精品久9| 国产又黄又爽| 欧美自拍偷拍免费观看| 男人的天堂2010| 久久久久78| 久久人妻熟女一区二区| 久久久久久久伊人精品| 五月婷婷无码| 97色色,97综合| 欧美美女视频| 国产美女mm131爽爽爽爽| 超碰人人乐97| 欧美性视频二区三区| 百度百度日本操逼| 一区二区三区激情在线观看| 国产传媒日本欧美专区| 人妻熟女一区二区三区视频| 91亚洲色人| 伊人成人中文字幕久久网| 欧美日韩另类字幕中文| 久久久久国产精品久久久| 人人操,操人人| 国产精品久久久久绯色| 欧美同性恋 的搜索结果 - 91n| 国产强奸91| 亚码激情| 日本一线产区和二线产区伦理片| 高潮的A片激情扒开一区| 亚洲熟妇极品| 欧美日韩人妻精品一区二区三区| 美女熟妇色| 91九久| JuliaAnnXXX888| 国产区性爱在线视频秋霞豆| 殴美日韩m| 91丝袜美女视频| 精品超碰国产| 天天综合麻豆视频| 国产a片操逼| 亚洲AV资源| 97超碰超碰| 欧洲色色| 国产精品一区二区三区在线| 久久久久久久国产a∨| 搞中出视频在线观看| 另类图片欧美激情综合| 六六久久日韩不卡| 超碰97伊人| 曰韩av中文字幕专区| 97jingpin| 日韩 欧美 视频 在线 一区| 日本蜜桃| 亚洲免费成人在线高清无码视频| 国产精品久久发布| 91成人18| 91人妻超碰| 蜜臀久久99精品久久久电影| 国产精品麻豆成人AV艾秋| 日日夜夜骑| 久久伊人大香蕉| 91女色| 一区二区三区四区色图| 9丨久久九九九| 色综合五月天| 国产传媒av天美传媒在线| 中文字幕高清20页视频| 综合久久9| 天天日老熟妇| 五月亭亭六月丁香| 夜夜高潮夜夜爽高清视频一 | 污污汅18禁网站在线永久免费观看 | 国产亚洲精品av一区| 激情黄色五月天| 中国国国产一级特黄毛片| 中文字幕免费看| 婷婷91| 好爽视频在线观看视频| 综精品久久久aaaa| 老外又粗又长一晚做五次| 国产肏屁眼视频| 国产www色在线观看| 加勒比av网| 婷婷五月天丁香| 中文字幕97| 丝袜美腿校园春色| 亚洲最大的综合性av| 暴力av在线| 丝袜AV一二三区| 亚洲欧洲日本精品中文a∨| 九九九九九九九九九五码| 国产精品久久久久久无码红治院| 欧美天天在线| 中文字幕 码 自拍 视频 区| 蜜桃狠狠色伊人亚洲综合网站| 婷婷色香| JIZZJIZZ国产精品喷水| 天天天干977| 成人女人国产| 久久久精品无码亚免费| 国产欧美另类久久久精品课程| 国产怡红院| 亚洲五码一区二区三区| 日本免费人成视频播放120秒| 天美传媒在线一区| 俺去俺来也在线www| 色与欲影视| 久久精品老司| 影音先锋国产精品| 翔田千里AV无码秘 三区| 91日产欧美| 另类天堂| 性爱综合一区二区| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 国产67194| 日韩熟女三十乱伦| 夜夜夜夜爽| 蜜色网色哟哟| 1禁看欧美黄片免费看| 天天网综合| 亚洲精品 欧美精品| 五月天偷拍| ji熟女.com| 久久精品店| 国产成人精品一区| 久久久噜噜噜久久久| 福利在线黄片| 日韩AV无码网站| 精品少妇99| 噜噜噜亚洲精品| 天天肏美女| 日欧操屄视频| 91亚洲色人| 99999精品| 久久久久久久久久久精| 欧美性,色九九| 黄污污污污| 操比国产| 午夜福利av电影在线| 亚洲色图欧美色图另类图片| 啊啊啊啊在线播放| 懂色AV中文| 91人人爽人人爽| www.超碰在线| 亚洲欧洲精品视频发布| 91精品人妻偷情| 日韩啪啪视频| 素人伊尹大香蕉免费下载视频| 久久久久久9999| 人人澡人人爽人人精品| 大香蕉久久| 婷婷亚洲五月***久久| 国产又黄又爽又刺激久久久久久| 最近二区三区视频大全| 丝袜美腿操av| 少妇特黄一区二区三区| 久久m| 欧美综合加勒比在线| 人妻少妇精品一区二区三区| 3p国产欧美99热| 午夜无码精品免费看性色| 素人一区二区三区日韩| 午夜啪| 亚洲欧美日韩中文播放| 999久久久国产精品| 国产精品午夜福利| 99精品在线| 999熟女精品| 超碰在97| 色偷偷人人玩人人舔人人操人人摸人人爽| 91九九九小逼| 日本999精品视频| AV老汉| 9 7超碰在线免费观看| 成人熟女视频一区二区三区| 日韩性色b| http://qxhbdz.com| 天天影视色香色欲| 国模限制级电影| 1024久久高清视频| 91天天日| 91在线限制级| 超碰人妻久久人妻中文97| 国产精品久久久久无码Av网曝门| 久久久九九网站| 強姦亂倫a| 亚洲中文sv| 日本国产二线女色| 久久久久久少妇| 久久9999 | 国产999精品久久久久久| 婷婷丁香五月综合| 婷婷丁香五月综合| 婷婷久草一区二区三区| 国产人妻精品久久久一区二区三区 | 亚洲天堂中文字| 国产99久久99热这里只有精品15| 日韩午夜精品一区二区三区电影| 人人操人人摸人| 婷婷久久综合久| 日韩97视频!在线| 国厂麻豆77q4| 2020中文字幕在线| 加勒比综合88| 无遮挡男女激烈动态图| 国产女同视频在线播放| 天天碰操中国年青熟妇| 91在线精品一区二区三区| A片大香蕉在线| 女人被男人桶爽视频网站| 日韩乱伦视频| 深爱五月天| 另类av天堂| 天天热精品| 丰满少妇一区二区三区免费看| 日本伦乱九九九综合| 人妻少妇被猛烈进入中| 强免费黄色网址| 亚洲国产欧美日韩人妻日中文| 天天综合香 ld视频| 亚洲加勒比色图| 亚洲欧美小说| 新久久AV| 激情综合五| 亚洲综合影片| 日本久久久久久久久久| 亚洲国产精品久久AV| 国产无马视频| 天天摸,夜夜摸| 色综合99999| 免费国产视频| 丁香六月东京热| 中日无幕一二三四区| 国产风韵犹存熟妇三区|