當前位置:編程學習大全網 - 源碼下載 - .NET中的DES對稱加密

.NET中的DES對稱加密

 DES是壹種對稱加密(Data Encryption Standard)算法 於 年得到美國 *** 的正式許可 是壹種用 位密鑰來加密 位數據的方法 壹般密碼長度為 個字節 其中 位加密密鑰 每個第 位都用作奇偶校驗

 DES算法壹般有兩個關鍵點 第壹個是加密模式 第二個是數據補位 加密模式的主要意義就是 加密算法是按塊進行加密的 例如 DES 是 Bit 壹個塊的進行加密 就是每次加密 個字節 因此每次輸入八個字節的明文輸出八個字節密文 如果是 個字節 那麽分成兩個塊依次進行加密 問題就出現在這裏 如果明文是 分塊分別進行加密 那麽加密的結果類似 C C C C C C 可以看出明文的規律 這就是 ECB 加密模式 密文可以看出明文的規律 為了解決這個問題 有了其他的加密模式 CBC 加密模式(密碼分組連接) CFB加密模式(密碼反饋模式) OFB加密模式(輸出反饋模式)CBC 是要求給壹個初始化的向量 然後將每個輸出與該向量作運算 並將運算的結果作為下壹個加密塊的初始化向量 CFB 和 OFB 則不需要提供初始化向量 直接將密碼或者輸出作為初始化向量進行運算 這樣就避免了明文的規律出現在密文中 當然缺點是解密時需要保證密文的正確性 如果網絡傳輸時發生了壹部分錯誤 則後面的解密結果就可能是錯誤的 (ECB模式僅影響傳輸錯誤的那個塊 密碼算法基本上都是分組(按快)進行加密的 如果密文長度不是剛剛好可以進行分組 怎麽辦?只能進行填充

 加密算法常見的有ECB模式和CBC模式

 第壹種電子密本方式(ECB)

 ECB模式 電子密本方式 就是將數據按照 個字節壹段進行DES加密或解密得到壹段 個字節的密文或者明文 最後壹段不足 個字節 則補足 個字節(註意 這裏就涉及到數據補位了)進行計算 之後按照順序將計算所得的數據連在壹起即可 各段數據之間互不影響 將明文分成n個 比特分組 如果明文長度不是 比特的倍數 則在明文末尾填充適當數目的規定符號 對明文組用給定的密鑰分別進行加密 行密文C=(C C …… Cn )其中Ci=DES(K xi) i= …… n 這是Java封裝的DES算法的默認模式

 第二種密文分組鏈接方式(CBC)

 密文分組鏈接方式 在CBC方式下 每個明文組xi在加密前與先壹組密文按位模二加後 再送到DES加密 CBC方式克服了ECB方式報內組重的缺點 但由於明文組加密前與壹組密文有關 因此前壹組密文的錯誤會傳播到下壹組 這是 NET封裝的DES算法的默認模式 它比較麻煩 加密步驟如下

  首先將數據按照 個字節壹組進行分組得到D D ……Dn(若數據不是 的整數倍 就涉及到數據補位了)

  第壹組數據D 與向量I異或後的結果進行DES加密得到第壹組密文C (註意 這裏有向量I的說法 ECB模式下沒有使用向量I)

  第二組數據D 與第壹組的加密結果C 異或以後的結果進行DES加密 得到第二組密文C

  之後的數據以此類推 得到Cn

  按順序連為C C C ……Cn即為加密結果

 第三種密文反饋方式(CFB) 可用於序列密碼

 明文X=(x x …… xn ) 其中xi由t個比特組成 ? 第四種輸出反饋方式(OFB) 可用於序列密碼

 與CFB唯壹不同的是OFB是直接取DES輸出的t個比特 而不是取密文的t個比特 其余都與CFB相同 但它取的是DES的輸出 所以它克服了CFB的密文錯誤傳播的缺點

 數據補位壹般有NoPadding和PKCS Padding(Java中是PKCS Padding)填充方式 PKCS Padding和PKCS Padding實際只是協議不壹樣 根據相關資料說明 PKCS Padding明確定義了加密塊是 字節 PKCS Padding加密快可以是 之間 但是封裝的DES算法默認都是 字節 所以可以認為他們壹樣 數據補位實際是在數據不滿 字節的倍數 才補充到 字節的倍數的填充過程

 NoPadding填充方式 算法本身不填充 比如 NET的padding提供了有None Zeros方式 分別為不填充和填充 的方式

 PKCS Padding(PKCS Padding)填充方式 為 NET和Java的默認填充方式 對加密數據字節長度對 取余為r 如r大於 則補 r個字節 字節為 r的值 如果r等於 則補 個字節 比如

 加密字符串為為AAA 則補位為AAA ;加密字符串為BBBBBB 則補位為BBBBBB ;加密字符串為CCCCCCCC 則補位為CCCCCCCC

  NET中的DES加密

 對於 NET 框架在System Security Cryptography命名空間下提供了DESCryptoServiceProvider作為System Security Cryptography DES加密解密的包裝接口 它提供了如下的 個方法

 public override ICryptoTransform CreateDecryptor(byte[] rgbKey byte[] rgbIV)

 public override ICryptoTransform CreateEncryptor(byte[] rgbKey byte[] rgbIV)

 public override void GenerateIV()

 public override void GenerateKey()

lishixinzhi/Article/program/net/201311/13492

  • 上一篇:如何配置mybatis開發環境
  • 下一篇:微信轉賬到銀行卡的手續費是多少?
  • copyright 2024編程學習大全網