演算法大雜燴 常見演算法的歸類和總結 對稱加密演算法

2021-09-02 07:25:40 字數 2787 閱讀 3718

筆者在學習和工作中,經常跟【演算法】打交道;基於平時對【演算法】的了解,特寫此文來整理一下常見的演算法。注意,此文不對演算法的具體細節做深究,僅供基礎入門學習。限於篇幅原因,本文先介紹【對稱加密演算法】。

對稱加密演算法,顧名思義,就是演算法的執行過程是對稱的;用最簡單的話說,就是加密方和解密方使用的金鑰是一致的,只不過執行的過程是相反的,一方(a)對明文(p)使用金鑰k1進行加密得到密文(c),另一方(b)對密文(c)使用金鑰k2進行解密拿到明文(p'); 要想兩者的明文p和p'相等,必須保證金鑰k1等於k2,這就是對稱加密演算法的基本要求。

常見的對稱演算法有des、tdes、aes、sm4、rc2/4等。

des演算法,有以下特點:金鑰長度適中、實現原理較為簡單、加解密過程較為高效。通常我們見到的des金鑰長度為8位元組,即64位元位,但是實際使用的金鑰的有效位是56位元位,即每個位元組的最高位(第8、16、24、32、40、48、56、64位元位)實際都是不參與演算法加解密運算的,我們稱之為校驗位,它們存在的目的是使得每個金鑰都有奇數個1。由此可知,有2組8位元組不完全相同的金鑰,加解密結果是一致的這種情況是可能存在的。

演算法對資料做加解密,都是以一定長度的資料塊作為輸入的;並且,對稱演算法有個特點,輸入資料塊的長度一般等於金鑰的長度;也就是說,在進行des運算(加密或解密)時,輸入的資料長度都必須是8位元組。同時,在des對稱演算法中,輸出的資料長度等於輸入的資料長度,即8位元組輸入8位元組輸出。至此,有的童鞋會問,如果我們要執行加密的資料遠遠不止8位元組呢,應該怎麼辦?這個問題就已經涉及到加解密過程的資料分組問題了,常見的分組方式有ecb方式和cbc方式,後續會對這2種方式做更為詳細的介紹。

tdes全稱是triple data encryption standard,即我們常說的3des;三重資料加密演算法(tdea,triple data encryption algorithm)。它是des演算法的加強版本。tdes的執行過程如下:其中c表示密文、p表示明文、e表示加密運算、d表示解密運算、kx表示不同組別的金鑰。

由上可知,標準的tdes的金鑰長度是24位元組的,即k1-k2-k3;但在實際生產使用過程中,也常使用16位元組長度的金鑰,此時金鑰的k3部分將由k1來充當,即k1-k2-k1,強制把16位元組的金鑰轉換為24位元組的金鑰。另一方面,從tdes加解密的過程,我們也可以發現當k1=k2,使用tdes的效果與單des的效果是一致的。

注意的是,前面說到對稱演算法加解密運算,輸入資料長度一般等於金鑰的長度,而tdes的金鑰長度是24位元組,但這並不意味著執行tdes加解密時,輸入資料長度必須是24位元組;相反,它的輸入資料長度還是8位元組,與des運算的輸入完全一樣。這也就是為什麼說tdes是des的加強版。同樣的8位元組輸入資料經des運算和tdes運算,通常是不一樣的,除非tdes的金鑰滿足k1=k2的關係。

由於它也是對稱加密加密演算法,所以前面對加密演算法描述的特點它都有,不同的是,它的是金鑰長度有3種可能值,16位元組、24位元組、32位元組,分別對應的金鑰強度為128位元位、192位元位和256位元位。執行加解密運算時,輸入資料的長度為16位元組(128位元位),且輸出資料長度等於輸入資料長度。

sm演算法是國密演算法,國密即國家密碼局認定的國產密碼演算法。主要有sm1、sm2、sm3、sm4,其中sm1 為對稱加密,其加密強度與aes相當,但該演算法不公開,呼叫該演算法時,需要通過特定的加密晶元的介面進行呼叫;sm4為對稱加密演算法;sm3為資訊摘要演算法;sm2為非對稱加密演算法。後續的文章會對sm演算法做更為詳細的介紹。

sm4演算法的特點是金鑰長度和分組長度均為128位;雖然金鑰長度跟des類似,但加密強度卻能與aes媲美;並且在國家資訊保安戰略的大背景下,國密演算法的大力推廣得到了越來越多的支援。像目前國內出廠很多涉及金融安全的終端產品,如pos機、atm機、金鑰鍵盤、金融交易後台、商業銀行系統等等,都是強制要求必須支援國密相關演算法,並且發售的機器或上線的系統都必須通過國家密碼局授權的國密認證,拿到對應的國密認證證書,才能最終商用,這或許能成為sm演算法大放異彩的乙個契機,若干年後指不定街邊的小小機器都在跑國密演算法呢。

rc2是由著名密碼學家ron rivest設計的一種傳統對稱分組加密演算法,它可作為des演算法的建議替代演算法。它的輸入和輸出都是64位元。金鑰的長度是從1位元組到128位元組可變,但目前的實現是8位元組(2023年)

rc4加密演算法是大名鼎鼎的rsa三人組中的頭號人物ronald rivest在2023年設計的金鑰長度可變的流加密演算法簇。之所以稱其為簇,是由於其核心部分的s-box長度可為任意,但一般為256位元組。該演算法的速度可以達到des加密的10倍左右,且具有很高階別的非線性。

中文名稱/簡稱

金鑰長度可能值

加解密資料塊長度

資源消耗

運算速度

安全性資料加密標準/des

8位元組8位元組中較快

低3重資料加密標準/tdes

16位元組、24位元組

8位元組高慢中

高階加密標準/aes

16位元組、24位元組、32位元組

16位元組低快

高國密對稱演算法/sm4

16位元組

16位元組高快

高rc演算法(rc2)

目前使用是8位元組

8位元組低快低

rc演算法(rc4)

金鑰長度可變

長度可變

低快(快des10倍)

低經過以上分析和總結,相信大家對對稱加解密演算法都有了乙個大概的認識,這裡並沒有很具體地講到每個演算法的實現細節,那些數學理論的東西應該是數學家去驗證的東西,我們作為演算法的使用者和推廣者,只需要了解其大致的基本原理,重點需要熟知每種加密演算法的特性,根據實際應用的不同場景、對加密要求、執行環境等因素綜合考慮,實現並使用最優的加密演算法,即可。

文中的觀點僅代表博主之愚見,演算法方面的描述,也可能有紕漏的地方,若有發現,也請讀者幫忙指正。感激不盡。

大雜燴 今天遇到的問題的總結

1.2.問題 找開.net解決方案時 提示asp.net 不是1.1版本 解決 使用 c windows microsoft.net framework v1.1.4322 aspnet regiis i 重新註冊即可 3.問題 開啟asp.net頁面時出現 無法載入 dll oci.dll 的錯誤...

常見的排序演算法總結

include 演算法只是比較了元素為整數的內容.大部分的排序只是做了簡單的測試.僅供參考.void swap int a int b bool less int a,int b 對內部中的元素先找到k值,然後分兩塊 int partition int r,int lo,int hi while j...

常見的排序演算法總結

平時一直做專案,業務邏輯,對演算法這塊逐漸有了生疏 今天有空總結一下排序演算法 1 氣泡排序 氣泡排序的原理就是兩兩相比,從小到大的話前面比後面大就交換,從大到大的話前面比後面小就交換,比如有一組數 1,10,5,3,2 如何對它做排序 比如從小到大 第一步 1,10,5,3,2 源資料 1,10,...