導航:首頁 > 文檔加密 > 等位元組加密演算法

等位元組加密演算法

發布時間:2024-04-16 06:14:37

① aes128綆楁硶 瀵嗘枃鍜屾槑鏂囧備綍綆楀嚭瀵嗙爜

AES-128鏄涓縐嶅圭О鍔犲瘑綆楁硶錛屼嬌鐢ㄧ浉鍚岀殑瀵嗛掗榪涜屽姞瀵嗗拰瑙e瘑銆傚瘑閽ラ暱搴︿負128浣嶏紙16瀛楄妭錛夛紝瀵嗛掗鍙浠ユ槸闅忔満鐢熸垚鐨勩
瑕佽$畻鍑哄瘑鐮侊紙鍗沖瘑鏂囧拰鏄庢枃涔嬮棿鐨勮漿鎹錛夛紝闇瑕佷互涓嬫ラわ細
1. 瀵嗛掗鐢熸垚錛氶栧厛錛岄渶瑕佺敓鎴愪竴涓128浣嶇殑瀵嗛掗銆傚瘑閽ュ彲浠ユ槸闅忔満鐢熸垚鐨勶紝涔熷彲浠ヤ嬌鐢ㄥ瘑鐮佸﹀畨鍏ㄧ殑浼闅忔満鏁扮敓鎴愬櫒鐢熸垚銆
2. 鍒嗙粍鍜屽~鍏咃細灝嗘槑鏂囧垎鎴愬滻瀹氶暱搴︾殑鍧楋紙閫氬父涓128浣嶏級銆傚傛灉鏄庢枃鐨勯暱搴︿笉鏄鍧楅暱搴︾殑鏁存暟鍊嶏紝闇瑕佽繘琛屽~鍏咃紝浠ユ弧瓚沖潡闀垮害鐨勮佹眰銆
3. 鍒濆嬭疆瀵嗛掗鍔狅細灝嗙敓鎴愮殑瀵嗛掗涓庣涓涓瀵嗘枃鍧楄繘琛屽紓鎴栨搷浣溿
4. 杞鍑芥暟錛欰ES綆楁硶涓浣跨敤浜嗕竴緋誨垪鐨勮疆鍑芥暟錛屽寘鎷瀛楄妭浠f崲錛圫ubBytes錛夈佽屼綅縐伙紙ShiftRows錛夈佸垪娣鋒穯錛圡ixColumns錛夊拰杞瀵嗛掗鍔狅紙AddRoundKey錛夌瓑鎿嶄綔銆傝繖浜涙搷浣滃湪姣忎竴杞涓閮戒細琚搴旂敤鍒板瘑鏂囧潡涓娿
5. 杞鏁板驚鐜錛氭牴鎹瓵ES綆楁硶鐨勮勫畾錛屾牴鎹瀵嗛掗闀垮害紜瀹氬姞瀵嗚疆鏁般傛瘡涓杞涓閮戒細瀵瑰瘑鏂囧潡榪涜屼竴緋誨垪鐨勮疆鍑芥暟鎿嶄綔銆
6. 鏈鍚庝竴杞錛氬湪鏈鍚庝竴杞涓錛屼笉浼氭墽琛屽垪娣鋒穯錛圡ixColumns錛夋搷浣溿
7. 瀵嗘枃鐢熸垚錛氱粡榪囨墍鏈夎疆鏁扮殑澶勭悊鍚庯紝鏈鍚庡緱鍒扮殑瀵嗘枃鍗充負鍔犲瘑鍚庣殑緇撴灉銆
瑙e瘑榪囩▼涓庡姞瀵嗚繃紼嬬浉浼礆紝鍙鏄鍦ㄨ疆瀵嗛掗鍔狅紙AddRoundKey錛夋ラや腑浣跨敤鐨勬槸閫嗗瘑閽ワ紝浠ラ嗗簭榪涜岃В瀵嗘搷浣溿
闇瑕佹敞鎰忕殑鏄錛屽姞瀵嗗拰瑙e瘑浣跨敤鐩稿悓鐨勫瘑閽ワ紝鍥犳ゅ湪榪涜屾暟鎹浼犺緭鏃訛紝闇瑕佺『淇濆瘑閽ョ殑瀹夊叏鎬э紝浠ュ厤琚鏈鎺堟潈鐨勪漢鑾峰緱瀵嗛掗騫惰В瀵嗘暟鎹銆

② RSA加密填充方式

RSA加密常用的填充方式有下面3種:

1.RSA_PKCS1_PADDING 填充模式,最常用的模式

要求:

輸入:必須 比 RSA 鑰模長(molus) 短至少11個位元組, 也就是RSA_size(rsa) – 11。如果輸入的明文過長,必須切割,然後填充

輸出:和molus一樣長

根據這個要求,對於512bit的密鑰,block length = 512/8 – 11 = 53 位元組

2.RSA_PKCS1_OAEP_PADDING

輸入:RSA_size(rsa) – 41

輸出:和molus一樣長

3.for RSA_NO_PADDING不填充

輸入:可以和RSA鑰模長一樣長,如果輸入的明文過長,必須切割,然後填充

輸出:和molus一樣長

跟DES,AES一樣,RSA也是一個塊加密演算法( block cipher algorithm),總是在一個固定長度的塊上進行操作。但跟AES等不同的是,block length是跟key length有關的。每次RSA加密的明文的長度是受RSA填充模式限制的,但是RSA每次加密的塊長度就是key length。

需要注意:

假如你選擇的秘鑰長度為1024bit共128個byte:

1.當你在客戶端選擇RSA_NO_PADDING填充模式時,如果你的明文不夠128位元組加密的時候會在你的明文前面,前向的填充零。解密後的明文也會包括前面填充的零,這是伺服器需要注意把解密後的欄位前向填充的零去掉,才是真正之前加密的明文。

2.當你選擇RSA_PKCS1_PADDING填充模式時,如果你的明文不夠128位元組加密的時候會在你的明文中隨機填充一些數據,所以會導致對同樣的明文每次加密後的結果都不一樣。對加密後的密文,伺服器使用相同的填充方式都能解密。解密後的明文也就是之前加密的明文。

3.RSA_PKCS1_OAEP_PADDING填充模式沒有使用過, 他是PKCS#1推出的新的填充方式,安全性是最高的,和前面RSA_PKCS1_PADDING的區別就是加密前的編碼方式不一樣。

Java默認RSA實現

一個優秀的加密必須每次生成的密文都不一致,即使每次你的明文一樣、使用同一個公鑰。因為這樣才能把明文信息更安全地隱藏起來。

Java 默認的 RSA 實現是 "RSA/None/PKCS1Padding"(比如 Cipher cipher = Cipher.getInstance("RSA");句,這個 Cipher 生成的密文總是不一致的),Bouncy Castle 的默認 RSA 實現是 "RSA/None/NoPadding"。

為什麼 Java 默認的 RSA 實現每次生成的密文都不一致呢,即使每次使用同一個明文、同一個公鑰?這是因為 RSA 的 PKCS #1 padding 方案在加密前對明文信息進行了隨機數填充。

你可以使用以下辦法讓同一個明文、同一個公鑰每次生成同一個密文,但是你必須意識到你這么做付出的代價是什麼。比如,你可能使用 RSA 來加密傳輸,但是由於你的同一明文每次生成的同一密文,攻擊者能夠據此識別到同一個信息都是何時被發送。

③ 甯歌佺殑緙栫爜鍜屽姞瀵嗙畻娉

甯歌佺殑緙栫爜鍜屽姞瀵嗙畻娉曟湁錛欰SCII緙栫爜銆乥ase瀹舵棌緙栫爜銆

1銆丄SCII緙栫爜

ASCII鐮佹槸瀵硅嫳璇瀛楃︿笌浜岃繘鍒朵綅涔嬮棿鐨勫叧緋伙紝鍋氫簡緇熶竴瑙勫畾銆傚熀鏈鐨凙SCII瀛楃﹂泦鍏辨湁128涓瀛楃︼紝鍏朵腑鏈96涓鍙鎵撳嵃瀛楃︼紝鍖呮嫭甯哥敤鐨勫瓧姣嶃佹暟瀛椼佹爣鐐圭﹀彿絳夈

濡傦細絀烘牸SPACE鏄32錛堜簩榪涘埗錛00100000錛夛紱鏁板瓧0鏄48錛堜簩榪涘埗錛00110000錛夛紱澶у啓瀛楁瘝A鏄65錛堜簩榪涘埗錛01000001錛夈傚彟澶栬繕鏈32涓鎺у埗瀛楃︼紙涓嶈兘鎵撳嵃鍑烘潵錛夈傝繖128涓絎﹀彿錛屽彧鍗犵敤浜嗕竴涓瀛楄妭鐨勫悗闈7浣嶏紝鏈鍓嶉潰鐨勪竴浣嶇粺涓瑙勫畾涓0銆

2銆丅ase64緙栫爜

Base16緙栫爜鏄灝嗕簩榪涘埗鏂囦歡杞鎹㈡垚鐢16涓瀛楃︾粍鎴愮殑鏂囨湰錛宐ase32鐨勭紪鐮佽〃鏄鐢盇-Z銆2-7錛32涓鍙瑙佸瓧絎︽瀯鎴愶紝鈥=鈥濈﹀彿鐢ㄤ綔鍚庣紑濉鍏呫

base64鐨勭紪鐮佽〃鏄鐢盇-Z銆乤-z銆0-9銆+銆/64涓鍙瑙佸瓧絎︽瀯鎴愶紝鈥=鈥濈﹀彿鐢ㄤ綔鍚庣紑濉鍏呫俠ase58鐨勭紪鐮佽〃鐩告瘮base64灝戜簡鏁板瓧0錛屽ぇ鍐欏瓧姣岻錛孫錛屽皬鍐欏瓧姣峫錛屼互鍙婄﹀彿鈥+鈥欏拰鈥/鈥欍

base91鐨勫瘑鏂囩敱91涓瀛楃0-9錛宎-z錛孉-Z,!#$%&()*+,./:;<=>?@[]^_`{|}~鈥濈粍鎴愶紝Base100緙栫爜/瑙g爜宸ュ叿鍙堝悕錛欵moji琛ㄦ儏絎﹀彿緙栫爜/瑙g爜錛屽彲灝嗘枃鏈鍐呭圭紪鐮佷負Emoji琛ㄦ儏絎﹀彿錛涘悓鏃朵篃鍙浠ュ皢緙栫爜鍚庣殑Emoji琛ㄦ儏絎﹀彿鍐呭硅В鐮佷負鏂囨湰銆

瀛楄妭鐮佽漿鏂囨湰鐨勭紪鐮佹柟寮忥細

鍦ㄨ$畻鏈轟腑錛屾棤璁烘槸鍐呭瓨銆佺佺洏銆佺綉緇滀紶杈擄紝娑夊強鍒扮殑鏁版嵁閮芥槸浠ヤ簩榪涘埗鏍煎紡鏉ュ瓨鍌ㄦ垨浼犺緭鐨勩傛瘡涓涓浜岃繘鍒朵綅錛坆it錛夊彧鑳芥槸0鎴1銆備簩榪涘埗浣嶄笉浼氬崟鐙瀛樺湪錛岃屾槸浠8涓浜岃繘鍒朵綅緇勬垚1涓瀛楄妭錛坆yte錛夌殑鏂瑰紡瀛樺湪錛屽嵆1byte=8 bit銆

瀛楄妭鐮佹棤娉曠洿鎺ヨ漿涓哄彲鎵撳嵃鐨勬枃鏈瀛楃︼紝鏈夋椂鎯抽氳繃鏂囨湰鏂瑰紡閰嶇疆銆佸瓨鍌ㄣ佷紶杈撲竴孌典簩榪涘埗瀛楄妭鐮侊紝姣斿傞厤緗鏂囦歡銆丠TML/XML銆乁RL銆乪-mail姝f枃銆丠TTP Header絳変粎鏀鎸佹枃鏈鐨勫満鏅涓嬶紝灝遍渶瑕佸皢浜岃繘鍒跺瓧鑺傜爜杞涓烘枃鏈瀛楃︿覆銆

浜岃繘鍒跺瓧鑺傜爜杞鏂囨湰瀛楃︽湁寰堝氱嶆柟寮忥紝鏈綆鍗曠殑鏂瑰紡鏄鐩存帴鐢0鍜1鏉ヨ〃紺恆備絾鏄榪欐牱鐨勮瘽錛8涓0/1瀛楃︽墠鑳借〃紺1涓瀛楄妭錛岄暱搴﹀お闀垮緢涓嶆柟渚褲

浠ヤ笂鍐呭瑰弬鑰冿細鐧懼害鐧劇-ASCII

④ aes演算法是什麼

AES:Advanced Encryption Standard(高級加密標准),是美國國家標准與技術研究所用於加密電子數據的規范,該演算法匯聚了設計簡單、密鑰安裝快、需要的內存空間少、在所有的平台上運行良好、支持並行處理並且可以抵抗所有已知攻擊等優點。

AES是一個迭代的、對稱密鑰分組的密碼,它可以使用128、192 和 256 位密鑰,並且用 128 位(16位元組)分組加密和解密數據。

AES具有應用范圍廣

等待時間短、相對容易隱藏、吞吐量高等優點,在性能等各方面都優於WEP演算法。利用此演算法加密,WLAN的安全性將會獲得大幅度提高。AES演算法已經在802.11i標准中得到最終確認,成為取代WEP的新一代的加密演算法。但是由於AES演算法對硬體要求比較高,因此AES無法通過在原有設備上升級固件實現,必須重新設計晶元。

以上內容參考:網路-AES技術

⑤ 常用的加密演算法有哪些

對稱密鑰加密

對稱密鑰加密 Symmetric Key Algorithm 又稱為對稱加密、私鑰加密、共享密鑰加密:這類演算法在加密和解密時使用相同的密鑰,或是使用兩個可以簡單的相互推算的密鑰,對稱加密的速度一般都很快。

⑥ 十大常見密碼加密方式

一、密鑰散列

採用MD5或者SHA1等散列演算法,對明文進行加密。嚴格來說,MD5不算一種加密演算法,而是一種摘要演算法。無論多長的輸入,MD5都會輸出一個128位(16位元組)的散列值。而SHA1也是流行的消息摘要演算法,它可以生成一個被稱為消息摘要的160位(20位元組)散列值。MD5相對SHA1來說,安全性較低,但是速度快;SHA1和MD5相比安全性高,但是速度慢。

二、對稱加密

採用單鑰密碼系統的加密方法,同一個密鑰可以同時用作信息的加密和解密,這種加密方法稱為對稱加密。對稱加密演算法中常用的演算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等。

三、非對稱加密

非對稱加密演算法是一種密鑰的保密方法,它需要兩個密鑰來進行加密和解密,這兩個密鑰是公開密鑰和私有密鑰。公鑰與私鑰是一對,如果用公鑰對數據進行加密,只有用對應的私鑰才能解密。非對稱加密演算法有:RSA、Elgamal、背包演算法、Rabin、D-H、ECC(橢圓曲線加密演算法)。

四、數字簽名

數字簽名(又稱公鑰數字簽名)是只有信息的發送者才能產生的別人無法偽造的一段數字串,這段數字串同時也是對信息的發送者發送信息真實性的一個有效證明。它是一種類似寫在紙上的普通的物理簽名,但是在使用了公鑰加密領域的技術來實現的,用於鑒別數字信息的方法。

五、直接明文保存

早期很多這樣的做法,比如用戶設置的密碼是「123」,直接就將「123」保存到資料庫中,這種是最簡單的保存方式,也是最不安全的方式。但實際上不少互聯網公司,都可能採取的是這種方式。

六、使用MD5、SHA1等單向HASH演算法保護密碼

使用這些演算法後,無法通過計算還原出原始密碼,而且實現比較簡單,因此很多互聯網公司都採用這種方式保存用戶密碼,曾經這種方式也是比較安全的方式,但隨著彩虹表技術的興起,可以建立彩虹表進行查表破解,目前這種方式已經很不安全了。

七、特殊的單向HASH演算法

由於單向HASH演算法在保護密碼方面不再安全,於是有些公司在單向HASH演算法基礎上進行了加鹽、多次HASH等擴展,這些方式可以在一定程度上增加破解難度,對於加了「固定鹽」的HASH演算法,需要保護「鹽」不能泄露,這就會遇到「保護對稱密鑰」一樣的問題,一旦「鹽」泄露,根據「鹽」重新建立彩虹表可以進行破解,對於多次HASH,也只是增加了破解的時間,並沒有本質上的提升。

八、PBKDF2

該演算法原理大致相當於在HASH演算法基礎上增加隨機鹽,並進行多次HASH運算,隨機鹽使得彩虹表的建表難度大幅增加,而多次HASH也使得建表和破解的難度都大幅增加。

九、BCrypt

BCrypt 在1999年就產生了,並且在對抗 GPU/ASIC 方面要優於 PBKDF2,但是我還是不建議你在新系統中使用它,因為它在離線破解的威脅模型分析中表現並不突出。

十、SCrypt

SCrypt 在如今是一個更好的選擇:比 BCrypt設計得更好(尤其是關於內存方面)並且已經在該領域工作了 10 年。另一方面,它也被用於許多加密貨幣,並且我們有一些硬體(包括 FPGA 和 ASIC)能實現它。 盡管它們專門用於采礦,也可以將其重新用於破解。

⑦ 加密技術06-加密總結

對稱密碼是一種用相同的密鑰進行加密和解密的技術,用於確保消息的機密性。在對稱密碼的演算法方面,目前主要使用的是 AES。盡管對稱密碼能夠確保消息的機密性,但需要解決將解密密鑰配送給接受者的密鑰配送問題。

主要演算法

DES

數據加密標准(英語:Data Encryption Standard,縮寫為 DES)是一種對稱密鑰加密塊密碼演算法,1976年被美國聯邦政府的國家標准局確定為聯邦資料處理標准(FIPS),隨後在國際上廣泛流傳開來。它基於使用56位密鑰的對稱演算法。

DES現在已經不是一種安全的加密方法,主要因為它使用的56位密鑰過短。

原理請參考: 加密技術01-對稱加密-DES原理

3DES

三重數據加密演算法(英語:Triple Data Encryption Algorithm,縮寫為TDEA,Triple DEA),或稱3DES(Triple DES),是一種對稱密鑰加密塊密碼,相當於是對每個數據塊應用三次DES演算法。由於計算機運算能力的增強,原版DES由於密鑰長度過低容易被暴力破解;3DES即是設計用來提供一種相對簡單的方法,即通過增加DES的密鑰長度來避免類似的攻擊,而不是設計一種全新的塊密碼演算法。

注意:有3個獨立密鑰的3DES的密鑰安全性為168位,但由於中途相遇攻擊(知道明文和密文),它的有效安全性僅為112位。

3DES使用「密鑰包」,其包含3個DES密鑰,K1,K2和K3,均為56位(除去奇偶校驗位)。

密文 = E k3 (D k2 (E k1 (明文)))

而解密則為其反過程:

明文 = D k3 (E k2 (D k1 (密文)))

AES

AES 全稱 Advanced Encryption Standard(高級加密標准)。它的出現主要是為了取代 DES 加密演算法的,因為 DES 演算法的密鑰長度是 56 位,因此演算法的理論安全強度是 56 位。於是 1997 年 1 月 2 號,美國國家標准技術研究所宣布希望徵集高級加密標准,用以取代 DES。AES 也得到了全世界很多密碼工作者的響應,先後有很多人提交了自己設計的演算法。最終有5個候選演算法進入最後一輪:Rijndael,Serpent,Twofish,RC6 和 MARS。最終經過安全性分析、軟硬體性能評估等嚴格的步驟,Rijndael 演算法獲勝。

AES 密碼與分組密碼 Rijndael 基本上完全一致,Rijndael 分組大小和密鑰大小都可以為 128 位、192 位和 256 位。然而 AES 只要求分組大小為 128 位,因此只有分組長度為 128 位的 Rijndael 才稱為 AES 演算法。

本文 AES 默認是分組長度為 128 位的 Rijndael 演算法

原理請參考: 加密技術02-對稱加密-AES原理

演算法對比

公鑰密碼是一種用不同的密鑰進行加密和解密的技術,和對稱密碼一樣用於確保消息的機密性。使用最廣泛的一種公鑰密碼演算法是 RAS。和對稱密碼相比,公鑰密碼的速度非常慢,因此一般都會和對稱密碼一起組成混合密碼系統來使用。公鑰密碼能夠解決對稱密碼中的密鑰交換問題,但存在通過中間人攻擊被偽裝的風險,因此需要對帶有數字簽名的公鑰進行認證。

公鑰密碼學的概念是為了解決對稱密碼學中最困難的兩個問題而提出

應用場景

幾個誤解

主要演算法

Diffie–Hellman 密鑰交換

迪菲-赫爾曼密鑰交換(英語:Diffie–Hellman key exchange,縮寫為D-H) 是一種安全協議。它可以讓雙方在完全沒有對方任何預先信息的條件下通過不安全信道創建起一個密鑰。這個密鑰可以在後續的通訊中作為對稱密鑰來加密通訊內容。公鑰交換的概念最早由瑞夫·墨克(Ralph C. Merkle)提出,而這個密鑰交換方法,由惠特菲爾德·迪菲(Bailey Whitfield Diffie)和馬丁·赫爾曼(Martin Edward Hellman)在1976年發表,也是在公開文獻中發布的第一個非對稱方案。

Diffie–Hellman 演算法的有效性是建立在計算離散對數很困難的基礎上。簡單地說,我們可如下定義離散對數。首先定義素數 p 的本原跟。素數 p 的本原根是一個整數,且其冪可以產生 1 到 p-1 之間所有整數,也就是說若 a 是素數 p 的本原根,則

a mod p, a 2 mod p,..., a p-1 mod p 各不相同,它是整數 1 到 p-1 的一個置換。

對任意整數 b 和素數 p 的本原跟 a,我們可以找到唯一的指數 i 使得

b ≡ a i (mod p) 其中 0 <= i <= p-1

其中 a, b, p 這些是公開的,i 是私有的,破解難度就是計算 i 的難度。

Elgamal

1985年,T.Elgamal 提出了一種基於離散對數的公開密鑰體制,一種與 Diffie-Hellman 密鑰分配體制密切相關。Elgamal 密碼體系應用於一些技術標准中,如數字簽名標准(DSS) 和 S/MIME 電子郵件標准。

基本原理就是利用 Diffie–Hellman 進行密鑰交換,假設交換的密鑰為 K,然後用 K 對要發送的消息 M,進行加密處理。

所以 Elgamal 的安全系數取決於 Diffie–Hellman 密鑰交換。

另外 Elgamal 加密後消息發送的長度會增加一倍。

RSA

MIT 的羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)在 1977 年提出並於 1978 年首次發表的演算法。RSA 是最早滿足要求的公鑰演算法之一,自誕生日起就成為被廣泛接受且被實現的通用的公鑰加密方法。

RSA 演算法的有效性主要依據是大數因式分解是很困難的。

原理請參考: 加密技術03-非對稱加密-RSA原理

ECC

大多數使用公鑰密碼學進行加密和數字簽名的產品和標准都使用 RSA 演算法。我們知道,為了保證 RSA 使用的安全性,最近這些年來密鑰的位數一直在增加,這對使用 RSA 的應用是很重的負擔,對進行大量安全交易的電子商務更是如此。近來,出現的一種具有強大競爭力的橢圓曲線密碼學(ECC)對 RSA 提出了挑戰。在標准化過程中,如關於公鑰密碼學的 IEEE P1363 標准中,人們也已考慮了 ECC。

與 RSA 相比,ECC 的主要誘人之處在於,它可以使用比 RSA 短得多的密鑰得到相同安全性,因此可以減少處理負荷。

ECC 比 RSA 或 Diffie-Hellman 原理復雜很多,本文就不多闡述了。

演算法對比

公鑰密碼體制的應用

密碼分析所需計算量( NIST SP-800-57 )

註:L=公鑰的大小,N=私鑰的大小

散列函數是一種將長消息轉換為短散列值的技術,用於確保消息的完整性。在散列演算法方面,SHA-1 曾被廣泛使用,但由於人們已經發現了一些針對該演算法理論上可行的攻擊方式,因此該演算法不應再被用於新的用途。今後我們應該主要使用的演算法包括目前已經在廣泛使用的 SHA-2,以及具有全新結構的 SHA-3 演算法。散列函數可以單獨使用,也可以作為消息認證、數字簽名以及偽隨機數生成器等技術的組成元素來使用。

主要應用

主要演算法

MD5

MD5消息摘要演算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數,可以產生出一個 128 位( 16 位元組,被表示為 32 位十六進制數字)的散列值(hash value),用於確保信息傳輸完整一致。MD5 由美國密碼學家羅納德·李維斯特(Ronald Linn Rivest)設計,於 1992 年公開,用以取代 MD4 演算法。這套演算法的程序在 RFC 1321 中被加以規范。

2009年,中國科學院的謝濤和馮登國僅用了 2 20.96 的碰撞演算法復雜度,破解了MD5的碰撞抵抗,該攻擊在普通計算機上運行只需要數秒鍾。2011年,RFC 6151 禁止MD5用作密鑰散列消息認證碼。

原理請參考: 加密技術04-哈希演算法-MD5原理

SHA-1

SHA-1(英語:Secure Hash Algorithm 1,中文名:安全散列演算法1)是一種密碼散列函數,美國國家安全局設計,並由美國國家標准技術研究所(NIST)發布為聯邦資料處理標准(FIPS)。SHA-1可以生成一個被稱為消息摘要的160位(20位元組)散列值,散列值通常的呈現形式為40個十六進制數。

2005年,密碼分析人員發現了對SHA-1的有效攻擊方法,這表明該演算法可能不夠安全,不能繼續使用,自2010年以來,許多組織建議用SHA-2或SHA-3來替換SHA-1。Microsoft、Google以及Mozilla都宣布,它們旗下的瀏覽器將在2017年停止接受使用SHA-1演算法簽名的SSL證書。

2017年2月23日,CWI Amsterdam與Google宣布了一個成功的SHA-1碰撞攻擊,發布了兩份內容不同但SHA-1散列值相同的PDF文件作為概念證明。

2020年,針對SHA-1的選擇前綴沖突攻擊已經實際可行。建議盡可能用SHA-2或SHA-3取代SHA-1。

原理請參考: 加密技術05-哈希演算法-SHA系列原理

SHA-2

SHA-2,名稱來自於安全散列演算法2(英語:Secure Hash Algorithm 2)的縮寫,一種密碼散列函數演算法標准,由美國國家安全局研發,由美國國家標准與技術研究院(NIST)在2001年發布。屬於SHA演算法之一,是SHA-1的後繼者。其下又可再分為六個不同的演算法標准,包括了:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。

SHA-2 系列的演算法主要思路和 SHA-1 基本一致

原理請參考: 加密技術05-哈希演算法-SHA系列原理

SHA-3

SHA-3 第三代安全散列演算法(Secure Hash Algorithm 3),之前名為 Keccak 演算法。

Keccak 是一個加密散列演算法,由 Guido Bertoni,Joan Daemen,Michaël Peeters,以及 Gilles Van Assche 在 RadioGatún 上設計。

2012年10月2日,Keccak 被選為 NIST 散列函數競賽的勝利者。SHA-2 目前沒有出現明顯的弱點。由於對 MD5、SHA-0 和 SHA-1 出現成功的破解,NIST 感覺需要一個與之前演算法不同的,可替換的加密散列演算法,也就是現在的 SHA-3。

SHA-3 在2015年8月5日由 NIST 通過 FIPS 202 正式發表。

原理請參考: 加密技術05-哈希演算法-SHA系列原理

演算法對比

⑧ 開發中常見的加密方式及應用

開發中常見的加密方式及應用

一、base64

簡述:Base64是網路上最常見的用於傳輸8Bit 位元組碼 的編碼方式之一,Base64就是一種基於64個可列印字元來表示二進制數據的方法。所有的數據都能被編碼為並只用65個字元就能表示的文本文件。( 65字元:A~Z a~z 0~9 + / = )編碼後的數據~=編碼前數據的4/3,會大1/3左右(圖片轉化為base64格式會比原圖大一些)。

應用:Base64編碼是從二進制到字元的過程,可用於在 HTTP 環境下傳遞較長的標識信息。例如,在Java Persistence系統Hibernate中,就採用了Base64來將一個較長的唯一 標識符 (一般為128-bit的UUID)編碼為一個字元串,用作HTTP 表單 和HTTP GET URL中的參數。在其他應用程序中,也常常需要把二進制 數據編碼 為適合放在URL(包括隱藏 表單域 )中的形式。此時,採用Base64編碼具有不可讀性,需要解碼後才能閱讀。

命令行進行Base64編碼和解碼

編碼:base64 123.png -o 123.txt

解碼:base64 123.txt -o test.png -D Base64編碼的原理

原理:

1)將所有字元轉化為ASCII碼;

2)將ASCII碼轉化為8位二進制;

3)將二進制3個歸成一組(不足3個在後邊補0)共24位,再拆分成4組,每組6位;

4)統一在6位二進制前補兩個0湊足8位;

5)將補0後的二進制轉為十進制;

6)從Base64編碼表獲取十進制對應的Base64編碼;

Base64編碼的說明:

a.轉換的時候,將三個byte的數據,先後放入一個24bit的緩沖區中,先來的byte占高位。

b.數據不足3byte的話,於緩沖區中剩下的bit用0補足。然後,每次取出6個bit,按照其值選擇查表選擇對應的字元作為編碼後的輸出。

c.不斷進行,直到全部輸入數據轉換完成。

d.如果最後剩下兩個輸入數據,在編碼結果後加1個「=」;

e.如果最後剩下一個輸入數據,編碼結果後加2個「=」;

f.如果沒有剩下任何數據,就什麼都不要加,這樣才可以保證資料還原的正確性。

二、HASH加密/單向散列函數

簡述:Hash演算法特別的地方在於它是一種單向演算法,用戶可以通過Hash演算法對目標信息生成一段特定長度(32個字元)的唯一的Hash值,卻不能通過這個Hash值重新獲得目標信息。對用相同數據,加密之後的密文相同。 常見的Hash演算法有MD5和SHA。由於加密結果固定,所以基本上原始的哈希加密已經不再安全,於是衍生出了加鹽的方式。加鹽:先對原始數據拼接固定的字元串再進行MD5加密。

特點:

1) 加密 後密文的長度是定長(32個字元的密文)的

2)如果明文不一樣,那麼散列後的結果一定不一樣

3)如果明文一樣,那麼加密後的密文一定一樣(對相同數據加密,加密後的密文一樣)

4)所有的加密演算法是公開的

5)不可以逆推反算(不能根據密文推算出明文),但是可以暴力 破解 ,碰撞監測

原理:MD5消息摘要演算法,屬Hash演算法一類。MD5演算法對輸入任意長度的消息進行運行,產生一個128位的消息摘要。

1)數據填充

對消息進行數據填充,使消息的長度對512取模得448,設消息長度為X,即滿足X mod 512=448。根據此公式得出需要填充的數據長度。

填充方法:在消息後面進行填充,填充第一位為1,其餘為0。

2)添加信息長度

在第一步結果之後再填充上原消息的長度,可用來進行的存儲長度為64位。如果消息長度大於264,則只使用其低64位的值,即(消息長度 對264取模)。

在此步驟進行完畢後,最終消息長度就是512的整數倍。

3)數據處理

准備需要用到的數據:

4個常數:A = 0x67452301, B = 0x0EFCDAB89, C = 0x98BADCFE, D = 0x10325476;

4個函數:F(X,Y,Z)=(X & Y) | ((~X) & Z);G(X,Y,Z)=(X & Z) | (Y & (~Z));H(X,Y,Z)=X ^ Y ^ Z;I(X,Y,Z)=Y ^ (X | (~Z));

把消息分以512位為一分組進行處理,每一個分組進行4輪變換,以上面所說4個常數為起始變數進行計算,重新輸出4個變數,以這4個變數再進行下一分組的運算,如果已經是最後一個分組,則這4個變數為最後的結果,即MD5值。

三、對稱加密

經典演算法:

1)DES數據加密標准

DES演算法的入口參數有三個:Key、Data、Mode。其中Key為8個位元組共64位,是DES演算法的工作密鑰;Data也為8個位元組64位,是要被加密或被解密的數據;Mode為DES的工作方式,有兩種:加密或解密。

DES演算法是這樣工作的:如Mode為加密,則用Key去把數據Data進行加密, 生成Data的密碼形式(64位)作為DES的輸出結果;如Mode為解密,則用Key去把密碼形式的數據Data解密,還原為Data的明碼形式(64位)作為DES的輸出結果。在通信網路的兩端,雙方約定一致的Key,在通信的源點用Key對核心數據進行DES加密,然後以密碼形式在公共通信網(如電話網)中傳輸到通信網路的終點,數據到達目的地後,用同樣的Key對密碼數據進行解密,便再現了明碼形式的核心數據。這樣,便保證了核心數據(如PIN、MAC等)在公共通信網中傳輸的安全性和可靠性。

2)3DES使用3個密鑰,對消息進行(密鑰1·加密)+(密鑰2·解密)+(密鑰3·加密)

3)AES高級加密標准

如圖,加密/解密使用相同的密碼,並且是可逆的

四、非對稱加密

特點:

1)使用公鑰加密,使用私鑰解密

2)公鑰是公開的,私鑰保密

3)加密處理安全,但是性能極差

經典演算法RSA:

1)RSA原理

(1)求N,准備兩個質數p和q,N = p x q

(2)求L,L是p-1和q-1的最小公倍數。L = lcm(p-1,q-1)

(3)求E,E和L的最大公約數為1(E和L互質)

(4)求D,E x D mode L = 1

五、數字簽名

原理以及應用場景:

1)數字簽名的應用場景

需要嚴格驗證發送方身份信息情況

2)數字簽名原理

(1)客戶端處理

對"消息"進行HASH得到"消息摘要"

發送方使用自己的私鑰對"消息摘要"加密(數字簽名)

把數字簽名附著在"報文"的末尾一起發送給接收方

(2)服務端處理

對"消息" HASH得到"報文摘要"

使用公鑰對"數字簽名"解密

對結果進行匹配

六、數字證書

簡單說明:

證書和駕照很相似,裡面記有姓名、組織、地址等個人信息,以及屬於此人的公鑰,並有認證機構施加數字簽名,只要看到公鑰證書,我們就可以知道認證機構認證該公鑰的確屬於此人。

數字證書的內容:

1)公鑰

2)認證機構的數字簽名

證書的生成步驟:

1)生成私鑰openssl genrsa -out private.pem 1024

2)創建證書請求openssl req -new -key private.pem -out rsacert.csr

3)生成證書並簽名,有效期10年openssl x509 -req -days 3650 -in rsacert.csr -signkey private.pem -out rsacert.crt

4)將PEM格式文件轉換成DER格式openssl x509 -outform der -in rsacert.crt -out rsacert.der

5)導出P12文件openssl pkcs12 -export -out p.p12 -inkey private.pem -in rsacert.crt

iOS開發中的注意點:

1)在iOS開發中,不能直接使用PEM格式的證書,因為其內部進行了Base64編碼,應該使用的是DER的證書,是二進制格式的;

2)OpenSSL默認生成的都是PEM格式的證書。

七、https

HTTPS和HTTP的區別:

超文本傳輸協議HTTP協議被用於在Web瀏覽器和網站伺服器之間傳遞信息。HTTP協議以明文方式發送內容,不提供任何方式的數據加密,如果攻擊者截取了Web瀏覽器和網站伺服器之間的傳輸報文,就可以直接讀懂其中的信息,因此HTTP協議不適合傳輸一些敏感信息,比如信用卡號、密碼等。

為了解決HTTP協議的這一缺陷,需要使用另一種協議:安全套接字層超文本傳輸協議HTTPS。為了數據傳輸的安全,HTTPS在HTTP的基礎上加入了SSL協議,SSL依靠證書來驗證伺服器的身份,並為瀏覽器和伺服器之間的通信加密。

HTTPS和HTTP的區別主要為以下四點:

1)https協議需要到ca申請證書,一般免費證書很少,需要交費。

2)http是 超文本傳輸協議 ,信息是明文傳輸,https則是具有 安全性 的 ssl 加密傳輸協議。

3)http和https使用的是完全不同的連接方式,用的埠也不一樣,前者是80,後者是443。

4)http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的 網路協議 ,比http協議安全。

5)SSL:Secure Sockets Layer安全套接字層;用數據加密(Encryption)技術,可確保數據在網路上傳輸過程中不會被截取及竊聽。目前一般通用之規格為40 bit之安全標准,美國則已推出128 bit之更高安全標准,但限制出境。只要3.0版本以上之I.E.或Netscape 瀏覽器 即可支持SSL。目前版本為3.0。SSL協議位於TCP/IP協議與各種應用層協議之間,為數據通訊提供安全支持。SSL協議可分為兩層:SSL記錄協議(SSL Record Protocol):它建立在可靠的傳輸協議(如TCP)之上,為高層協議提供數據封裝、壓縮、加密等基本功能的支持。SSL握手協議(SSL Handshake Protocol):它建立在SSL記錄協議之上,用於在實際的數據傳輸開始前,通訊雙方進行身份認證、協商加密演算法、交換加密密鑰等。

閱讀全文

與等位元組加密演算法相關的資料

熱點內容
java課表 瀏覽:553
如何在pdf裡面修改 瀏覽:927
橙光製作器檔案框在哪個文件夾 瀏覽:989
php如何抓取網頁數據 瀏覽:640
計數器單片機 瀏覽:964
游戲aoi演算法 瀏覽:844
phpmysqlint 瀏覽:912
怎麼從appstore商城買東西 瀏覽:184
大秀直播平台源碼 瀏覽:424
java視屏 瀏覽:934
電腦中如何給程序加密 瀏覽:240
java排序容器 瀏覽:942
職稱證書在哪個app下載 瀏覽:362
四九演算法算男女 瀏覽:659
javawindows8 瀏覽:496
2021世界程序員節 瀏覽:484
php翼支付 瀏覽:883
盈通伺服器ip地址 瀏覽:790
3des演算法的c語言實現 瀏覽:873
網上怎樣購買伺服器地址 瀏覽:815