哈希碼(hash)值是什么?什么是哈希碼(hash)?
[重要通告]如您遇疑難雜癥,本站支持知識付費業務,掃右邊二維碼加博主微信,可節省您寶貴時間哦!
哈希碼值是什么?什么事哈希碼? 哈希值,私鑰加密和公鑰加密
1. 哈希值
哈希算法將任意長度的二進制值映射為固定長度的較小二進制值,這個小的二進制值稱為哈希值。哈希值是一段數據唯一且極其緊湊的數值表示形式。如果散列一段明文而且哪怕只更改該段落的一個字母,隨后的哈希都將產生不同的值。要找到散列為同一個值的兩個不同的輸入,在計算上是不可能的。
消息身份驗證代碼 (MAC) 哈希函數通常與數字簽名一起用于對數據進行簽名,而消息檢測代碼 (MDC) 哈希函數則用于數據完整性。
小紅和小明可按下面的方式使用哈希函數以確保數據完整性。如果小紅對小明編寫一條消息并創建該消息的哈希,則小明可以在稍后散列該消息并將他的哈希與原始哈希進行比較。如果兩個哈希值相同,則該消息沒有被更改;但是,如果值不相同,則該消息在小紅編寫它之后已被更改。為了使此系統運行,小紅必須對除小明外的所有人保密原始的哈希值。
.NET Framework 提供以下實現數字簽名算法的類:
HMACSHA1
MACTripleDES
MD5CryptoServiceProvider
SHA1Managed
SHA256Managed
SHA384Managed
SHA512Managed
隨機數生成
隨機數生成是許多加密操作不可分割的組成部分。例如,加密密鑰需要盡可能地隨機,以便使生成的密鑰很難再現。加密隨機數生成器必須生成無法以計算方法推算出(低于 p < .05 的概率)的輸出;即,任何推算下一個輸出位的方法不得比隨機猜測具有更高的成功概率。.NET Framework 中的類使用隨機數生成器生成加密密鑰。
RNGCryptoServiceProvider 是隨機數生成器算法的實現。
2. 私鑰加密
私鑰加密算法使用單個私鑰來加密和解密數據。由于具有密鑰的任意一方都可以使用該密鑰解密數據,因此必須保護密鑰不被未經授權的代理得到。私鑰加密又稱為對稱加密,因為同一密鑰既用于加密又用于解密。私鑰加密算法非??欤ㄅc公鑰算法相比),特別適用于對較大的數據流執行加密轉換。
通常,私鑰算法(稱為塊密碼)用于一次加密一個數據塊。塊密碼(如 RC2、DES、TrippleDES 和 Rijndael)通過加密將 n 字節的輸入塊轉換為加密字節的輸出塊。如果要加密或解密字節序列,必須逐塊進行。由于 n 的大小很?。▽τ?RC2、DES 和 TripleDES,n = 8 字節;n = 16 [默認值];n = 24;對于 Rijndael,n = 32),因此必須對大于 n 字節的值一次加密一個塊。
基類庫中提供的塊密碼類使用稱作密碼塊鏈 (CBC) 的鏈模式,它使用一個密鑰和一個初始化向量 (IV) 對數據執行加密轉換。對于給定的私鑰 k,一個未使用初始化向量的簡單塊密碼將把相同的明文輸入塊加密為同樣的密文輸出塊。如果在明文流內有重復的塊,那么在密文流內也會有重復的塊。如果未經授權的用戶知道有關明文塊的結構的所有信息,就可以使用該信息解密已知的密文塊并有可能獲得您的密鑰。若要克服這個問題,可將上一個塊中的信息混合到加密下一個塊的過程中。這樣,兩個相同的明文塊的輸出就會不同。由于該技術使用上一個塊加密下一個塊,因此使用了一個 IV 來加密數據的第一個塊。使用該系統,未經授權的用戶有可能知道的公共消息標頭將無法用于對密鑰進行反向工程。
可以危及用此類型密碼加密的數據的一個方法是,對每個可能的密鑰執行窮舉搜索。根據用于執行加密的密鑰大小,即使使用最快的計算機執行這種搜索,也極其耗時,因此難以實施。使用較大的密鑰大小將使解密更加困難。雖然從理論上說加密不會使對手無法檢索加密的數據,但它確實極大增加了這樣做的成本。如果執行徹底搜索來檢索只在幾天內有意義的數據需要花費三個月的時間,那么窮舉搜索的方法是不實用的。
私鑰加密的缺點是它假定雙方已就密鑰和 IV 達成協議,并且互相傳達了密鑰和 IV 的值。并且,密鑰必須對未經授權的用戶保密。由于存在這些問題,私鑰加密通常與公鑰加密一起使用,來秘密地傳達密鑰和 IV 的值。
假設小紅和小明是要在不安全的信道上進行通信的雙方,他們可能按以下方式使用私鑰加密。小紅和小明都同意使用一種具有特定密鑰和 IV 的特定算法(如 Rijndael)。小紅撰寫一條消息并創建要在其上發送該消息的網絡流。接下來,她使用該密鑰和 IV 加密該文本,并通過 Internet 發送該文本。她沒有將密鑰和 IV 發送給小明。小明收到該加密文本并使用預先商定的密鑰和 IV 對它進行解密。如果該傳輸被截獲,截獲者將無法恢復原始消息,原因是截獲者不知道密鑰或 IV。在這個方案中,密鑰必須保密,但 IV 不需要保密。在一個實際方案中,將由小紅或小明生成私鑰并使用公鑰(不對稱)加密將該私鑰(對稱)傳遞給對方。有關更多信息,請參見“公鑰加密”。
.NET Framework 提供以下實現私鑰加密算法的類:
DESCryptoServiceProvider
RC2CryptoServiceProvider
RijndaelManaged
TripleDESCryptoServiceProvider
3. 公鑰加密
公鑰加密使用一個必須對未經授權的用戶保密的私鑰和一個可以對任何人公開的公鑰。公鑰和私鑰都在數學上相關聯;用公鑰加密的數據只能用私鑰解密,而用私鑰簽名的數據只能用公鑰驗證。公鑰可以被任何人使用;該密鑰用于加密要發送到私鑰持有者的數據。兩個密鑰對于通信會話都是唯一的。公鑰加密算法也稱為不對稱算法,原因是需要用一個密鑰加密數據而需要用另一個密鑰來解密數據。
公鑰加密算法使用固定的緩沖區大小,而私鑰加密算法使用長度可變的緩沖區。公鑰算法無法像私鑰算法那樣將數據鏈接起來成為流,原因是它只可以加密少量數據。因此,不對稱操作不使用與對稱操作相同的流模型。
雙方(小紅和小明)可以按照下列方式使用公鑰加密。首先,小紅生成一個公鑰/私鑰對。如果小明想要給小紅發送一條加密的消息,他將向她索要她的公鑰。小紅通過不安全的網絡將她的公鑰發送給小明,小明接著使用該密鑰加密消息。(如果小明在不安全的信道如公共網絡上收到小紅的密鑰,則小明必須同小紅驗證他具有她的公鑰的正確副本。)小明將加密的消息發送給小紅,而小紅使用她的私鑰解密該消息。
但是,在傳輸小紅的公鑰期間,未經授權的代理可能截獲該密鑰。而且,同一代理可能截獲來自小明的加密消息。但是,該代理無法用公鑰解密該消息。該消息只能用小紅的私鑰解密,而該私鑰沒有被傳輸。小紅不使用她的私鑰加密給小明的答復消息,原因是任何具有該公鑰的人都可以解密該消息。如果小紅想要將消息發送回小明,她將向小明索要他的公鑰并使用該公鑰加密她的消息。然后,小明使用與他相關聯的私鑰來解密該消息。
在一個實際方案中,小紅和小明使用公鑰(不對稱)加密來傳輸私(對稱)鑰,而對他們的會話的其余部分使用私鑰加密。
公鑰加密具有更大的密鑰空間(或密鑰的可能值范圍),因此不大容易受到對每個可能密鑰都進行嘗試的窮舉攻擊的影響。由于不必保護公鑰,因此它易于分發。公鑰算法可用于創建數字簽名以驗證數據發送方的標識。但是,公鑰算法非常緩慢(與私鑰算法相比),不適合用來加密大量數據。公鑰算法僅對傳輸很少量的數據有用。公鑰加密通常用于加密一個私鑰算法將要使用的密鑰和 IV。傳輸密鑰和 IV 后,會話的其余部分將使用私鑰加密。
.NET Framework 提供以下實現公鑰加密算法的類:
DSACryptoServiceProvider
RSACryptoServiceProvider
問題未解決?付費解決問題加Q或微信 2589053300 (即Q號又微信號)右上方掃一掃可加博主微信
所寫所說,是心之所感,思之所悟,行之所得;文當無敷衍,落筆求簡潔。 以所舍,求所獲;有所依,方所成!