scala語言實現各種加密演算法

2021-08-21 07:29:36 字數 2132 閱讀 1488

因子

現在一些接**互的時候回用到各種加密演算法,現在總結一下我遇到的幾個演算法。

1.md5加密

md5訊息摘要演算法,屬hash演算法一類。md5演算法對輸入任意長度的訊息進行執行,產生乙個128位的訊息摘要。

以下所描述的訊息長度、填充資料都以位(bit)為單位,位元組序為小端位元組。

演算法原理

1、資料填充

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

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

2、新增訊息長度

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

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

3、資料處理

準備需要用到的資料:

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

具體計算的實現較為複雜,建議查閱相關書籍,下面給出在c++上的實現**。

**如下:

val digest = messagedigest.getinstance("md5")

val text = "需要加密的字串"

val md5hash1 = digest.digest(text.getbytes).map("%02x".format(_)).mkstring

2.sha1加密

演算法原理

sha-1是一種資料加密演算法,該演算法的思想是接收一段明文,然後以一種不可逆的方式將它轉換成一段(通常更小)密文,也可以簡單的理解為取一串輸入碼(稱為預對映或資訊),並把它們轉化為長度較短、位數固定的輸出序列即雜湊值(也稱為資訊摘要或資訊認證**)的過程。

單向雜湊函式的安全性在於其產生雜湊值的操作過程具有較強的單向性。如果在輸入序列中嵌入密碼,那麼任何人在不知道密碼的情況下都不能產生正確的雜湊值,從而保證了其安全性。sha將輸入流按照每塊512位(64個位元組)進行分塊,並產生20個位元組的被稱為資訊認證**或資訊摘要的輸出。

該演算法輸入報文的長度不限,產生的輸出是乙個160位的報文摘要。輸入是按512 位的分組進行處理的。sha-1是不可逆的、防衝突,並具有良好的雪崩效應。

通過雜湊演算法可實現數字簽名實現,數字簽名的原理是將要傳送的明文通過一種函式運算(hash)轉換成報文摘要(不同的明文對應不同的報文摘要),報文摘要加密後與明文一起傳送給接受方,接受方將接受的明文產生新的報文摘要與傳送方的發來報文摘要解密比較,比較結果一致表示明文未被改動,如果不一致表示明文已被篡改。

**如下:

def getsha1(encryptstr: string): string = try ) 

}// 轉換為全大寫

hexstring.tostring.touppercase

} catch

3.aes加密演算法

aes為分組密碼,分組密碼也就是把明文分成一組一組的,每組長度相等,每次加密一組資料,直到加密完整個明文。在aes標準規範中,分組長度只能是128位,也就是說,每個分組為16個位元組(每個位元組8位)。金鑰的長度可以使用128位、192位或256位。金鑰的長度不同,推薦加密輪數也不同,如下表所示:

aes金鑰長度(32位位元字)

分組長度(32位位元字)

加密輪數

aes-12844

10aes-19264

12aes-25684

14輪數在下面介紹,這裡實現的是aes-128,也就是金鑰的長度為128位,加密輪數為10輪。 

上面說到,aes的加密公式為c = e(k,p),在加密函式e中,會執行乙個輪函式,並且執行10次這個輪函式,這個輪函式的前9次執行的操作是一樣的,只有第10次有所不同。也就是說,乙個明文分組會被加密10輪。aes的核心就是實現一輪中的所有操作。

**如下:

def desencrypt: string = try  catch

c語言實現idea加密演算法

idea 資料加密演算法及實現 idea 對稱資料加密演算法,是我寫的第乙個關於加解密方面的演算法,在大學宿舍里弄了差不多將近二十個小時終於搞懂了。剛開始受到了 不良 資料的誤導走了很長時間的彎路,後來在圖書館看到了正確的介紹才終於把這個演算法給弄出來了。1 簡介idea,即國際資料加密演算法 是旅...

DES加密演算法的C語言實現

include des version 0.4 created by source at 2007.3 competence p4 3.0g 512m 3000000 times encryption with created subkeys 26.784 seconds about 0.85m s...

MD5加密演算法C語言實現

include include include include include define block len 64 define max blocks 9 define message len block len max blocks 1 define result len 33 md5演算法的...