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

ARTICLE DETAIL

資訊詳情

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

前端加密實戰(zhàn)指南:Web Crypto API、AES-GCM與密鑰管理

前端加密實戰(zhàn)指南:Web Crypto API、AES-GCM與密鑰管理 在Web開發(fā)這件事上談到JavaScript密碼算法與網(wǎng)絡安全我聽到最多的質(zhì)疑就是“前端加密有什么意義數(shù)據(jù)反正會到后端后端驗不就行了”這個想法不能算錯但它忽略了一大類真實存在的場景。比如你的應用需要校驗第三方回調(diào)的數(shù)據(jù)有沒有被中途篡改需要在不暴露明文的情況下把敏感字段傳給數(shù)據(jù)分析平臺甚至需要直接在瀏覽器端做文件的分塊加密上傳讓服務器只保存密文。這些需求靠純粹的傳輸層加密解決不了必須真正把JavaScript密碼算法用起來。這篇內(nèi)容不是教科書式的概念羅列而是我在幾個真實項目里蹚過坑之后的總結(jié)包含瀏覽器原生Web Crypto API的完整實操、密鑰管理的取舍、以及一系列調(diào)試經(jīng)驗。適合正在做Web安全改造、加密存儲、數(shù)據(jù)防篡改需求的開發(fā)者也適合那些拿到需求卻不知道從哪兒下手的同學。我會盡量把每一步為什么這么做講清楚你可以直接拿去復用。1. 密碼學基礎(chǔ)為什么前端加密讓我又愛又恨1.1 對稱加密與非對稱加密的核心邏輯先把最基礎(chǔ)的東西說透。對稱加密和非對稱加密名字聽著唬人本質(zhì)區(qū)別就一句話加密和解密用的密鑰是不是同一個。對稱加密典型代表是AES加密和解密用同一把鑰匙。就好比你家的門鎖用鑰匙鎖上門也用同一把鑰匙打開。它的優(yōu)點是速度快、算力開銷小適合加密大量數(shù)據(jù)。缺點也很致命鑰匙怎么送到對方手里如果兩個人通過網(wǎng)絡通信總得先把這把密鑰傳過去傳輸過程中一旦被截獲后面所有密文都等于裸奔。非對稱加密典型代表是RSA和橢圓曲線ECC它用一對鑰匙公鑰和私鑰。公鑰可以公開誰都能拿私鑰自己保管絕不外傳。這個設計更像街邊的公共信箱——任何人都能把信投進信箱用公鑰加密但只有握著信箱鑰匙的人能打開用私鑰解密。非對稱加密解決了密鑰分發(fā)問題但性能比對稱加密慢幾個數(shù)量級不適合直接加密大段數(shù)據(jù)。所以在真實項目里兩者從來不是二選一而是搭配使用用非對稱加密協(xié)商出一把臨時對稱密鑰再用這把對稱密鑰加密業(yè)務數(shù)據(jù)。這也就是TLS握手的核心思路之一。前端場景里如果你不需要跟別人協(xié)商密鑰更多時候直接使用對稱加密就夠了密鑰從用戶口令派生根本不落到服務器上。1.2 瀏覽器端的威脅模型加密到底保護了什么很多開發(fā)者對前端加密的最大誤解是拿它當HTTPS的替代品這是大忌。HTTPS解決的是傳輸鏈路被竊聽和篡改的問題它保證的是“數(shù)據(jù)從瀏覽器到服務器之間沒人看得懂”而JavaScript密碼算法解決的是“數(shù)據(jù)在業(yè)務層落庫、傳遞、校驗”時的安全問題。兩者是不同層級的防護不是二選一的關(guān)系。舉個我實際見過的例子某個系統(tǒng)的網(wǎng)關(guān)會記錄請求日志用于排障但日志里包含用戶身份證號等敏感字段。即使整個鏈路是HTTPS日志一旦落到存儲系統(tǒng)就變成了明文數(shù)據(jù)庫安全審計直接不過關(guān)。后來改成前端先用AES加密敏感字段后端只把密文交給日志系統(tǒng)日志查詢時再解密。這就是應用層加密的真實價值。再比如一個云筆記應用用戶寫的內(nèi)容同步到服務器。如果服務器本身可以解密數(shù)據(jù)那運維人員、被拖庫時攻擊者都能看到全部筆記。這時候就需要端到端加密前端加密后上傳服務器只負責存儲密文解密永遠發(fā)生在用戶自己的瀏覽器里。這類需求單純指望HTTPS和服務器端防護是不夠的。我把前端加密的真實作用總結(jié)成三件事第一數(shù)據(jù)完整性校驗確保密文或明文在傳輸、存儲過程中沒有被篡改第二敏感字段的端到端加密讓中間環(huán)節(jié)看不到明文第三防重放和防偽造比如用HMAC驗證回調(diào)請求確實來自受信任方。想清楚這三件事你就不會被“前端加密是否安全”這類問題困住。1.3 哈希、消息認證碼與加密三者千萬別混用在講代碼之前必須把哈希、消息認證碼和加密這三個概念掰開。我見過太多項目把SHA256叫“加密”實際上SHA256算出來的摘要根本解不回去。哈希函數(shù)是單項通道它把你的一段數(shù)據(jù)映射成固定長度的指紋數(shù)據(jù)稍微改一個bit指紋就面目全非。哈希的作用是校驗完整性不是保密。消息認證碼MAC和哈希的最大區(qū)別是它需要一把密鑰。哈希誰都能算MAC只有持有密鑰的人才能算得出來。所以在第三方回調(diào)驗簽、API防篡改這些場景里用HMAC而不是普通哈希攻擊者沒有密鑰偽造不了正確的校驗值。加密則是可逆的它能保護機密性讓明文變成看不懂的密文接收方用密鑰還原。哈希、MAC、加密三者的定位分別是完整性、認證性、機密性。真正項目里往往是組合拳先用哈希或MAC保證數(shù)據(jù)沒被改過再用加密讓數(shù)據(jù)不被別人看到。腦子里有了這個框架后面看代碼就不會暈。有一個很直觀的類比哈希像驗毒試紙只能告訴你這包藥材有沒有被動過MAC像是在試紙上再加一層私人暗號只有你和對方知道暗號規(guī)則加密則是把藥材整個鎖進保險箱鎖是密碼鎖沒有密碼連看都看不到。三件事互相獨立但經(jīng)常一起用。2. JavaScript加密實戰(zhàn)瀏覽器原生API的正確打開方式2.1 Web Crypto API為什么原生實現(xiàn)值得信賴先亮明態(tài)度新項目做JavaScript密碼算法優(yōu)先用瀏覽器原生的Web Crypto API而不是各種第三方加密庫。理由很簡單原生API是瀏覽器內(nèi)核實現(xiàn)的運行時有硬件加速密鑰材料在底層做管理JavaScript環(huán)境本身接觸不到完整的密鑰細節(jié)從源頭上減少被XSS腳本竊取密鑰的風險。第三方純JS庫雖然方便但很多實現(xiàn)存在歷史包袱。Web Crypto API的核心對象是crypto.subtle提供摘要、加解密、簽名、密鑰派生等能力。注意subtle這個名字官方文檔說得很直白這是一套強大的低級API越強大越容易用錯所以把“subtle”寫進了命名里。先來一個最基礎(chǔ)的哈希操作對字符串算SHA256摘要async function sha256(input) { const data new TextEncoder().encode(input); const digestBuffer await crypto.subtle.digest(SHA-256, data); const hashArray Array.from(new Uint8Array(digestBuffer)); return hashArray.map(b b.toString(16).padStart(2, 0)).join(); }這段代碼有兩個新手常犯的坑。第一digest方法不直接接受字符串必須先把字符串編碼成Uint8Array我用的是TextEncoder。第二crypto.subtle.digest返回的是ArrayBuffer不能直接打印需要轉(zhuǎn)成Uint8Array再逐字節(jié)轉(zhuǎn)十六進制字符串。很多人天真的console.log(digest)打出來永遠是[object ArrayBuffer]還以為是自己寫錯了。哈希用的算法名是SHA-256這里也可以用SHA-1和SHA-384但SHA-1已經(jīng)不安全除非做兼容老系統(tǒng)的完整性校驗否則一律不要用。新項目無腦選SHA-256。2.2 AES-GCM對稱加密實戰(zhàn)封裝瀏覽器端做對稱加密我的首選永遠是AES-GCM。原因有三個一是GCM模式同時提供加密和完整性認證既保證了機密性又防止密文被篡改二是Web Crypto API原生支持不需要額外引入庫三是一個模式解決兩件事代碼結(jié)構(gòu)更簡單。AES-GCM有兩個關(guān)鍵參數(shù)密鑰和IV初始化向量。IV不需要保密但絕對不能重復。同一把密鑰下如果IV重復攻擊者可以通過密文的異或關(guān)系還原出明文信息。我用crypto.getRandomValues生成12字節(jié)的隨機IV這是一個比較標準的做法12字節(jié)是GCM模式推薦的長度太長或太短都會帶來額外的兼容性問題。下面是一組可以直接復用的封裝加密函數(shù)返回{ iv, ciphertext }async function aesGcmEncrypt(secretKey, plaintext, additionalData) { const iv crypto.getRandomValues(new Uint8Array(12)); const encrypted await crypto.subtle.encrypt( { name: AES-GCM, iv: iv, tagLength: 128, additionalData: additionalData }, secretKey, new TextEncoder().encode(plaintext) ); return { iv: iv, ciphertext: new Uint8Array(encrypted) }; } async function aesGcmDecrypt(secretKey, iv, ciphertext, additionalData) { const decrypted await crypto.subtle.decrypt( { name: AES-GCM, iv: iv, tagLength: 128, additionalData: additionalData }, secretKey, ciphertext ); return new TextDecoder().decode(decrypted); }這中間有個很容易被忽略的細節(jié)additionalDataAAD。它是什么它是一段不加密但要參與認證的數(shù)據(jù)典型用法是綁定上下文。比如你加密一條消息可以把消息的ID、發(fā)送人、版本號放進AAD這樣如果攻擊者把一條合法密文換個ID插到別處解密時AAD校驗不過立刻失敗。等于給密文加了一層“防移花接木”的保險。crypto.subtle.encrypt返回的密文里已經(jīng)包含了GCM的認證標簽不需要你再單獨拼接tag解密時也是自動校驗。如果密文被篡改decrypt會直接拋OperationError異常。這一點對排查問題很重要下面第4章還會展開講。2.3 PBKDF2與口令派生密碼存儲的正確姿勢接下來是另一個高頻場景用戶密碼。很多人拿到需求“密碼加密存數(shù)據(jù)庫”直接對密碼算一個SHA256就存進去這是巨大的錯誤。SHA256速度太快攻擊者拿到數(shù)據(jù)庫后用GPU暴力跑幾億次哈希毫無壓力弱口令一跑一個準。正確的做法是什么要么用專門的慢哈希算法比如bcrypt、scrypt、Argon2要么用密鑰派生函數(shù)PBKDF2把密碼加上隨機鹽經(jīng)過成千上萬次迭代派生出定長密鑰或哈希值。慢哈希的本質(zhì)是讓每次猜測的成本變得很高從而提高暴力破解的代價。在瀏覽器端Web Crypto API支持PBKDF2。下面是一個加鹽派生的完整示例async function deriveKeyFromPassword(password, salt, iterations 310000) { const baseKey await crypto.subtle.importKey( raw, new TextEncoder().encode(password), PBKDF2, false, [deriveBits] ); const derivedBits await crypto.subtle.deriveBits( { name: PBKDF2, salt: salt, iterations: iterations, hash: SHA-256 }, baseKey, 256 ); return new Uint8Array(derivedBits); } // 調(diào)用示例 const salt crypto.getRandomValues(new Uint8Array(16)); const derivedKey await deriveKeyFromPassword(用戶密碼, salt);鹽的作用是防預計算攻擊和彩虹表。即使兩個用戶設置相同密碼只要鹽不同最終派生結(jié)果也不同。鹽必須是隨機生成、長度足夠16字節(jié)以上并且可以明文存儲不需要保密。迭代次數(shù)決定了慢哈希的成本安全社區(qū)目前的共識是PBKDF2-HMAC-SHA256至少30萬次迭代硬件環(huán)境允許的話做到60萬次也不過分。在低端移動設備上迭代次數(shù)太高的體驗會明顯變慢需要根據(jù)自己的用戶設備畫像平衡。這里我必須強調(diào)一個邊界瀏覽器端運行PBKDF2主要是為了“客戶端派生密鑰”比如做端到端加密時從用戶口令生成本地密鑰口令永遠不離開設備。而真正的密碼庫校驗依然強烈建議放在服務器端用專門的密碼哈希方案處理。如果只是在瀏覽器里算個PBKDF2然后當密碼哈希存到數(shù)據(jù)庫那就失去了服務端慢哈希的專業(yè)算法優(yōu)勢安全強度反而打折。3. 真實項目落地一個加密同步方案的完整拆解3.1 場景設定與整體架構(gòu)理論講再多不落地等于零。我拿一個做過多次的方案來拆解云筆記的加密同步。需求很簡單筆記內(nèi)容要加密后上傳到服務器服務器只存密文即使數(shù)據(jù)庫被拖走攻擊者拿到的也是一堆無法解讀的字節(jié)。這里采用的架構(gòu)是“密鑰層級”思想。直接用用戶口令加密所有筆記并不可行因為任意一條筆記更新時都要重新派生密鑰而且口令一旦修改所有數(shù)據(jù)都要重加密。更合理的方案是引入兩層密鑰數(shù)據(jù)加密密鑰DEK為每一條筆記隨機生成真正用于AES-GCM加密筆記內(nèi)容。密鑰加密密鑰KEK由用戶口令加鹽通過PBKDF2派生用于加密DEK。整體流程是用戶輸入口令瀏覽器本地派生出KEK每新建一條筆記生成隨機DEK加密筆記內(nèi)容DEK本身再用KEK加密后和筆記密文一起上傳服務器。用戶查看筆記時先用口令派生KEK解包出DEK再用DEK解密筆記。服務器全程只接觸密文和包裹后的密鑰沒有能力還原明文。這個架構(gòu)帶來一個直接收益用戶修改口令時只需要用新KEK重新包裹所有DEK不需要把幾十萬條筆記重新加密一遍。操作成本從“重寫全庫”降為“重寫密鑰表”量級完全不同。3.2 關(guān)鍵實現(xiàn)與代碼走讀密鑰包裝可以借助Web Crypto API的wrapKey和unwrapKey原生支持AES-GCM作為包裝算法。下面是核心代碼邏輯。生成一條新筆記的加密過程// 第一步生成隨機DEKAES-GCM 256位 const dataKey await crypto.subtle.generateKey( { name: AES-GCM, length: 256 }, true, [encrypt, decrypt] ); // 第二步用DEK加密筆記內(nèi)容 const iv crypto.getRandomValues(new Uint8Array(12)); const ciphertext await crypto.subtle.encrypt( { name: AES-GCM, iv: iv }, dataKey, new TextEncoder().encode(plaintext) ); // 第三步用KEK包裹DEK const wrappedKey await crypto.subtle.wrapKey( raw, dataKey, kek, { name: AES-GCM, iv: iv } );讀取筆記時的解包過程// 第一步從服務器拿到包裹后的密鑰 // 第二步用KEK解包DEK const unwrappedKey await crypto.subtle.unwrapKey( raw, wrappedKeyBuffer, kek, { name: AES-GCM, iv: iv }, { name: AES-GCM, length: 256 }, true, [encrypt, decrypt] ); // 第三步用DEK解密筆記 const decrypted await crypto.subtle.decrypt( { name: AES-GCM, iv: iv }, unwrappedKey, ciphertext );注意到一個問題沒有包裹DEK時用了和加密筆記相同的iv。這里要特別小心如果完全復用同一個DEK和同一個IV加密兩份數(shù)據(jù)是災難性的。但在密鑰包裹場景中包裹DEK用的是KEK加密筆記用的是DEK兩把密鑰不同復用IV并不會造成安全風險。不過為了保險起見我建議還是分別為wrapKey和encrypt生成獨立的IV避免后續(xù)有人重構(gòu)代碼時混淆密鑰上下文。實現(xiàn)這個方案時DEK是否標記為extractable也是關(guān)鍵決策。包裹密鑰之后本來可以把DEK設置為false即不可導出這樣JavaScript環(huán)境根本無法取出DEK的原始字節(jié)只能用它加解密。但在實際存儲場景中一旦KEK丟失或用戶忘記口令不可導出的DEK意味著數(shù)據(jù)徹底無法恢復??紤]到用戶找回口令的需求我通常會保留extractable: true但伴隨更嚴格的口令策略和提醒機制讓用戶知道忘記口令等于放棄數(shù)據(jù)。3.3 密鑰管理與輪換的教訓說到密鑰管理我在真實項目里踩過不少坑這里集中說幾個。第一不要為了方便把密鑰存進localStorage。localStorage對同源下的所有腳本開放一個XSS漏洞就能把密鑰偷走。哪怕你把密鑰先做一層編碼再存也只是掩耳盜鈴攻擊者只需要照貓畫虎解碼一次。密鑰的最好歸宿是“不落盤”每次使用前由口令重新派生。第二IndexedDB比localStorage更適合存密鑰主要原因不是安全性而是它支持結(jié)構(gòu)化克隆和更大的數(shù)據(jù)容量可以存CryptoKey對象并且存取是異步的。但要注意IndexedDB對XSS同樣沒有免疫力它只是工程上更合理不代表密鑰就安全了。第三密鑰輪換。很多項目上線時做了加密卻完全沒有輪換機制。一旦懷疑密鑰泄露或者安全合規(guī)要求定期更換你總不能讓人改一次密鑰就重加密所有歷史數(shù)據(jù)。所以設計數(shù)據(jù)模型時就要預留密鑰版本字段。我現(xiàn)在的做法是在每條密文記錄里額外存一個keyVersion字段。輪換時生成新的KEK批量解包-重新包裹DEK更新版本號。解密時根據(jù)記錄的版本號選擇對應的KEK歷史數(shù)據(jù)平滑過渡。整個過程用戶無感知數(shù)據(jù)量也不需要全量重加密這是密鑰層級架構(gòu)另一個很大的優(yōu)勢。第四永遠不要在前端日志里打印密鑰或口令。調(diào)試時開發(fā)者也難免手滑把console.log(wrappedKey)留在線上代碼里。我在代碼規(guī)范里直接加了要求涉及密鑰對象的日志一律使用console.log([key] omitted)避免思維方式上就養(yǎng)出隨手打的習慣。4. 常見問題與排查技巧實錄4.1 安全上下文與兼容性為什么我的crypto.subtle是undefinedWeb Crypto API有一個硬性條件必須在安全上下文中可用。所謂安全上下文簡單說就是HTTPS頁面或localhost環(huán)境。如果你直接在某個HTTP內(nèi)網(wǎng)地址打開頁面window.crypto.subtle大概率是undefined所有加密代碼都會報錯。排查這個問題最快的方式是看一眼瀏覽器控制臺錯誤。如果是“Cannot read properties of undefined (reading digest)”先確認是不是在HTTP環(huán)境。開發(fā)階段建議用localhost進行聯(lián)調(diào)因為瀏覽器把localhost視為安全上下文不需要配HTTPS證書。生產(chǎn)環(huán)境則必須上HTTPS這本身也是Web安全的基本要求。Node.js環(huán)境下情況略有不同。Node.js 20開始全局的crypto對象默認包含subtle可以直接使用更早版本需要從require(crypto).webcrypto取。前后端共用同一套Web Crypto API代碼是可行的但要注意兩端默認支持細節(jié)存在差異比如某些算法名、哈希算法清單可能不一致。兼容性方面還有一個必須提的坑老版本瀏覽器IE時代遺產(chǎn)比如某些企業(yè)瀏覽器內(nèi)核根本不支持crypto.subtle。如果產(chǎn)品明確需要支持這類環(huán)境要么引入降級方案要么干脆在功能設計上做分流不要試圖用同一個代碼路徑硬兼容否則你會被一串又一串的環(huán)境判斷折磨到崩潰。4.2 二進制數(shù)據(jù)的編碼轉(zhuǎn)換ArrayBuffer、Uint8Array與Base64做密碼學開發(fā)二進制數(shù)據(jù)的編碼轉(zhuǎn)換幾乎是每天都要處理的事。crypto.subtle的輸入輸出全是ArrayBuffer和Uint8Array但網(wǎng)絡傳輸、數(shù)據(jù)庫存儲、URL傳參都要求字符串或Base64。很多新手在這里翻車我見到最多的報錯是“byte length mismatch”或“invalid key length”仔細一查全是編碼沒轉(zhuǎn)對。下面這組工具函數(shù)我?guī)缀趺總€項目都會粘一份function bytesToHex(bytes) { return Array.from(new Uint8Array(bytes)) .map(b b.toString(16).padStart(2, 0)) .join(); } function base64ToBytes(base64) { const binaryString atob(base64); const bytes new Uint8Array(binaryString.length); for (let i 0; i binaryString.length; i) { bytes[i] binaryString.charCodeAt(i); } return bytes; } function bytesToBase64(bytes) { let binary ; const uint8 new Uint8Array(bytes); for (let i 0; i uint8.length; i) { binary String.fromCharCode(uint8[i]); } return btoa(binary); }這里有一個容易懵的點Uint8Array和ArrayBuffer是兩種不同的東西。Uint8Array本質(zhì)是一個“視圖”它里面有一個buffer屬性指向底層的ArrayBuffer。你如果傳給crypto.subtle一個從ArrayBuffer上切出來的Uint8Array通常沒問題因為Web Crypto API接受BufferSource也就是它倆都行。但當你需要精確控制長度時務必用byteLength而不是length因為Uint8Array的長度可能只是底層ArrayBuffer的一部分。另一個和服務器通信時的典型問題后端返回Base64字符串前端直接JSON.parse解出字符串后忘了轉(zhuǎn)回字節(jié)數(shù)組就傳給crypto.subtle.importKey結(jié)果密鑰導入報錯。處理JSON傳輸時密鑰和密文一律用Base64字符串承載拿到前端先轉(zhuǎn)字節(jié)再參與運算。4.3 AES-GCM解密失敗逐層排查清單AES-GCM解密失敗拋OperationError這是最典型的加密報錯。我把自己總結(jié)的排查思路列成清單按下面的順序查大多數(shù)問題五分鐘內(nèi)能定位。第一檢查IV是否和解密時一致。很多人只保存了密文忘記保存IV。AES-GCM解密必須使用加密時的同一個IV否則GCM認證必然失敗。所以存儲時一定要把iv和ciphertext放在一起保存甚至可以把IV直接拼在密文前面然后統(tǒng)一轉(zhuǎn)為Base64?,F(xiàn)象最可能原因處理建議解密報OperationError密文被篡改、IV不對、AAD不一致逐項比對密文、IV、AAD密鑰導入失敗密鑰字節(jié)長度不對或編碼錯誤確認Base64轉(zhuǎn)字節(jié)無殘留、長度符合算法要求頁面打開即報錯crypto.subtle不可用檢查HTTPS、localhost、瀏覽器版本服務器與前端互通失敗編碼規(guī)則不一致比如前端hex、后端base64統(tǒng)一編碼格式建立轉(zhuǎn)換工具函數(shù)數(shù)據(jù)偶爾解密失敗并行加密時IV生成沖突或隨機源退化確認用crypto.getRandomValues避免自實現(xiàn)隨機數(shù)第二確認IV字節(jié)數(shù)是否為12字節(jié)。GCM標準推薦12字節(jié)太長在某些實現(xiàn)里要額外做IV哈希處理容易出現(xiàn)兼容性問題。我見過有人用了16字節(jié)IVNode.js 和瀏覽器某一邊能解、另一邊不行查到最后是IV長度處理規(guī)則不一致。第三檢查additionalData。如果你在加密時傳了AAD解密時也必須傳一模一樣的AAD順序和字節(jié)都不能錯。這里最坑的是AAD在傳輸過程中如果被序列化成了不一樣的編碼比如字符串編碼從UTF-8變成UTF-16解密也會失敗。第四確認導出導入密鑰時沒有改變字節(jié)順序。密鑰的raw導出直接對應字節(jié)序列不應該有任何處理。有些代碼為了顯示好看把密鑰轉(zhuǎn)成hex字符串再次解碼中間一旦出現(xiàn)大小寫處理誤差密鑰就廢了。4.4 大數(shù)據(jù)量加密的性能取舍前面講的所有示例都是對小數(shù)據(jù)量直接加密但真正做文件同步、圖片加密這類需求時直接把整個文件塞進crypto.subtle.encrypt會讓內(nèi)存瞬間爆炸。瀏覽器里加密一個幾百MB的文件你幾乎能聽到風扇狂轉(zhuǎn)的聲音。標準做法是分塊加密把文件切成固定大小的分塊比如1MB一塊依次加密后傳給服務器。但GCM模式有分塊安全邊界分塊太小會擴大密文膨脹率分塊太大則內(nèi)存占用高。我實測下來1MB到4MB是一個比較舒服的區(qū)間密文膨脹率約為密文長度的0.8%GCM各分塊都要加一個認證標簽通常16字節(jié)在可接受范圍內(nèi)。分塊加密時每個分塊必須使用獨立的IV并且不能以任何可預測的方式遞增。最穩(wěn)妥的是每塊都用crypto.getRandomValues生成隨機IV同時把分塊序號、IV、密文長度作為存儲元數(shù)據(jù)保存。注意分塊序號的意義它防止攻擊者刪除或調(diào)換分塊順序結(jié)合每個分塊的GCM認證標簽可以有效保證數(shù)據(jù)的完整性和順序。const CHUNK_SIZE 1024 * 1024; // 1MB async function encryptFile(file, key) { const chunks []; for (let offset 0; offset file.size; offset CHUNK_SIZE) { const slice file.slice(offset, offset CHUNK_SIZE); const buf await slice.arrayBuffer(); const iv crypto.getRandomValues(new Uint8Array(12)); const enc await crypto.subtle.encrypt( { name: AES-GCM, iv: iv }, key, buf ); chunks.push({ index: chunks.length, iv: bytesToBase64(iv), data: bytesToBase64(new Uint8Array(enc)) }); } return chunks; }在這個例子里我先對每個分塊獨立加密再把分塊元數(shù)據(jù)傳給服務器。如果不做Web Worker主線程中循環(huán)加密1MB分塊會讓頁面出現(xiàn)明顯的卡頓。更合理的方式是把加密任務扔進Web Worker把主線程騰出來給用戶交互。我在項目中通常會創(chuàng)建一個專門的加密Worker接收ArrayBuffer返回加密結(jié)果主線程只維護任務狀態(tài)和進度條。整體體驗能從“點擊保存后頁面凍結(jié)三秒”變成“后臺默默加密、界面絲滑不減”。最后分享一個調(diào)用習慣多次調(diào)用crypto.subtle的異步方法時不要在循環(huán)里無腦await串行執(zhí)行逐個排隊會拖慢總時長。在任務粒度小、相互獨立的前提下可以考慮用Promise.all并發(fā)控制但要注意并發(fā)量一次性發(fā)幾十個加密任務同樣能把CPU踩滿。我的經(jīng)驗是維護一個并發(fā)池同時運行4到6個加密任務既充分利用多核資源又不至于讓頁面失去響應。加密性能優(yōu)化本質(zhì)上是個資源調(diào)度的活在瀏覽器這種單線程表象下需要多試幾種策略找到適合自己場景的平衡點。踩過幾次坑之后我現(xiàn)在做前端加密方案已經(jīng)形成了一套固定動作先確認威脅模型想清楚要防誰再選算法能走Web Crypto API就不引第三方庫然后設計密鑰層級預計未來的輪換需求最后把編碼轉(zhuǎn)換工具函數(shù)寫好放在公共模塊里。這個流程讓我從“寫出一段能跑的加密代碼”進化到“做出一個幾年后依然經(jīng)得起推敲的加密設計”中間省下來的排查時間非??捎^。如果你正好在做一個新的加密功能我建議先從第2章的AES-GCM封裝入手把它內(nèi)置到項目工具庫里再逐步疊加PBKDF2派生、密鑰包裹和分塊加密。不要一開始就上大而全的加密框架瀏覽器密碼學最危險的地方恰恰是那些看起來很省事的封裝它們隱藏了太多細節(jié)而安全這件事最怕的就是細節(jié)失守。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
国产午夜精品理论片一二三区区 | 激情网五月天| 国产精品美女久久久久久网站| 日本精品网站在线中文| 91原创在线观看| 亚洲色人| 欧美一级专区免费大片| 在线国产一区二区av| 在线黄色污污网站| 黑人操一区二区| 玖玖资源中文字幕制服丝袜| 天天综合,91综合永久| 992视频一区| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 伊人骚琪琪亚洲天堂网站| www.激情| 91视频伊人| 综合情欲网| 国产精品另类一区大香蕉| 亚洲日本激情| 国产后入清纯| 9久热| 一本久久精品中文字| 日韩性爱1级片视频| 91 亚洲情侣偷拍 久久| 亚洲色天堂日韩中| av黄图片在线观看| 久久视频,这里只有精品 | 校园激情狠狠四射| 狠狠操一区二区| 亚一综合久久久久久久久久| 久久久久久999| 很黄很污的免费网站 | 日韩精品人妻中文字幕不卡乱码| 抽插一区二区视频| 日本97久久| 99啪啪视频| 大香蕉在线视频15| 亚洲人妻一区二区三区| 狠狠狠狠狠狠| 99热精品在线| 先锋精品av色鲁| www.av在线视频| 久久精视频美日韩在线视频| 外国免费性情大片| 国际精品久久久| 欧美日韩精品久久| 黑人中出21连凳花野真衣| HEYZO高无码国产精品227| 久久av成人无码免费| 欧洲综合无码| 国产精品久久久久久片| 青青青国产手线观看视频2| 神马九九| 亚洲欧美综合图片| 欧美亚洲天堂| 可乐操在线| 日韩av熟女一区二区三区成人| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 97人妻人人躁人人玩人人| 一区二区三区成人| 亚洲中文字幕熟女少妇一区二区| 国产高清视频无码在线| 精品少妇99| 久草加勒比一区在线| 无码精品久久| 九九精品无码专区免费| 天天视频综合在线观看视频| 在线综合色| 第一高清av中文字幕| 日韩国产乱子伦App| 嫩草一区二区在线观看| 亚洲欧洲美腿丝袜| 五十路人妻在线| 少妇色欲综合网2| 亚洲成人色情五月天丁香花| 久久久久成人网| 97亚洲欧美| 日本潮催一卡操| 国产精品久久久久久无码红治院| 视频二区美腿丝袜制服人妻欧美| 97一本大道亚洲一区| 午夜操操操| 久久精品无码熟妇一区二区三区视频导航| 中文字幕乱码在线观看| 日本性交操一区二区不卡系列| 日韩美女操b| 人人乐大香蕉| 67194无码不卡| 内射中出日韩在线观看视频| 大香蕉2017| 蜜乳AV免费观看| 白丝jkav| 国产精品三级视频网站| 智利AV在线网| 精品一区二区啪啪啪| 亚洲欧洲色情高清| 欧美性xxxxx狂欢| av网页一区二区三区| 密乳AV免费观看| 久久婷婷五月天| 美女91在线观看| 大香蕉青青9| 亚洲第一男人天堂| 亚洲中文一区二区三区| 九九久久99| 亚洲欧美色图片| www.狠狠干.coom | 东京热AV男人的天堂| 密臀在线免费观看| 欧美性爱精品一区二区| 亚洲天堂AV在线播放| 国产91av在线播放| 区二区亚洲婷| 啪啪啪东京| 人人色人人射人人妻| 亚洲 日本 不卡| 妺妺跟我一起洗澡没忍住| 日本新免费二区三区| 国产家庭乱伦表演| 久久久婷| 无码丰满熟妇一区二区浪潮AV| 欧美强奸乱| 国厂麻豆77q4| 午夜无遮挡男女啪啪视频| 亚洲精品欧美专业| 国产一区二区三区白丝| 色婷婷久久综合超碰| 性饥渴少妇av无码毛片| 日韩午夜国产| 操91| 97伊人| 120分钟婬片免费看| 99人人干| 亚洲综合伊人| 亚洲乱码尤物193YW| 国产精品动态一区二区三区四四| 亚洲中文字幕在现观看| 大香蕉操久久| 免费在线观看国内色片网站网址| 91热色| 久久精品美女一区| 精品无码久久久久久久久果冻糖心| 粉嫩av一区二区三区四季| av绯色| 91麻豆一二三区| 久久久久国产精品片区无码直播| 欧中美三级一区二区三区| 校园春色之综合网| 操人人| 欧美天堂亚洲电影院一区在线播放| 色婷婷视频| 欧美性高潮| 丝袜喷水在线| 日韩成年人性爱视频| 日日日啊啊啊| 亚洲国产成人福利在线观看| 国产精品久久泡妞网站| 国产免费一区二区三区最新不卡| 日韩欧美亚欧在线视频| 色偷偷男人的天堂麻豆| 亚洲高清视频在线免费观看| 国产风韵犹存熟妇三区| 亚洲欧美国产其他二区| 久久激情视频| AV一二区| 亚洲av无码成人精品国产| 97超碰超碰| 超碰爽人妻熟女Av| 综合欧美日韩在线观看| 60秒免费小视频| 婷婷五月天小说| 999精品国产高清一区二区| 国产中文日韩欧美一区二区三区人妻丝袜美腿 | 中文字幕乱妇免费视频| 超碰综合色| 99这里有精品| 国产92麻豆天美精品色欲5| 亚洲天堂加勒比| 好屌色综合| 99re9这里只有精品| 一级A啪啪啪啪| 免费久久一级毛片大黄| 色婷婷一区二区三区久久| 校园春色欧美| 精品中文一区二区| 97精品熟女少妇一区| 中文字幕日韩人妻视频一区二区三区交换夫妻| www.99色| 欧美劲爆视频一区二区| 囯产乱伦一区二区三女 | 97在线看| 久区视频| 亚洲黄色电影| 九九九不卡| 啊啊啊啊啊啊啊啊啊啊在线观看| 96AV精品| 密桃99999| 强奸乱亚洲| 加勒比伊人影院| 巨乳特殊服务按摩| 91美女视频直播| 国产成人精品午夜福利| 天综合网欧美| 曰韩操B| 91殴美| 97日韩欧美亚洲| 欧洲精品久久| 天天影视综合色| 色九九综合AV| 天天干,夜夜爽| 91国模| 久久天天艹| 天天日天天干天天操| 激情综合色| 国产福利影视| 人妻-91porn| 艹比视频国产精品| 六月色婷婷| 亚洲欧美黄| 国语对白在线播放视频| 综合欧美亚洲| 极品内射| 四季AV一区二区凹凸精品小说| 欧美天天谢综合网| 人澡逼| 午夜综合在线| 欧美色综合网| 少妇厨房愉情理伦片bd在线观看| 国产亚洲日韩在线三区黑人| 99欧美| 97超碰国产亚洲精品资源| 深夜啪啪啪视频免费| 黄页18禁| 免看60秒涩涩视频| 日本天天干天天操一区| 日韩免费簧片| 麻豆国产97在线| 亚洲欧美国产va在线播放频| 国产h片在线观看视频| 亚洲第2页| 亚洲精品男人的天堂| 97干com| 91性生活久久久| 蜜臀久久精品久久久久视频| 84YTCOM性无码| 国产精品免费日韩| 殴美,日韩国产伦精品| 中日高清无码操逼视频| 人人天天欧洲| 99热日| 香蕉精品二区二区| 国产区91柔拿会所技师| 国产免费一区二区三区最新不卡 | 91 丝袜在线观看| 久久久久99精品成人片蜜臀 | 日韩精品人妻中文字有码在线| 欧美第五页| 91在线免费精品视频| 国产探花精品在线| 淫淫总合网| 国产亚洲日本| 国产精品成人无码a v毛片| 中文激情网| 天天澡天天爽日日av| 精品人妻少妇| www…国产操逼| 九九热五区| 欧美 日韩第一性色| 巨爆乳肉感一区二区三区竹菊影视| 长长久久免费视频| 亚州五月| 成人乱码一区二区三少妇| 伊人天堂在线| 夜夜夜夜久久久久| 久久性爱视频| 久9综合在线| 国产精品 久久久精品一牛| 国产91福利小视频在线观看| 91操人| 丝袜美腿射精91| 色综合国产在线观看| 色播丁香| 密臀在线视频| 丁香五月自拍| 蜜臀99精品国产高清在线观看| 亚洲日韩美女中文字幕乱| 久久一区,青青青青草视频在线播放| 亚洲高潮影院| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 国产JDAV无码视频在线观看| 午夜欧美J进J出白浆流出久久久| 国偷自 一区二区| 色色操| 91久久久久久久久18| 大屁股熟女一区二区三区| 不卡中文字幕aⅴ在线| 久久久久久性爱视频| 天天综合网日韩| 婷婷亚洲五月***久久| 夜夜草网站| 日韩人妻精品中文字幕| 亚洲成人在线高清| 色天堂在线观看| 亚洲,日韩,欧美,成人播放 | 91人人| 超碰97在线色男人??| 941超碰| 日韩欧美三级| 日韩有码一区三区| 97啪啪| 嗯嗯啊在线视频| 91第一页| 亚洲aw毛茸茸在线| 强奸乱伦亚洲第一页| 国产十八禁视频| 91艹B视频| 干b网| 亚州精品一区二区三区香中文字幕在线| 啊啊啊水好多| 黄色成品网站| 啪啪啪精品视频| 大香蕉视频啪啪啪啪| 天堂蜜桃无码视频一区二区| 乱伦a片视频| 人妻人久久精品中文字幕| 色婷婷电影| 17c嫩草51久久91嫩草| 激情露脸爱| 亚洲国产婷婷在线播放| 好涩综合| 九一精品牛牛一区二区| 97碰在线视频| 久久一区二区高清免费| 亚洲风情在线观看| 欧美色天堂网在线视频| 丁香婷婷激情五月天无毒不卡 | 日韩激情啪啪| 老子午夜伦不卡影院| 青青草中日韩在线| 嗯~啊~快点 死我视频| 18禁美女裸体无遮挡啪啪| 欧美在线亚洲| 足交视频老司机| 亚洲 图片 综合91| A 天堂在线观看视频| 黑人综合网| 婷婷九月丁香| 亚州再线| 超碰亚洲欧美日韩无| 性在久久久久久| 中欧人妻丝袜中文字幕| 久久精品导航| 国产一区二区精品在线视频| 玖玖爱综合| AA丁香综合激情| 久久精视频美日韩在线视频| 久热影视| 夜夜草天天| 亚洲黄色AV电影| 熟女高潮合集-永久久久-成人AV | 夜夜夜夜爽| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 十八禁av无码免费网站APP| 日韩小电影| 亚洲欧美国产精品久久久久久久| 一区二区三区成人 | 五月天婷婷在线看| 性无码专区2020| 97免费在线观看| 国产中文字幕在线观看| 久久9精品网站| 91国产美女丝袜足交精品视频| 婷婷色网| 亚洲天堂区| 亚洲AV免费在线| 国产精品久久久久久久久AV大片| 丁香六月东京热| 久久久久人妻二区精品叶可怜| 日本不卡二区| 少妇一级婬片免费放一级a性色.| 天天日天天操天天射河南省| 国产白丝精品在线观看| 亚洲毛片基地专区| 亚洲色图欧美色图另类图片| 久久久无码视频| 欧中美三级一区二区三区| 99久在线精品99re8| 国产视频第2页| 久久视频,这里只有精品| 亚洲图片 激情小说| 天天看高清麻豆| 91激情综合| 4tube欧美女厕所| 九九九一二三| 久久精品人妻一区| 人人操人人干网页| 亚洲最大AV网| 天天爱天天操| 国产性刺激| 欧美精品91| 男人久久精品| 90后后入| AVE乱伦| 欧美在线永久天堂| 久久黄色性爱视频| 在线国产探花| 插入综合网| 国产怡红院| 亚洲成人精品久久久| 97九色| 家庭乱伦国产精品| 黄在线| 亚洲一区二区中文字幕| 婷婷尹人大香蕉免费| 国产欧美第五页| 台湾大香蕉99热| 破处bbq| 中文字幕乱码在线| 国产一进一出视频网站| 九九九九久久久| 亚洲欧美另类少妇精品| 91网站在线播放| 麻豆成人影音在线| 十八禁的黄污污免费网站| 天天色播| 亚洲少妇色图自慰直播| 国产9l 大屁股| 岛国在线国产| 欧美日韩999| 国产精品 午夜福利| 久久精品无码不卡| 香港澳门日本三级网站| 黄色毛片A片| 熟妇最新先锋一二三区| 97K超碰在线| 日韩性爱毛片操骚逼| 亚洲av夫妻操穴网| 免费男人的天堂| 自拍偷拍亚洲熟女妇人精品| 婷婷激情丁香| 免费一级黄色录像影片| 98一区二区精品| 果冻传媒A片一二三区 | 青青青国产| 97精品视频在线| 夜夜操美女| 七久久久| 欧美亚洲在线| 欧美十八禁网站| 欧州激情视频在线一区二区| 亚洲欧美首页| 黄色AV影视| 欧美色交| 久热9| 亚洲国产青青| 无码高清专| 97超碰久久色| 最新亚洲人成网站在线影院| 99999久久久久9国产精品| 国产精品白丝www| 蜜乳性色无码专日粉嫩骚逼AV| 中文字幕一二三区| 97手机日韩| 91人人臊| 日韩精品啪啪啪| 五月婷丁香| 亚洲综合有码| 99久久婷婷国产综合精品草原| 偷拍新久久| 日韩欧美亚洲一区二区三区影院 | 手机在线中文字幕国产 | 韩三级a视频在线观看| 欧美性爱97超碰| 91色香| 成人婷婷丁香| 精品免费视频国产一区| 在线天堂999| 亚洲无码精品AV久久久| 日本不卡三级网在线播放| 永久免费观看的毛片的网站| 日韩二级| 亚洲国产尤物yw在线观看| 亚洲视频,小说| 日韩99精品视频综合区| 99re在线视频国产| 无套内射性感少妇视频| 老熟女网站| 日韩av三四区| 乳欲人妻办公室奶水| 老外又粗又长一晚做五次| 啊操爽品善一区二区三区| 欧美欧美啪啪视频| 一二三啪啪专区| 亚瑟国产精品久久无码| 九九九九九九亚洲| 久操网视频| 亚洲成人在线资源| 日本不卡高清免v欧美日韩在线观看| 一级黄色性爱裸体视频| 久草精品视频| 欧美激情综合色综合啪啪五月| 极品肉射| 青草影院内射高潮| 天综合网| 欧美人与性动交a美精品| 精品人妻视频一区二区在线播放| 九九热精品| 日韩中文字幕国产| 久久久偷拍| 人妻无码久久一区二区三区免费| 日本网色| 操操操日本的逼| 久久久久久久性爱| 天天综合网~91综合网| 亚洲一区二区精品福利| 青草地一本线一区二区三区| 啪啪AV导航| 97碰碰日本乱偷人妻中文的| 日日夜夜狠狠| 国产美女销魂在线观看不卡| 风间由美日韩欧美久久| 日韩欧亚中文在线| 77777亚洲蜜臀精品久久综合蜜臀| 福利操逼| 性爱视频免费网址| 欧美日韩狠狠爱| 91AV天堂| 婷婷五月天久久精品视频一区二区三区 | 欧美日韩在线小说| 骚日日av| 骚人妻少妇视频| 67194无码不卡| 国产激情视频在线观看| 激情网色| 自拍偷拍亚洲熟女妇人精品| 最新无码国产| 日韩射精| 久久久久久久久久9| 精品制服美女中文一区二区三区| 欧美在线啊啊啊| 成人AV素股で擦久久| 天天色粽合合合合合合合| 啪一啪免费视频| 日本三级A片网站com| 加勒比伊人| 俞拍久久国应视频| 九九热re99re6在线精品| 国产热av| 欧美玖玖爱免费玖玖| 白丝少妇一区二区| 91国产美女丝袜足交精品视频 | 精品人妻一区二区三区四区| 大干人妻| 国产午夜福利合集| 色臀aV| 国产白丝在线| 亚洲大胆人体av| 亚洲男人的天堂网| 国产人妻精品一区二区三区秋霞 | 九九热超碰97亚洲最新香蕉 | 亚洲脚交| 丰满精品人妻少妇久久字幕| 九九九九88| 国产无码久久高清| 97无码视频在线播放| 国产福利第一视频| 国产精品亚洲免费| 亚洲国男人的天堂| 婷婷三区| 超碰这里只有精品| 97久久精品不卡| 9久9久| 99草精| 极品人妻少妇综合| 91狠狠综合| 国产精品久久妻无码网站| 正在播放国产精品一区| 日本性爱少妇| 色性综合| 丝袜无码a片| 99在线啪| 超碰免费人妻在线| 亚洲精品成人动漫在线| 精品性爱一二三区| 曰韩精品九九无码| 色大香蕉97N| 伊人欧美大香蕉视频| 蜜臀久久99精品久久久电影| 日韩综合成人免费视频| 九九性爱网| 中文字幕91综合| 亚洲日产专区婷婷| 久久啊啊啊| 熟妇的味道HD中文字幕| 国产精品久久久久av| 久久99网站| av操操不卡| 快播久久人人aV| 亚欧高清| 久热无码| 国产丸一视频| AV乱伦国产| 九九黄色视频在线观看| 天天综合香 ld视频| 超碰 国产熟女精品一区| 欧美色图色综合| 久久毛卡| 日韩传媒在线| 诱惑网综合| 久久久无码av精| 91 丝袜在线| 97操97干| 日韩欧美tv一区二区在线观看| 清柠毛片| 色网亚洲人| 久久首页| 欧美熟妇乱码在线一区| 欧美亚洲系列| 3p国产色噜噜一区| 9精品久久| 国产精品成久久久久午夜午夜| 一级A啪啪啪啪| 亚洲Av噜噜一区二区三区妖精| 日韩 成人 有码| 999精品国产高清一区二区| 另类专区加勒比| 三男一女不戴套的A片| 日韩黄色成人性爱| 日韩不卡一二三四| 91深夜夜| 久久国产对白激情浪潮 | 国产欧美日韩一区二区三区| 99re这里只有精品中心播放| 国产乱码久久久| 国产家庭乱伦网址| 亚洲欧美日韩电影网站一区| 国产精品嫩草影院午夜两性 | 亚洲狠| 久久免费精品视频免一| 超碰久久精品| 欧美少妇性爱网站| 欧美与日韩97| 夜色AV无码手机在线影院| 亚洲AV不卡在线观看尤物| 国产高清视频无码在线| 久久综合日韩亚洲欧美| av一区二区三区 中文| 精品一区二区三区四区外站| 岛国激情视频软件| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 国产黄a三级三级三级av在线看| 久久9免费视频| 久干9操| 伊人久久亚洲中文字幕不卡| 波多野结衣先锋影音| 大香蕉青青9| 51一区二区三区| 公司1区2区3区精产精| 国产成人www免费人成看片| 老鸭窝日丰县女人| 亚洲啪啪性视频| 男人天堂新| 精品一区二区3区| 欧洲性爱无码区| AV在线资源| 老司机射| 日韩欧美女求操每天更新| 2020视频1区2区3区| 亚洲av成人精品一区| 啊啊啊在线观看免费视频| 韩国一级AAA| 天天天做天天天爱天天天爽| 97av在线视频| 国产一级舔足在线观看| 成人一区二区三区四区| 亚洲一区二区精品福利| 女优大全 - 91n| 国模一区二区三区| 精品成人亚洲午夜电影| 欧美日韩97在线| 国产激情久久久| av网站在线看| 91精品免费| 婷婷五月丁香五月| 操日韩第| 99re黄 | 亚洲清纯综合| 区一在线观看| 黄色高清无码无码破解免费暗网| 天天狂操夜夜狂日| 欧美成人色| 久久久婷婷| 免费观看性欧美一级| 久久久久久久久久久精| 91亚州欧美| 九九热AV| 亚洲精品无码久久AV| 欧美成人精品欧美一级乱黄一区二…| 久插不卡| 蜜臀av在线播放一区二区三区| 欧美日韩色综合网| 日本三级久| 久久久久久久久久久久久9999| 9热9热综合网| 久久久久久久六六| 老女人爆菊| 入口操逼网站| 亚洲一区操| 91亚洲欧美激情| 好舒服视频| 天天看少妇| 丁香九月激情| 3d成人精品一区二区| 在线免费观看高清无码视频| 欧美日韩国产精品久久色婷婷| 91jk色拍| 搡老女人老妇女老妇老熟女怎么读| 强奸乱伦av电影| 思思视频免费看网站| 97亚洲在线| 精品国产乱码久久久久久免费| 欧美78| 97精品一二区| 天天做天天爱天天高潮| 美女的肌被草喷水视频| 伊人成人中文字幕久久网| 激情视屏国产乱伦强奸| 国产高清26uuu| ,成人免费啪啪视频| 欧美精品成人一区二区在线观看| 久草新在线| 精品人妻少妇| 99超碰碰| 91熟女丨老女人| 日本精品加勒比海一区| 91黄射| 毛片99-全集电影手机免费观看完整-B029AV| 中出789在线视频| 亚洲av热热色| 白 大 人妻 区 在线| 久久神马影院| 久草综合视频| 亚洲爱爱视频一区二区| 久久99草| 国产丝袜高跟美女av免费观看| 操淫穴亚洲五月丁香 | 日本一区视频在线观看| 日韩在线欧美精品一区二区| a片在线播放| 都市久久精品激情亚洲| 黄色人人| 日本视频在线观看污污污| 国产懂色精品国产av| 亚洲天堂 视频你懂的| 久久ww| 日本 欧美 亚中文字幕| 久久久啊啊| 78久久久| 日韩大香蕉精品在线视频| 狠狠操狠狠燥| 欧美综合天堂| 国产精品高潮久久久无码| 欧美在线永久天堂| 久久精品国产亚洲AV片多多| 国产精品成人无码av| 日韩精品一区二区三区四虎影视| 亚洲中文制服诱惑| 97精品97| 亚州,欧美在线| 国产深夜福利| 日本免费中文字幕在线| 欧美日韩第一页| 免费视频在线观看啊啊啊啊啊| 久久久久久久78| 欧美综合狠| 国产精品久久久| 99re国产精品视频| 大香蕉啪啪啪| 日韩精品第3页| 色路综合| 国产精品日韩在线一区| 男女一级A片大黄,一进一出| 中文字幕一区 二 区 三 四 五 区日 日 骚| 久久久婷婷| 精品少妇一区二区| 中文字幕精品免费一区二区| 欧美久久伊人| 欧美熟女激情| 久肏视频字幕| 午夜福利一区二区影院| 欧美一区二区亚洲天堂| 欧美性暴力猛交XXXX| 伊人宅男大香蕉| 午夜无遮挡男女啪啪视频| 亚洲激情av| 久久久专区| 国产操逼网站亚洲一级黄色| 久久久久久AⅤ无码免费肉站| 国产视频一区二区在线| 欧美亚洲韩国视频十五区| 亚洲人体视频在线观看| 五月丁香啪| 久久久久久少妇| 一级片视频啪啪| 久久性爱视频| 久久久久久免费电影| 国产美女自拍AV| 另类综合另类| 9久久久久久| 亚洲av无线观看| 丰满搜索结果 -第18页- 久久高清无码 | 五月婷婷激情| 欧美综合狠| 377p欧洲日本亚洲大胆| 中文字幕精品人妻丝袜| 欧美黄业| 九九热最新| 久热精品在线| 久久精品国产亚洲AV高级北京| 96爱综合| 干我久操| 骚乳在线| 国产v亚洲v日韩v欧美v片另类| 婷婷激情四射| 久久亚洲一区女同性恋中文字幕| 天堂无码精品国产久| 国模不卡一本二本三电影| 97免费在线视频| 美女尤物福利视频| 国产成人五月天丁香花| 97精品综合久久| 中文字幕第二页| 91人妻Pr| 南澳成人一级片在线播放| 伊人久久大香大香线蕉中文| 久久亚州大香蕉| 蜜乳AV网址| 人妖欧美一区二区| 99热网站| 亚洲欧美另类图片| 小草三级久久观看| 久久成年片色大黄全免费网站| 日韩欧美亚洲国产日韩| 好色综合| 91亚州欧美| 操逼大黄片| 欧美在线中M| 综合欧美日本三级| 竹菊一区二区三区AV线| 丁香五月天啪啪| 欧美色图20p| 麻豆区99999| 欧亚性爱在线视频| 中文字幕免费看| 免费A V在线| 日韩15p| 熟妇视频一区二区三区在线观看| 国产精品com| 亚洲在高跟鞋自慰久久在色线| 嗯啊视频免费在线观看| 91精品免费| 日本久久精品| 久久久中文| 中 文字幕一区二区三四 五 区日 日 骚 | 久久久久久久精| 九九久久国产精品| 亚洲成?V人片在线观看福利| AV女资源| 91色爽欧美| 黄片免费看黄片免费看| 我想要 啊 啊 啊| 麻豆影音天美视频| 强奸乱伦av电影| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区 | 嗯嗯啊啊啊好舒服| 综合操逼| 国产成人久久精品蜜臀| 亚洲日韩乱码中文无码蜜桃臀网站| 久久久国产成人一区二区三区在线| 亚洲激情综合另类| 69久久久久久久久久久久久| 操人91| 无码高清少妇久久| 久久有码视频| 欧美大香蕉97| 天天干天天插| 欧美 日韩 亚洲 春色| 亚洲人妻日日日| 久久婷婷亚洲欧| 日韩一区二区精品视频| 无码天天操| 亚州综合色| 国产乱不卡| 91成人国产综合久久精品蜜月| 亚洲日本韩国在线| 天天草夜夜草高潮片| 欧美劲爆第一页| 色爽——AV| 蜜桃视频精品一区二区三区| 久久久18| 国产精品激情久久久久久久| 亚洲精品久久久久毛片A片拉屎| av 模特一区了| 97国伦国色| av九九| 亚洲黄网在哪免费看| 香蕉黄色一级视频| 久久久亚洲熟妇熟女| 色天天野狼综合社区| 蜜臀久久久国产| 99re3这里只有精品| 成功精品影院| 久久婷婷亚洲| 天天色综亚洲91污| 视频在线观看免费一区二区三区 | 69人妻精品丰满熟女区| 天美传媒av 在线| 99操逼| 玖玖爱免费观看视频| 欧美1区二区三区公司| 99久久久无码国产精品性啊聊| 欧美成97爱| 乱人乱色一区二区三区免费| 91亚洲欧美综合高清在线| 青女在线| 伊人991| 欧美日本天堂| 91总综合网| 大香蕉伊在线久草麻豆天堂故事| 大香蕉 222| 男人天堂站| 综合 青草 伊久久 影院 综合| 亚洲另类久操网| 久jiu久神马影院| 精品国产乱码久久久久久久久1| 超碰99在线观看| 深爱激情五月天| oumeizonghese,www| 亚洲丝袜色| 青青草日韩无码| 首页亚洲国产高跟丝袜诱惑视频| 影音先锋国产精品| 亚洲超碰在线| 五月大香蕉| 大香蕉操久久| 国产精品久久久蜜臀| 蜜桃在线观看一区二区三区 | 97少妇人妻中文字幕久久| 国产九九九九九九| 成人情色综合网| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区 | 欲色综合| 又粗又长又大国产不卡| 亚洲麻豆av一区二区| 激情小说日韩无码| 亚洲字幕一区二区| 亚洲国产欧美中文永久| 99婷婷| 亚洲色偷偷色噜噜狠狠99网| 午夜福利久久久噜久噜久久综合 | 欧美一二三级精品在线| 亚洲制服aⅴ中文字幕| 午夜寂寞欧美| 狠狠狠狠狠干| 美女97超碰| 欧美一品道| JuliaAnn丝袜熟女系列| 亚洲男人综合| 亚洲操逼无码| 中文高清一区二区的| 香港日本韩国人妇99www.wccm20| 啊啊啊啊好大好硬啊啊啊啊啊| 日韩精品资源| 欧美岛国精品在线观看| 黄片免费久久久久久久| www色色com| 大吊色| 色欧美在线| 中文字幕美女91| 激情接吻视频久久久久久| 91 手机在线播放 绯色| 情色五月天网| 在线不欧美| 色黄色美女大长腿午夜视频| 五月丁香狠狠爱| 婷婷色网| 欧美天天综合在线| 双插性欧美一二三区| 色色色网站| 99色骚| 男人天堂资源| 欧美激情中文字幕另类小说| 午夜情侣自拍网站| 精品久久久一本一道| 在线观看一级α片刺激高潮视频| 国产 丝袜 欧美中文 另类| 色婷婷蜜臀av| 男人综合网| 久久精品国产亚洲AV片多多| 国产精品久久9| 国产又粗又长又大的视频| 日韩黄色av中文字幕| 综合熟女| 国产熟女自拍| 天天插夜夜操| 四虎永久在线精品免费网址| 精品二区久久| 国产亚洲美日韩Aⅴ中文字幕无码成人| 69人妻精品一区二区绯色| 99re在线视频| 天天日天天搞天天干| 亚洲色堂免费视频| 激情小说激情视频| 日本精品不卡一二三区| 亚洲国产综合图区中文字幕| 亚洲国产精品无码AV在线| 成人精品视频一区二区| 亚洲色图欧美| 久久香蕉网| 91精品国产91久久久久久久久久久久| 这里只有精品视频在线观看麻豆| 亚洲情色婷婷五月天| 91丝袜在线播放| 色色五月婷| 亚洲激情欧美色图 | 九热超碰| 日本天天操| 91色色综合| 少妇无码av专区线| 搞中出视频在线观看| CCYY草草影院地址入口| 少妇毛片久久| 日韩性爱一级片| 99.色网| 国产精品午夜AV完会免费 | 欧美日韩小说| 亚洲精品三| 竹菊一区二区三区AV线| 亚洲成av人片色午夜乱码| 国产精品69久久久久孕妇欧美| 26uuu国产成人综合| 呦女网站| 国产精品久久久鸭无码的功能| 国产丝袜高跟美女av免费观看| 秋霞影音一区二区三区| 亚州Av天美传媒| 欧美 亚洲 偷拍自拍| 一卡二卡三卡| 一本久道久久综合狠狠爱| 国产精品乱码久久久久| 97青青操视频| 超清福利精品视频在线| 夜夜骑天天燥| 全球成人中文在线| 日日不卡av| 美女露胸露屁股| 久久透逼视频| 学生妹天天看| 六月丁香啪啪| 中文字幕国产在线天堂| 秋霞午夜视频一区二区| 久久久久久久亚洲Av无码| 大香交| 啊啊啊啊嗯嗯嗯用力好爽| 日本孕妇一区二区视频操逼免费看| 超碰97资源中文字幕| 性影在线视频| 四虎精品永久在线观看| 伊人天堂在线| 家庭乱伦国产| 亚洲天在线| 久久久99久9| 操高情无码| 夜夜精品视频| 加勒比av中文| 九九碰九九爱97超碰| 日韩免费av片高清无码| 亚洲自拍青操视频| 人妻天天操天天爽视频免费| 国产乱色国产精品免费视| 啊啊在线| 10000部十八禁看电影| 簧片免费看视频| 天天射天天操天天干天天吃2018 | 伊人专区一区二区三区| 国产精品电| 欧美日韩人人精品| 色噜噜人妻丝袜a∨先锋影| 97久久精品| 色香91| 99re8超碰| 影音先锋国产精品| 美国黄片aaa| 久久久久99精品成人片蜜臀| 试看福利| 97香焦色区| 第一高清av中文字幕| 99久久精品无码一区二区毛片免费| 亚洲色棕合| 超碰在线人妻不卡| 可以看的av| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 国产精品无套内谢| 三上悠亚在线毛片91| 超碰综合97在线| 国产AV天美| 97九色人妻| 激情九月婷婷| 在线观看亚洲专区| 一区二区三区美女超清| 清纯唯美综合| 青青草中日韩在线| 97久久久精品| 97色在线观看| 9 9精品一区二区三区| 成人性爱高清视频免费看| 99热欧美| WWW啪啪的com| 国产粉嫩蜜臀av一区二区三区| 伊人96在线| 欧美影音在线| 国产精品。| 啊啊啊啊啊操我视频| 天堂岛av| 99精品网| 日本久久精品| 999岛国大片| wwwcaobibi| 一,爱啪啪,在线免费视频| 久久久久久久久久久免费精品| 激情小说在线视频| 欧美加勒比| 天天网综合| 偷拍盗拍亚洲色图图片| 国语精品av| 91操熟女视频| 91在线观看,天天综合| 噜噜瑟| 天天综合网合集91| 青青操视频在线| 色婷婷一区二区三区久久午夜| 日韩美女,国产传媒,视频一区| 撸撸成人在线视频| 91麻豆天美传媒HD| yiren97| 91丝袜激情在线| 午夜毛片高清免费不卡| 精品中文日韩字幕视频| 欧洲亚洲人人爽爽视频| 日韩 女同 综合| 综合大香蕉美。| 国产精品一区二区久久精品| 精品九九| 伊人网免费视频| 欧美黄色大片在线观看| 亚洲五码一区二区三区| 亚洲成人久久美女| 天天日日夜夜| 美日韩一卡二卡三卡免费人妻精品|