編碼與加密

2021-07-01 22:02:40 字數 4048 閱讀 9378

base64不是加密演算法,只是乙個編碼方法,根本就不能保護資訊的機密性。看來,我們還有可能有不少人分不清它們的用途。隨之,便產生一想法,寫一篇編碼和加密的文章,分析一下編碼和加密,讓大家了解一下它們的區別。

下面就介紹一下加密和編碼的一些概念和作用。

加密是通過intranet、extranet和internet進行安全的資訊交換的基礎。從業務的角度來看,通過加密實現的安全功能包括:身份驗證,使收件人確信發件人就是他或她所宣告的那個人;機密性,確保只有預期的收件人能夠閱讀郵件;以及完整性,確保郵件在傳輸過程中沒有被更改。從技術的角度來看,加密是利用數學方法將郵件轉換為不可讀格式從而達到保護資料的目的的一門科學。

加密演算法有三種:對稱加密演算法和非對稱加密演算法以及雜湊演算法。

對稱加密演算法

簡單地說就是,加密和解密都是用同乙個金鑰的加密演算法。其加密過程如下

對稱加密演算法可以起到的作用是:保密和認證。保密就是對訊息進行了加密,其他人看不到訊息的內容;認證是只有有金鑰的人才可以發這個訊息(金鑰洩漏的情況除外)。

對稱加密演算法又可以分為流加密和塊加密。流加密就是每次加密乙個bit,塊加密是將別加密的資料分成若干固定長度的塊,每次加密一塊。

常用的對稱加密演算法有以下幾種模式:

模式

英文全稱

中文

加密種類

ecbelectronic codebook

電子密碼本模式

塊加密cbccipher-block chaining

加密塊鏈模式

塊加密cfbcipher feedback

密文反饋模式

流加密ofboutput feedback

輸出反饋模式

流加密ctrcounter

計數器模式

塊加密目前,常用的是cbc模式,不過,既安全,效能又好的是ctr模式。

下面是常用的對稱加密演算法的介紹:

演算法名稱

演算法型別

金鑰長度

速度

資源消耗

aes 對稱

block密碼

128、

192、

256位 高

低3des 對稱

feistel密碼

112位或

168位 低

非對稱加密演算法

非對稱加密演算法是加密和解密使用不同的金鑰,乙個叫做公鑰,乙個稱為私鑰。其加密過程如下:

非對稱加密可以起到的作用是:保密,認證,資料完整性。保密就是通過接收者的公鑰加密,這樣只有接收者有私鑰,只有接收者可以解密;認證是通過簽名來實現的(簽名描述如下)

從此圖可以看出,傳送者使用自己的私鑰簽名,接收者只能使用傳送者的公鑰才能驗證簽名,就可以知道是誰發的這條訊息;完整性和上面這個簽名的圖也有示例,就是對傳送的內容計算出雜湊值,然後使用傳送者的私鑰對雜湊值簽名,只有使用接收者的公鑰才能解密出這個雜湊值,再和傳送的內容計算出來的雜湊值比較,可以保證資料在傳輸過程中沒有被篡改。

下面是常用的非對稱加密演算法的介紹:

演算法名稱

演算法型別

金鑰長度

速度

資源消耗

rsa大整數分解

1024

, 2048 高

低ecc

有限域上的橢圓曲線離散對數

160, 210 低

高 ecc相對於rsa的優勢就是在計算的時候消耗的資源比較少,安全性也不比rsa低,所以在資源相對比較少的移動裝置上可以採用ecc。

這裡需要注意的是:公鑰(對方的)用來加密,私鑰用來簽名,私鑰不能用來加密來保護資訊的機密性。

雜湊

雜湊演算法嚴格來說,不能是一種加密演算法,因為它不能起到加密的作用。它只是按照一定的演算法,將任意長度的位元組串通過計算得到乙個固定長度的位元組串。接收方需要使用同樣的演算法同樣的輸入計算出雜湊值,在和傳輸的雜湊值比較。單純的沒有key的雜湊值和crc校驗值起到的作用類似,只能預防無意的對訊息的更改(例如傳輸過程中訊號收到干擾),不能預防故意的攻擊,因為篡改訊息的人可以在篡改訊息之後,再重新計算雜湊值將原來的雜湊值替換掉,接收者在這樣的情況下無法判斷訊息是否被更改過。所以需要和簽名或者key結合,才能用於對訊息的完整性驗證。hmac就是和key結合來驗證訊息的完整性。

演算法名稱

輸出大小 (bits)

碰撞情形

md5128

sha-0160

sha-1160

有缺陷sha-256/224

256/224

sha-512/384512/384否

對於表中碰撞情形不是「否」的雜湊演算法,建議不要使用。

對稱加密演算法的難點在於金鑰的分發,非對稱加密的演算法的缺點是效能比較低。結合二者的優點,使用非對稱加密演算法協商金鑰(金鑰一般都不長),使用對稱加密演算法加密傳送的內容,可以有效地解決兩種加密演算法的缺點,ssl/tls正式這種思想的乙個實現。

一般公司都會有乙個關於加密演算法的使用的標準,最好根據公司的規定使用允許的安全的演算法。

編碼是資訊從一種形式或格式轉換為另一種形式的過程。解碼,是編碼的逆過程。從概念上可以看出,編碼只是表現形式的轉換,沒有保密的作用,因為編碼和解碼的演算法是公開的,只要知道是什麼編碼的內容,任何人都可以輕鬆地解碼。

下面介紹幾種常用的編碼:

1.      base64, 16進製制,base32

這種型別的編碼主要是將原來的資訊用另外一種編碼機制替換,可以將一些特殊字元轉換為一些基本的沒有危險的字元。這樣無論是在何種形式的載體中傳輸或者顯示,都不會對原來的環境造成破壞。

2.      多語種的編碼 utf-8, utf-16,utf-32, unicode, iso8859-1, gbk, gb2312

這裡說的編碼主要是對各種語言的編碼。世界上有很多語言,漢語、日語、英語、拉丁語等等,它們在計算機裡需要有一種表現形式,於是,就有了每種語言的編碼(例如:gb2312是針對中文的編碼)以及可以容納所有語言的編碼(例如:utf-8)。

3.      ber/der編碼

當你使用證書的時候,也可能聽說過編碼的概念,基本編碼規則ber(base encoding rule)和der(distinguished encoding rule),他們都是證書內容的編碼方式,主要是為了以無歧義的易於理解的方式描述asn.1(abstract syntax notation),ber/der是把asn.1的抽象值編碼為位元組串。編碼的基本規則是「型別-長度-值」三段式結構,簡稱tlv(type length value)。der是ber的乙個子集,它為每乙個asn.1型別制定唯一的編碼方案,ber可以為每乙個型別制定多個編碼方案。具體的細節資訊可以參考:

4.      html編碼,js編碼,url編碼

這類編碼是針對指令碼語言或者標籤語言中的字串中的特殊字元進行處理,以防這些特殊字元破壞了原來的語義。通過這類編碼可以預防注入問題的發生。所以,當你接受輸入或者輸出資訊到標籤語言或者指令碼語言中時,必須考慮編碼,將特殊字元無害化處理。

最後,用一句話總結一下他們的區別:加密就類似於整容,現在的樣子和原來的樣子已經千差萬別,要想認出他/她,只能通過身體的其他的特有的特徵(金鑰);編碼類似於化妝,你依然可以看到她/他原來的樣子(方法就是卸妝)。

本篇文章概要地描述了加密和編碼的基本含義和區別,並簡單描述了它們的作用,希望能夠給大家對於加密和編碼的理解能夠有所幫助。

QP加密編碼解碼

qp quoted printable 也是mime郵件中常用的編碼方式之一。同base64 一樣,它也將輸入的字串或資料編碼成全是ascii碼的可列印字串。quoted printable編碼的基本方法是 輸入資料在 33 60 62 126範圍內的,直接輸出 其它的需編碼為 加兩個位元組的hex...

Base64編碼加密的介紹與使用

目前網路伺服器有種流行的restful設計風格,如下圖所示 在終端使用base64編碼解碼檔案的方法和結果如下 結果如下 事實上base64也常用於給使用者的密碼編碼和解碼。新建工程 進行掌握 步驟如下 如下 viewcontroller.m post登入 安全隱患 儘管在傳送資料的過程中,密碼進行...

編碼 雜湊(雜湊) 加密的區別

網上經常看到有人混淆這幾個概念,把 md5 sha256 甚至還有 base64 當作加密演算法,弄不清楚摘要 編碼 加密的區別,下面就這幾個概念結合幾個例子來區分以下。編碼本質上是資訊形式的轉化。編碼的目的不是為了加密資訊,是將訊息轉化成統一的格式,方便在不同系統之中傳輸。例如最常見的ascii字...