2 常用加解密演算法

2021-10-24 09:11:56 字數 3400 閱讀 1012

什麼是加解密應該不用解釋了吧

加密(encryption):就是把一段明文(你不想讓別人看到的內容)變成密文(和你發過來的明文八竿子打不著),這就是加密

解密(decrypt)就是加密的相反過程,你把明文加密了,那麼接受者肯定得知道你到底發過來什麼內容了,不然加密就沒有意義了

加解密金鑰:就是你用什麼字串進行的加密,解密就正好相反

參照鏈結

加密總可以分為兩種,一種是對稱加密, 一種是非對稱加密,對稱加密也就是說加密和解密金鑰相同,而非對稱加密就是說加解密金鑰不相同。

常見的加密演算法

對稱加密 演算法主要有 des、3des、aes 等,

非對稱演算法 主要有 rsa(https)、dsa 等

上面兩個都是可逆的

雜湊演算法 主要有 sha-1、md5 等(不可逆,一般用於簽名)

下面看使用hutool如何快速實現加解密

hutool官網

首先引入pom依賴

<

dependency

>

<

groupid

>cn.

hutool

<

/groupid

>

<

artifactid

>

hutool-all

<

/artifactid

>

<

version

>

4.1.2

<

/version

>

<

/dependency

>

aes加密
@test

public

void

testaes()

throws

ioexception

des 加密
public

void

testdes()

throws

ioexception

md5加密

md5(message-digest algorithm 5)加密是一種不可逆的加密規則,用於確保資訊的完整。它可以使資料資訊在數字簽名軟體簽署私人秘鑰前唄壓縮成一種保密的格式,這是一串十六進製制數字。

任意長度的資料經過md5加密後得到的值的長度都是固定的,並且對原資料修改乙個字元對於加密後的值都有很大的變動。

@test

public

void

tes***5()

如果還沒明白在補充一下

大家都知道,地球上任何人都有自己獨一無二的指紋,這常常成為公安機關鑑別罪犯身份最值得信賴的方法;

與之類似,md5就可以為任何檔案(不管其大小、格式、數量)產生乙個同樣獨一無二的「數字指紋」,

如果任何人對檔名做了任何改動,其md5值也就是對應的「數字指紋」都會發生變化。

論壇資料庫、系統檔案安全等方面。

md5的典型應用是對一段message(位元組串)產生fingerprint(指紋),以防止被「篡改」。

舉個例子,你將一段話寫在乙個叫 readme.txt檔案中,並對這個readme.txt產生乙個md5的值並記錄在案,然後你可以傳播這個檔案給別人,別人如果修改了檔案中的任何內容,你對這個檔案重新計算md5時就會發現(兩個md5值不相同)。如果再有乙個第三方的認證機構,用md5還可以防止檔案作者的「抵賴」,這就是所謂的數字簽名應用。

md5還廣泛用於作業系統的登陸認證上,如unix、各類bsd系統登入密碼、數字簽名等諸多方。

如在unix系統中使用者的密碼是以md5(或其它類似的演算法)經hash運算後儲存在檔案系統中。當使用者登入的時候,

系統把使用者輸入的密碼進行md5 hash運算,然後再去和儲存在檔案系統中的md5值進行比較,進而確定輸入的密碼是否正確

。通過這樣的步驟,系統在並不知道使用者密碼的明碼的情況下就可以確定使用者登入系統的合法性。

這可以避免使用者的密碼被具有系統管理員許可權的使用者知道。md5將任意長度的「位元組串」對映為乙個128bit的大整數,

並且是通過該128bit反推原始字串是困難的,換句話說就是,即使你看到源程式和演算法描述,

也無法將乙個md5的值變換回原始的字串,

從數學原理上說,是因為原始的字串有無窮多個,這有點象不存在反函式的數學函式。

所以,要遇到了md5密碼的問題,比較好的辦法是:你可以用這個系統中的md5()函式重新設乙個密碼,

如admin,把生成的一串密碼的hash值覆蓋原來的hash值就行了。

正是因為這個原因,現在被黑客使用最多的一種破譯密碼的方法就是一種被稱為"跑字典"的方法。

有兩種方法得到字典,一種是日常蒐集的用做密碼的字串表,另一種是用排列組合方法生成的,

先用md5程式計算出這些字典項的md5值,然後再用目標的md5值在這個字典中檢索。

我們假設密碼的最大長度為8位位元組(8 bytes),同時密碼只能是字母和數字,共26+26+10=62個字元,

排列組合出的字典的項數則是p(62,1)+p(62,2)….+p(62,8),

那也已經是乙個很天文的數字了,儲存這個字典就需要tb級的磁碟陣列,而且這種方法還有乙個前提,

就是能獲得目標賬戶的密碼md5值的情況下才可以。這種加密技術被廣泛的應用於unix系統中,

這也是為什麼unix系統比一般作業系統更為堅固乙個重要原因。

sha1

跟md5一樣也是簽名演算法

@test

public

void

testsha1()

rsa

非對稱加密演算法

rsa 加密演算法是目前最有影響力的 公鑰加密演算法,並且被普遍認為是目前 最優秀的公鑰方案 之一。rsa 是第乙個能同時用於 加密 和 數字簽名 的演算法,它能夠 抵抗 到目前為止已知的 所有密碼攻擊,已被 iso 推薦為公鑰資料加密標準。

rsa 加密演算法 基於乙個十分簡單的數論事實:

將兩個大 素數 相乘十分容易,但想要對其乘積進行 因式分解 卻極其困難,因此可以將 乘積 公開作為 加密金鑰。

hutool進行rsa加密

code

@test

public

void

testrsa()

ecc演算法(和rsa一樣也是非對稱加密演算法)

ecc 也是一種 非對稱加密演算法,主要優勢是在某些情況下,它比其他的方法使用 更小的金鑰,比如 rsa 加密演算法,提供 相當的或更高等級 的安全級別。不過乙個缺點是 加密和解密操作 的實現比其他機制 時間長 (相比 rsa 演算法,該演算法對 cpu 消耗嚴重)。

簡述常用加解密演算法

簡述常用加解密演算法 一 產生的原因 為確保資料在網路上傳輸的安全性。二 使用場景 1 rsa加解密適用場景 rsa主要用於加密和簽名,加密過程中,公鑰用於加密,私鑰用於解密 簽名過程中,私鑰用於加密,公鑰用於解密.2 md5加密適用場景 md5演算法主要用於加密應用軟體登入密碼 進行數字簽名 對檔...

加解密演算法

工作中經常用到加解密演算法大概有以下三種 由不定長的資料轉化為固定長的字串,代表有 sha1 str raw out false 演算法不夠複雜raw out預設為false,生成乙個32位的加密串 如果為true,則生成乙個16位的二進位製流 md5 str strict false strict...

加解密演算法

演算法型別 特點優勢 缺陷代表演算法 非對稱加密 加解密金鑰不相關 無需提前共享金鑰 計算效率低,仍存在中間人攻擊可能 rsa elgamal 橢 圓曲線系列演算法 對稱加密 加解密金鑰相同或可推算 計算效率高,加密強度高 需提前共享金鑰 易洩露 des 3des aes idea 對稱加密 sym...