熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

VB.NET關於加密算法

2013-11-13 10:29:34  來源: .NET編程 

  前幾天由於需要去研究了一下加密算法!這裡是一些資料! 分享下

  加密將防止數據被查看或修改並在原本不安全的信道上提供安全的通信信道它達到以下目的

  保密性防止用戶的標識或數據被讀取

  數據完整性防止數據被更改

  身份驗證確保數據發自特定的一方

  基本概念

  散列(HASH)函數

  散列(HASH)函數H也稱哈希函數或雜湊函數等是典型的多到一的函數其輸入為一可變長x(可以足夠的長)輸出一固定長的串h(一般為比輸入的串短)該串h被稱為輸入x的Hash值(或稱消息摘要Message Digest指紋密碼校驗和或消息完整性校驗)計作h=H(x)為防止傳輸和存儲的消息被有意或無意地篡改采用散列函數對消息進行運算生成消息摘要附在消息之後發出或與信息一起存儲它在報文防偽中具有重要應用

  消息摘要采用一種單向散列算法將一個消息進行換算在消息摘要算法中文件數據作為單向散列運算的輸入這個輸入通過HASH函數產生一個散列值如果改動了文件散列值就會相應地改變接收者即能檢測到這種改動過的痕跡從理論上來講攻擊者不可能制造一個替用的消息來產生一個完全相同的消息摘要Hash函數可用於數字簽名消息的完整性檢測消息的起源認證檢測等

  散列函數是安全的是指它具有

  一致性相同的輸入產生相同的輸出

  隨機性消息摘要外觀是隨機的以防被猜出源消息

  唯一性幾乎不可能找到兩個消息產生相同的消息摘要

  單向性即如果給出輸出則很難確定出輸入消息

  Hash函數H一般滿足以下幾個基本要求

  ()輸入x可以為任意長度輸出數據串長度固定

  ()正向計算容易即給定任何x容易算出H(x)反向計算困難即給出一Hash值h很難找出一特定輸入x使h=H(x)

  ()抗沖突性(抗碰撞性)包括兩個含義一是給出一消息x找出一消息y使H(x)=H(y)是計算上不可行的(弱抗沖突)二是找出任意兩條消息xy使H(x)=H(y)也是計算上不可行的(強抗沖突)

  私鑰加密

  私鑰加密又稱為對稱加密因為同一密鑰既用於加密又用於解密私鑰加密算法非常快(與公鑰算法相比)特別適用於對較大的數據流執行加密轉換

  公鑰加密(PKCS)和數字簽名

  公鑰加密使用一個必須對未經授權的用戶保密的私鑰和一個可以對任何人公開的公鑰用公鑰加密的數據只能用私鑰解密而用私鑰簽名的數據只能用公鑰驗證公鑰可以被任何人使用該密鑰用於加密要發送到私鑰持有者的數據兩個密鑰對於通信會話都是唯一的公鑰加密算法也稱為不對稱算法原因是需要用一個密鑰加密數據而需要用另一個密鑰來解密數據

  數據加密/編碼算法列表

  常見用於保證安全的加密或編碼算法如下

  常用密鑰算法

  密鑰算法用來對敏感數據摘要簽名等信息進行加密常用的密鑰算法包括

  DES(Data Encryption Standard)數據加密標准速度較快適用於加密大量數據的場合

  DES(Triple DES)是基於DES對一塊數據用三個不同的密鑰進行三次加密強度更高

  RC和 RC用變長密鑰對大量數據進行加密比 DES 快

  IDEA(International Data Encryption Algorithm)國際數據加密算法使用 位密鑰提供非常強的安全性

  RSA由 RSA 公司發明是一個支持變長密鑰的公共密鑰算法需要加密的文件快的長度也是可變的

  DSA(Digital Signature Algorithm)數字簽名算法是一種標准的 DSS(數字簽名標准)

  AES(Advanced Encryption Standard)高級加密標准是下一代的加密算法標准速度快安全級別高目前 AES 標准的一個實現是 Rijndael 算法

  BLOWFISH它使用變長的密鑰長度可達運行速度很快

  其它算法如ElGamalDeffieHellman新型橢圓曲線算法ECC等

  單向散列算法

  單向散列函數一般用於產生消息摘要密鑰加密等常見的有

  MD(Message Digest Algorithm 是RSA數據安全公司開發的一種單向散列算法MD被廣泛使用可以用來把不同長度的數據塊進行暗碼運算成一個位的數值

  SHA(Secure Hash Algorithm)這是一種較新的散列算法可以對任意長度的數據運算生成一個位的數值

  MAC(Message Authentication Code)消息認證代碼是一種使用密鑰的單向函數可以用它們在系統上或用戶之間認證文件或消息HMAC(用於消息認證的密鑰散列法)就是這種函數的一個例子

  CRC(Cyclic Redundancy Check)循環冗余校驗碼CRC校驗由於實現簡單檢錯能力強被廣泛使用在各種數據校驗應用中占用系統資源少用軟硬件均能實現是進行數據傳輸差錯檢測地一種很好的手段(CRC 並不是嚴格意義上的散列算法但它的作用與散列算法大致相同所以歸於此類)

  其它數據算法

  其它數據算法包括一些常用編碼算法及其與明文(ASCIIUnicode 等)轉換等如 Base Quoted PrintableEBCDIC 等

  算法的 NET 實現

  常見的加密和編碼算法都已經在 NET Framework中得到了實現為編碼人員提供了極大的便利性實現這些算法的名稱空間是SystemSecurityCryptography

  SystemSecurityCryptography 命名空間提供加密服務包括安全的數據編碼和解碼以及許多其他操作例如散列法隨機數字生成和消息身份驗證

  SystemSecurityCryptography 是按如下方式組織的

  私鑰加密

  私鑰加密又稱為對稱加密因為同一密鑰既用於加密又用於解密私鑰加密算法非常快(與公鑰算法相比)特別適用於對較大的數據流執行加密轉換

  NET Framework 提供以下實現私鑰加密算法的類

  DESDESCryptoServiceProvider

  RCRCCryptoServiceProvider

  Rijndael(AES)RijndaelManaged

  DESTripleDESCryptoServiceProvider

  公鑰加密和數字簽名

  公鑰加密使用一個必須對未經授權的用戶保密的私鑰和一個可以對任何人公開的公鑰用公鑰加密的數據只能用私鑰解密而用私鑰簽名的數據只能用公鑰驗證公鑰可以被任何人使用該密鑰用於加密要發送到私鑰持有者的數據兩個密鑰對於通信會話都是唯一的公鑰加密算法也稱為不對稱算法原因是需要用一個密鑰加密數據而需要用另一個密鑰來解密數據

  NET Framework 提供以下實現公鑰加密算法的類

  DSADSACryptoServiceProvider

  RSARSACryptoServiceProvider

  哈希(Hash)值

  哈希算法將任意長度的二進制值映射為固定長度的較小二進制值這個小的二進制值稱為哈希值哈希值是一段數據唯一且極其緊湊的數值表示形式如果散列一段明文而且哪怕只更改該段落的一個字母隨後的哈希都將產生不同的值要找到散列為同一個值的兩個不同的輸入在計算上是不可能的所以數據的哈希值可以檢驗數據的完整性

  NET Framework 提供以下實現數字簽名算法的類

  HMACHMACSHA (HMAC 為一種使用密鑰的 Hash 算法)

  MACMACTripleDES

  MDMDCryptoServiceProvider

  SHASHAManagedSHAManagedSHAManagedSHAManaged

  隨機數生成

  加密密鑰需要盡可能地隨機以便使生成的密鑰很難再現所以隨機數生成是許多加密操作不可分割的組成部分

  在 NET Framework 中RNGCryptoServiceProvider 是隨機數生成器算法的實現對於數據算法NET Framework 則在其它命名空間中實現如 Convert 類實現 Base 編碼SystemText 來實現編碼方式的轉換等

  簡單的例程

  首先需要引用命名空間SystemSecurityCryptography

  MD加密

  Dim md As MDCryptoServiceProvider

  Dim bytValue() As Byte 要進行加密的字節數組

  Dim bytHash() As Byte 加密後生成的字節數組

  Dim result As String

  md = New MDCryptoServiceProvider

   將原始字符串轉換成字節數組

  bytValue = SystemTextEncodingUTFGetBytes(cpuid)

   計算散列並返回一個字節數組

  bytHash = mdComputeHash(bytValue)

  mdClear()

   字節數組轉換成字符串

  result=ConvertToBaseString(bytHash)

  其他的也是類似的!可以自己去嘗試下的!

  從以上來看NET Framework 對於數據加密/編碼還是支持比較好大大地方便了開發人員但美中不足的是NET Framework 中的數據加密算法仍然不夠完全如 IDEABLOWFISH其它算法如ElGamalDeffieHellmanECC 等對於一些其它的數據校驗算法支持也不夠如 CRCSFV 等開發人員只能去從早期代碼做移植或者尋找第三方廠商的實現


From:http://tw.wingwit.com/Article/program/net/201311/13807.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.