浅谈加密算法
前言
數(shù)字簽名、信息加密 是前后端開發(fā)都經(jīng)常需要使用到的技術(shù),應(yīng)用場(chǎng)景包括了用戶登入、交易、信息通訊、oauth 等等,不同的應(yīng)用場(chǎng)景也會(huì)需要使用到不同的簽名加密算法,或者需要搭配不一樣的 簽名加密算法 來達(dá)到業(yè)務(wù)目標(biāo)。這里簡(jiǎn)單的給大家介紹幾種常見的簽名加密算法和一些典型場(chǎng)景下的應(yīng)用。
正文
1. 數(shù)字簽名
數(shù)字簽名,簡(jiǎn)單來說就是通過提供 可鑒別 的 數(shù)字信息 驗(yàn)證 自身身份 的一種方式。一套 數(shù)字簽名 通常定義兩種 互補(bǔ) 的運(yùn)算,一個(gè)用于 簽名,另一個(gè)用于 驗(yàn)證。分別由 發(fā)送者 持有能夠 代表自己身份 的 私鑰 (私鑰不可泄露),由 接受者 持有與私鑰對(duì)應(yīng)的 公鑰 ,能夠在 接受 到來自發(fā)送者信息時(shí)用于 驗(yàn)證 其身份。
注意:圖中?加密過程?有別于?公鑰加密,更多?介紹戳這里。簽名?最根本的用途是要能夠唯一?證明發(fā)送方的身份,防止?中間人攻擊、CSRF?跨域身份偽造?;谶@一點(diǎn)在諸如?設(shè)備認(rèn)證、用戶認(rèn)證、第三方認(rèn)證?等認(rèn)證體系中都會(huì)使用到?簽名算法?(彼此的實(shí)現(xiàn)方式可能會(huì)有差異)。
2. 加密和解密
2.1. 加密
數(shù)據(jù)加密 的基本過程,就是對(duì)原來為 明文 的文件或數(shù)據(jù)按 某種算法 進(jìn)行處理,使其成為 不可讀 的一段代碼,通常稱為 “密文”。通過這樣的途徑,來達(dá)到 保護(hù)數(shù)據(jù) 不被 非法人竊取、閱讀的目的。
2.2. 解密
加密 的 逆過程 為 解密,即將該 編碼信息 轉(zhuǎn)化為其 原來數(shù)據(jù) 的過程。
3. 對(duì)稱加密和非對(duì)稱加密
加密算法分 對(duì)稱加密 和 非對(duì)稱加密,其中對(duì)稱加密算法的加密與解密 密鑰相同,非對(duì)稱加密算法的加密密鑰與解密 密鑰不同,此外,還有一類 不需要密鑰 的 散列算法。
?
常見的 對(duì)稱加密 算法主要有 DES、3DES、AES 等,常見的 非對(duì)稱算法 主要有 RSA、DSA 等,散列算法 主要有 SHA-1、MD5 等。
3.1. 對(duì)稱加密
對(duì)稱加密算法 是應(yīng)用較早的加密算法,又稱為 共享密鑰加密算法。在 對(duì)稱加密算法 中,使用的密鑰只有一個(gè),發(fā)送 和 接收 雙方都使用這個(gè)密鑰對(duì)數(shù)據(jù)進(jìn)行 加密 和 解密。這就要求加密和解密方事先都必須知道加密的密鑰。
數(shù)據(jù)加密過程:在對(duì)稱加密算法中,數(shù)據(jù)發(fā)送方 將 明文 (原始數(shù)據(jù)) 和 加密密鑰 一起經(jīng)過特殊 加密處理,生成復(fù)雜的 加密密文 進(jìn)行發(fā)送。
數(shù)據(jù)解密過程:數(shù)據(jù)接收方 收到密文后,若想讀取原數(shù)據(jù),則需要使用 加密使用的密鑰 及相同算法的 逆算法 對(duì)加密的密文進(jìn)行解密,才能使其恢復(fù)成 可讀明文。
3.2. 非對(duì)稱加密
非對(duì)稱加密算法,又稱為 公開密鑰加密算法。它需要兩個(gè)密鑰,一個(gè)稱為 公開密鑰 (public key),即 公鑰,另一個(gè)稱為 私有密鑰 (private key),即 私鑰。
因?yàn)?加密 和 解密 使用的是兩個(gè)不同的密鑰,所以這種算法稱為 非對(duì)稱加密算法。
如果使用 公鑰 對(duì)數(shù)據(jù) 進(jìn)行加密,只有用對(duì)應(yīng)的 私鑰 才能 進(jìn)行解密。
如果使用 私鑰 對(duì)數(shù)據(jù) 進(jìn)行加密,只有用對(duì)應(yīng)的 公鑰 才能 進(jìn)行解密。
例子:甲方生成 一對(duì)密鑰 并將其中的一把作為 公鑰 向其它人公開,得到該公鑰的 乙方 使用該密鑰對(duì)機(jī)密信息 進(jìn)行加密 后再發(fā)送給甲方,甲方再使用自己保存的另一把 專用密鑰 (私鑰),對(duì) 加密 后的信息 進(jìn)行解密。
?
4. 常見的簽名加密算法
4.1. MD5算法
MD5 用的是 哈希函數(shù),它的典型應(yīng)用是對(duì)一段信息產(chǎn)生 信息摘要,以 防止被篡改。嚴(yán)格來說,MD5 不是一種 加密算法 而是 摘要算法。無論是多長(zhǎng)的輸入,MD5 都會(huì)輸出長(zhǎng)度為 128bits 的一個(gè)串 (通常用 16 進(jìn)制 表示為 32 個(gè)字符)。
4.2. SHA1算法
SHA1 是和 MD5 一樣流行的 消息摘要算法,然而 SHA1 比 MD5 的 安全性更強(qiáng)。對(duì)于長(zhǎng)度小于 2 ^ 64 位的消息,SHA1 會(huì)產(chǎn)生一個(gè) 160 位的 消息摘要?;?MD5、SHA1 的信息摘要特性以及 不可逆 (一般而言),可以被應(yīng)用在檢查 文件完整性 以及 數(shù)字簽名 等場(chǎng)景。
4.3. HMAC算法
HMAC 是密鑰相關(guān)的 哈希運(yùn)算消息認(rèn)證碼(Hash-based Message Authentication Code),HMAC 運(yùn)算利用 哈希算法 (MD5、SHA1 等),以 一個(gè)密鑰 和 一個(gè)消息 為輸入,生成一個(gè) 消息摘要 作為 輸出。
HMAC 發(fā)送方 和 接收方 都有的 key 進(jìn)行計(jì)算,而沒有這把 key 的第三方,則是 無法計(jì)算 出正確的 散列值的,這樣就可以 防止數(shù)據(jù)被篡改。
4.4. AES/DES/3DES算法
AES、DES、3DES 都是 對(duì)稱 的 塊加密算法,加解密 的過程是 可逆的。常用的有 AES128、AES192、AES256 (默認(rèn)安裝的 JDK 尚不支持 AES256,需要安裝對(duì)應(yīng)的 jce 補(bǔ)丁進(jìn)行升級(jí) jce1.7,jce1.8)。
4.4.1. DES算法
DES 加密算法是一種 分組密碼,以 64 位為 分組對(duì)數(shù)據(jù) 加密,它的 密鑰長(zhǎng)度 是 56 位,加密解密 用 同一算法。
DES 加密算法是對(duì) 密鑰 進(jìn)行保密,而 公開算法,包括加密和解密算法。這樣,只有掌握了和發(fā)送方 相同密鑰 的人才能解讀由 DES加密算法加密的密文數(shù)據(jù)。因此,破譯 DES 加密算法實(shí)際上就是 搜索密鑰的編碼。對(duì)于 56 位長(zhǎng)度的 密鑰 來說,如果用 窮舉法 來進(jìn)行搜索的話,其運(yùn)算次數(shù)為 2 ^ 56 次。
4.4.2. 3DES算法
是基于 DES 的 對(duì)稱算法,對(duì) 一塊數(shù)據(jù) 用 三個(gè)不同的密鑰 進(jìn)行 三次加密,強(qiáng)度更高。
4.4.3. AES算法
AES 加密算法是密碼學(xué)中的 高級(jí)加密標(biāo)準(zhǔn),該加密算法采用 對(duì)稱分組密碼體制,密鑰長(zhǎng)度的最少支持為 128 位、 192 位、256 位,分組長(zhǎng)度 128 位,算法應(yīng)易于各種硬件和軟件實(shí)現(xiàn)。這種加密算法是美國聯(lián)邦政府采用的 區(qū)塊加密標(biāo)準(zhǔn)。
AES 本身就是為了取代 DES 的,AES 具有更好的 安全性、效率 和 靈活性。
4.5. RSA算法
RSA 加密算法是目前最有影響力的 公鑰加密算法,并且被普遍認(rèn)為是目前 最優(yōu)秀的公鑰方案 之一。RSA 是第一個(gè)能同時(shí)用于 加密 和 數(shù)字簽名 的算法,它能夠 抵抗 到目前為止已知的 所有密碼攻擊,已被 ISO 推薦為公鑰數(shù)據(jù)加密標(biāo)準(zhǔn)。
RSA 加密算法 基于一個(gè)十分簡(jiǎn)單的數(shù)論事實(shí):將兩個(gè)大 素?cái)?shù) 相乘十分容易,但想要對(duì)其乘積進(jìn)行 因式分解 卻極其困難,因此可以將 乘積 公開作為 加密密鑰。
4.6. ECC算法
ECC 也是一種 非對(duì)稱加密算法,主要優(yōu)勢(shì)是在某些情況下,它比其他的方法使用 更小的密鑰,比如 RSA 加密算法,提供 相當(dāng)?shù)幕蚋叩燃?jí) 的安全級(jí)別。不過一個(gè)缺點(diǎn)是 加密和解密操作 的實(shí)現(xiàn)比其他機(jī)制 時(shí)間長(zhǎng) (相比 RSA 算法,該算法對(duì) CPU 消耗嚴(yán)重)。
?
5. 各種加密算法對(duì)比
5.1. 散列算法比較
?
?
5.4. 對(duì)稱算法與非對(duì)稱加密算法
5.4.1. 對(duì)稱算法
密鑰管理:比較難,不適合互聯(lián)網(wǎng),一般用于內(nèi)部系統(tǒng)
安全性:中
加密速度:快好 幾個(gè)數(shù)量級(jí) (軟件加解密速度至少快 100 倍,每秒可以加解密數(shù) M 比特 數(shù)據(jù)),適合大數(shù)據(jù)量的加解密處理
5.4.2. 非對(duì)稱算法
密鑰管理:密鑰容易管理
安全性:高
加密速度:比較慢,適合 小數(shù)據(jù)量 加解密或數(shù)據(jù)簽名
本文介紹了?數(shù)字簽名,加密和解密,對(duì)稱加密和非對(duì)稱加密,具體詳細(xì)的使用和代碼實(shí)例自行去網(wǎng)上查找,結(jié)合工作中實(shí)際需求更好哦!
轉(zhuǎn)載于:https://www.cnblogs.com/little-fly/p/10247257.html
總結(jié)
- 上一篇: kafka 配置及常用命令
- 下一篇: Scala 基础(4)—— 类和对象