加密

MD5加密

MD5加密是最常用的加密方法之一,是從一段字符串中通過相應(yīng)特征生成一段32位的數(shù)字字母混合碼。

MD5主要特點(diǎn)是 不可逆,相同數(shù)據(jù)的MD5值肯定一樣,不同數(shù)據(jù)的MD5值不一樣(也不是絕對的,但基本是不能一樣的)。

MD5算法還具有以下性質(zhì):

1、壓縮性:任意長度的數(shù)據(jù),算出的MD5值長度都是固定的。

2、容易計(jì)算:從原數(shù)據(jù)計(jì)算出MD5值很容易。

3、抗修改性:對原數(shù)據(jù)進(jìn)行任何改動,哪怕只修改1個(gè)字節(jié),所得到的MD5值都有很大區(qū)別。

4、弱抗碰撞:已知原數(shù)據(jù)和其MD5值,想找到一個(gè)具有相同MD5值的數(shù)據(jù)(即偽造數(shù)據(jù))是非常困難的。

5、強(qiáng)抗碰撞:想找到兩個(gè)不同的數(shù)據(jù),使它們具有相同的MD5值,是非常困難的。

MD5雖然說是不可逆的 但是由于有網(wǎng)站http://www.cmd5.com的存在,專門用來查詢MD5碼 所以有的簡單的MD5碼是可以在這里搜到源碼的。

為了讓MD5碼更加安全 涌現(xiàn)了很多其他方法 如加鹽。 鹽要足夠長足夠亂 得到的MD5碼就很難查到。

終端代碼:$ echo -n abc|openssl md5 ? ? ? ? ?給字符串a(chǎn)bc加密、

RSA加密

RSA非對稱加密算法

非對稱加密算法需要兩個(gè)密鑰:公開密鑰(publickey)和私有密鑰(privatekey)


公開密鑰與私有密鑰是一對,如果用公開密鑰對數(shù)據(jù)進(jìn)行加密,只有用對應(yīng)的私有密鑰才能解密;如果用私有密鑰對數(shù)據(jù)進(jìn)行加密,那么只有用對應(yīng)的公開密鑰才能解密

特點(diǎn):

非對稱密碼體制的特點(diǎn):算法強(qiáng)度復(fù)雜、安全性依賴于算法與密鑰但是由于其算法復(fù)雜,而使得加密解密速度沒有對稱加密解密的速度快

對稱密碼體制中只有一種密鑰,并且是非公開的,如果要解密就得讓對方知道密鑰。所以保證其安全性就是保證密鑰的安全,而非對稱密鑰體制有兩種密鑰,其中一個(gè)是公開的,這樣就可以不需要像對稱密碼那樣傳輸對方的密鑰了

基本加密原理:

(1)找出兩個(gè)“很大”的質(zhì)數(shù):P & Q

(2)N = P * Q

(3)M = (P – 1) * (Q – 1)

(4)找出整數(shù)E,E與M互質(zhì),即除了1之外,沒有其他公約數(shù)

(5)找出整數(shù)D,使得E*D除以M余1,即 (E * D) % M = 1

經(jīng)過上述準(zhǔn)備工作之后,可以得到:

E是公鑰,負(fù)責(zé)加密

D是私鑰,負(fù)責(zé)解密

N負(fù)責(zé)公鑰和私鑰之間的聯(lián)系

加密算法,假定對X進(jìn)行加密

(X ^ E) % N = Y

n根據(jù)費(fèi)爾馬小定義,根據(jù)以下公式可以完成解密操作

(Y ^ D) % N = X

但是RSA加密算法效率較差,對大型數(shù)據(jù)加密時(shí)間很長,一般用于小數(shù)據(jù)。

常用場景:

分部要給總部發(fā)一段報(bào)文,先對報(bào)文整個(gè)進(jìn)行MD5得到一個(gè)報(bào)文摘要,再對這個(gè)報(bào)文摘要用公鑰加密。然后把報(bào)文和這個(gè)RSA密文一起發(fā)過去。

總部接收到報(bào)文之后要先確定報(bào)文是否在中途被人篡改,就先把這個(gè)密文用私鑰解密得到報(bào)文摘要,再和整個(gè)報(bào)文MD5一下得到的報(bào)文摘要進(jìn)行對比 如果一樣就是沒被改過。


Base64加密原理

Base64是一種加料置位加密法,那為什么叫base64呢?因?yàn)闊o論明文是什么(比如漢字,特殊符號等),加密后的密文都只會變成字母A-Z、a-z和0-9 和+和/這64個(gè)字符,被他加密體后積一般會變成原來的4/3。

Base64的標(biāo)準(zhǔn)在RFC2045里的24頁可以看到。

http://wenku.baidu.com/view/bd567523aaea998fcc220e8e.html

下面我就來加密一個(gè)astralidea的簡寫AST來說明他的加密原理。

為了說明方便,我們用人的思考方式,而不是計(jì)算機(jī)的方式,下面是上圖的說明。

1.假設(shè)有3個(gè)字符,首先先將他換成10進(jìn)制ASCII碼,然后轉(zhuǎn)成2進(jìn)制,少位用0補(bǔ)齊,保證8位。

2.因?yàn)锳SCII碼大小是一字節(jié)也就是8位,3個(gè)8位。又因?yàn)?*8=4*6,我們給他分成4分,每份6位。如果少位都用0補(bǔ)齊。

3.把6位碼前2位加兩個(gè)0,比如010000轉(zhuǎn)完后就是00010000,這對計(jì)算機(jī)來說比較重要,變成了8位碼。

4.將4個(gè)8位(也就是一字節(jié))碼按照RFC里的BASE64標(biāo)準(zhǔn)換算,下面也提供了標(biāo)準(zhǔn)表。

這樣我們就得到了QVNU,也就是AST加密的結(jié)果。

下面是標(biāo)準(zhǔn)的BASE64編碼表。

那么有3N個(gè)字符就是分別把3個(gè)轉(zhuǎn)成4個(gè)了,那假如有3N+1個(gè)字符怎么辦呢?

BASE64是這樣規(guī)定的,剩下的用“=”補(bǔ)齊。

比如A這個(gè)字符轉(zhuǎn)后為01000001末尾加4個(gè)0變?yōu)?10000|010000查表得QQ差2個(gè)用=補(bǔ)齊。

因此A加密后是QQ==,對于3N+2情況

同理AS加密后為QVM=

這樣就有了所有情況了。

說了這么多,我們給出實(shí)現(xiàn)加密的代碼,從這里更可以看出加密過程簡潔的表達(dá):

當(dāng)然如果你用.net庫你可以直接調(diào)用

byte[] bytes=Encoding.Default.GetBytes("ConvertString");

Convert.ToBase64String(bytes);

即可。

應(yīng)用:

1.由于BASE64可以加密任何的字符,那么我們可以把一個(gè)小程序比如幾K的EXE文件加密,然后就可以發(fā)到網(wǎng)頁上,因?yàn)锽ASE64標(biāo)準(zhǔn)沒有非法字符,放到任何空間都應(yīng)該不會有問題。然后另一邊復(fù)制下來解密就OK了,這樣可以省得傳到網(wǎng)絡(luò)硬盤各種原因(比如病毒上傳失?。┲惖膯栴}。

2.BASE64最初是考慮加密后讓你不能一眼看出明文是什么而出現(xiàn)的,其最主要的應(yīng)用當(dāng)然是加密了,比如迅雷就是通過BASE64加料后加密而實(shí)現(xiàn)的。

比如我虛擬一個(gè)地址http://www.astralidea.com/down.exe

我們知道這個(gè)地址根本不存在,假設(shè)我們會了BASE64怎么模擬迅雷的地址呢?

1.迅雷把上面地址加上料AA和ZZ變成:AAhttp://www.astralidea.com/down.exeZZ

2.把上面的字符加密得:QUFodHRwOi8vd3d3LmFzdHJhbGlkZWEuY29tL2Rvd24uZXhlWlo=

3.再前面加上thunder://得:thunder://QUFodHRwOi8vd3d3LmFzdHJhbGlkZWEuY29tL2Rvd24uZXhlWlo=

你會發(fā)現(xiàn)加密后的和我虛擬的是一樣的。

FLASHGET原理也是一樣,只不過加的料為[FLASHGET]。

而QQ旋風(fēng)干脆不加料,直接就對地址進(jìn)行BASE64編碼了。

3.Asp.Net里的viewstate就是用BASE64加密所得的,如果了解了這個(gè)可以把他解密就能得到一個(gè)XML文件,找到key-value pairs

4.BASE64變體,上面所說的都是標(biāo)準(zhǔn)的BASE64,如果我們把加密表里的內(nèi)容替換或打亂順序就成了變異的BASE64,如Uuencode加密方法原理一樣,但是加密表不一樣。

。。。。。

那么BASE64是怎么解密的呢?只要你動動腦筋自己也寫一寫,一定能寫出來。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 這篇文章主要講述在Mobile BI(移動商務(wù)智能)開發(fā)過程中,在網(wǎng)絡(luò)通信、數(shù)據(jù)存儲、登錄驗(yàn)證這幾個(gè)方面涉及的加密...
    雨_樹閱讀 3,039評論 0 6
  • 在開發(fā)應(yīng)用過程中,客戶端與服務(wù)端經(jīng)常需要進(jìn)行數(shù)據(jù)傳輸,涉及到重要隱私安全信息時(shí),開發(fā)者自然會想到對其進(jìn)行加密,即使...
    閑庭閱讀 3,433評論 0 11
  • 概述 之前一直對加密相關(guān)的算法知之甚少,只知道類似DES、RSA等加密算法能對數(shù)據(jù)傳輸進(jìn)行加密,且各種加密算法各有...
    Henryzhu閱讀 3,218評論 0 14
  • 當(dāng)初人們都想當(dāng)個(gè)假流氓,真君子。不想,弄假成真,變成了真流氓,假君子
    施主別跑啊閱讀 296評論 0 0
  • 為了一個(gè)人,學(xué)了俄語 為了一個(gè)人,減了肥 那個(gè)人從此消失在我的生命里了嗎? 大概再也沒力氣愛上另一個(gè)人了! 生命中...
    小南560閱讀 179評論 0 0

友情鏈接更多精彩內(nèi)容