寫給菜鳥—可逆和不可逆加解密算法原理
發(fā)布日期:2022-01-02 02:32 | 文章來源:站長之家
現(xiàn)在很多網(wǎng)站密碼采用MD5 方式加密,MD5是不可逆的運(yùn)算,所以加密后不可能根據(jù)密文來還原。
這里設(shè)明文到MD5密文的轉(zhuǎn)換過程為函數(shù),f(x),對(duì)任意x只有一個(gè)y=f(x)與之對(duì)應(yīng),對(duì)于任意y=f(x)只可能有唯一的一個(gè)x可以得到f(x)=y。16位MD5 的算法有f("917")="d2dc5d489242e60e"。因?yàn)檫\(yùn)算不可逆,所以不會(huì)存在統(tǒng)一的算法g(y)=x而是你通過"d2dc5d489242e60e"得到"917"。
如果你在一個(gè)系統(tǒng)中的注冊密碼是"917",出于安全考慮,系統(tǒng)留下的不是明文而是"d2dc5d489242e60e"。比如說你本次登錄對(duì)系統(tǒng)提交的是"917",系統(tǒng)不是直接驗(yàn)證,而是用f("917")來驗(yàn)證是不是等于系統(tǒng)中保存的"d2dc5d489242e60e"。如果相等,就代表登陸成功,不相等就不成功。
你可以通過各種方法得到系統(tǒng)中存儲(chǔ)的"d2dc5d489242e60e",此時(shí)的唯一選擇是在有效的范圍內(nèi)枚舉(一一列舉)可能的明文通過f(x)看是否等于"d2dc5d489242e60e"。因?yàn)橛?jì)算機(jī)的優(yōu)勢就是運(yùn)算速度快和運(yùn)算精確度高,每秒鐘可以枚舉數(shù)萬甚至更高。比如可以讓計(jì)算機(jī)循環(huán)從0枚舉到999,當(dāng)?shù)?17時(shí)就會(huì)得到與上例相同的密文,就證明明文是"917"。指定計(jì)算機(jī)允許的全部字符范圍理論上就可以破解所有的密碼明文,而只是時(shí)間問題(一個(gè)復(fù)雜的密碼可能需要破解者N個(gè)世紀(jì)來破解,而一個(gè)8位純數(shù)字、常用單詞可能只需要計(jì)算機(jī)N秒的時(shí)間)。盡管數(shù)據(jù)庫不是那么容易泄露和被入侵者得到,但是安全意識(shí)必須加強(qiáng),密碼強(qiáng)度要足夠大。
而很多時(shí)候我們需要可逆的算法來加密。比如我們發(fā)郵件,如果是機(jī)要文件發(fā)送路途中可能會(huì)被各種方法攔截而泄密。這是我們需要可逆算法。假設(shè)有一種簡單算法為y=f(x,m),逆算有x=g(y,n)。發(fā)送方使用f(x,m),接受方使用g(y,n)。m,n分別為雙方的“鑰匙”。設(shè)m=1,n=2時(shí)有y=f("晚上8點(diǎn)橋上見",1)="你吃飯了么?";x=g("你吃飯了么?",2)="晚上8點(diǎn)橋上見"。此時(shí)發(fā)送方只用根據(jù)自己的y=f(x,m)發(fā)送“你吃飯了么?”給接受方,即使路上被攔截也沒有泄露什么,接受方用自己唯一的x=g(y,n)代入得到的y=“你吃飯了么?”和自己的鑰匙就輕松得到x="晚上8點(diǎn)橋上見"。
這里設(shè)明文到MD5密文的轉(zhuǎn)換過程為函數(shù),f(x),對(duì)任意x只有一個(gè)y=f(x)與之對(duì)應(yīng),對(duì)于任意y=f(x)只可能有唯一的一個(gè)x可以得到f(x)=y。16位MD5 的算法有f("917")="d2dc5d489242e60e"。因?yàn)檫\(yùn)算不可逆,所以不會(huì)存在統(tǒng)一的算法g(y)=x而是你通過"d2dc5d489242e60e"得到"917"。
如果你在一個(gè)系統(tǒng)中的注冊密碼是"917",出于安全考慮,系統(tǒng)留下的不是明文而是"d2dc5d489242e60e"。比如說你本次登錄對(duì)系統(tǒng)提交的是"917",系統(tǒng)不是直接驗(yàn)證,而是用f("917")來驗(yàn)證是不是等于系統(tǒng)中保存的"d2dc5d489242e60e"。如果相等,就代表登陸成功,不相等就不成功。
你可以通過各種方法得到系統(tǒng)中存儲(chǔ)的"d2dc5d489242e60e",此時(shí)的唯一選擇是在有效的范圍內(nèi)枚舉(一一列舉)可能的明文通過f(x)看是否等于"d2dc5d489242e60e"。因?yàn)橛?jì)算機(jī)的優(yōu)勢就是運(yùn)算速度快和運(yùn)算精確度高,每秒鐘可以枚舉數(shù)萬甚至更高。比如可以讓計(jì)算機(jī)循環(huán)從0枚舉到999,當(dāng)?shù)?17時(shí)就會(huì)得到與上例相同的密文,就證明明文是"917"。指定計(jì)算機(jī)允許的全部字符范圍理論上就可以破解所有的密碼明文,而只是時(shí)間問題(一個(gè)復(fù)雜的密碼可能需要破解者N個(gè)世紀(jì)來破解,而一個(gè)8位純數(shù)字、常用單詞可能只需要計(jì)算機(jī)N秒的時(shí)間)。盡管數(shù)據(jù)庫不是那么容易泄露和被入侵者得到,但是安全意識(shí)必須加強(qiáng),密碼強(qiáng)度要足夠大。
而很多時(shí)候我們需要可逆的算法來加密。比如我們發(fā)郵件,如果是機(jī)要文件發(fā)送路途中可能會(huì)被各種方法攔截而泄密。這是我們需要可逆算法。假設(shè)有一種簡單算法為y=f(x,m),逆算有x=g(y,n)。發(fā)送方使用f(x,m),接受方使用g(y,n)。m,n分別為雙方的“鑰匙”。設(shè)m=1,n=2時(shí)有y=f("晚上8點(diǎn)橋上見",1)="你吃飯了么?";x=g("你吃飯了么?",2)="晚上8點(diǎn)橋上見"。此時(shí)發(fā)送方只用根據(jù)自己的y=f(x,m)發(fā)送“你吃飯了么?”給接受方,即使路上被攔截也沒有泄露什么,接受方用自己唯一的x=g(y,n)代入得到的y=“你吃飯了么?”和自己的鑰匙就輕松得到x="晚上8點(diǎn)橋上見"。
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。
相關(guān)文章