实例告诉你什么是加密/解密和算法加密算法和解密算法怎么理解
現(xiàn)在,數(shù)字資產(chǎn),加密,算法已經(jīng)充斥著我們的生活,就像頭條的推薦算法,抖音的推薦算法,如何推出爆款的算法等等。
那么什么是算法。其實這是一個很容易理解的概念,算法其實就是按照一定邏輯并且把它實現(xiàn)出來的過程。簡單來說,按照計算機輸入-> 處理 -> 輸出的流程,就是:
輸入數(shù)據(jù) -> 用算法進(jìn)行計算 -> 輸出結(jié)果
舉個例子: 輸入的數(shù)據(jù)是 【abc】,
算法是 :輸入數(shù)據(jù)的每一位的字母順序向后移動3位并輸出對應(yīng)的字母,
輸出的就是【def】。
然后大家有沒有發(fā)現(xiàn),上面的例子其實也是一個加解密的過程。這里是著名的【凱撒密碼】,據(jù)稱,當(dāng)年凱撒就是用這種方法和他的將軍們進(jìn)行溝通交流了。
凱撒大帝
密碼學(xué)
密碼學(xué)(在西歐語文中,源于希臘語kryptós“隱藏的”,和gráphein“書寫”)是研究如何隱密地傳遞信息的學(xué)科。
在現(xiàn)代特別指對信息以及其傳輸?shù)臄?shù)學(xué)性研究,常被認(rèn)為是數(shù)學(xué)和計算機科學(xué)的分支,密碼學(xué)的首要目的是如何隱藏信息的真實意圖和含義。特別是在于電腦與網(wǎng)絡(luò)安全所使用的技術(shù),如訪問控制與信息的機密性。
著名的密碼學(xué)者Ron Rivest解釋道:“密碼學(xué)是關(guān)于如何在敵人存在的環(huán)境中通訊”,自工程學(xué)的角度,這相當(dāng)于密碼學(xué)與純數(shù)學(xué)的異同。
向神一般的男人致敬
信息加密這個需求是一直存在的,自從有了信息遠(yuǎn)距離傳遞的需求,如何防止信息泄露一直都是人們所追求并時刻關(guān)注的。從飛鴿傳書到電報再到電話,互聯(lián)網(wǎng),無處不在,也是因為戰(zhàn)爭,信息的重要性被無比的重視和提高到一個全新的高度,并飛快地發(fā)展。
戰(zhàn)爭在某種程度上推動了科技的發(fā)展,大家現(xiàn)在使用的,接觸的加解密算法,甚至計算機,都是來源于二戰(zhàn)。二戰(zhàn)中過于加解密的手段和戰(zhàn)斗絲毫不遜色于正面戰(zhàn)場的激烈程度。
大家耳熟能詳?shù)拇蟾庞校儡娊孬@并破解了日軍進(jìn)攻中途島的密文,最終在中途島殲滅了日軍大部分的艦隊成為太平洋戰(zhàn)爭的轉(zhuǎn)折點;又或者,更加有意義和深刻影響的英德密碼學(xué)上的交鋒。
圖靈破解了德國號稱不可能并破解的Enigma(恩尼格瑪)密碼機和Tunny密碼,為盟軍贏回了主動權(quán)和極大的戰(zhàn)略優(yōu)勢,并創(chuàng)建了現(xiàn)代計算機科學(xué)和人工智能理論,是個神一般的男人,可以說帶領(lǐng)人類點亮數(shù)字化甚至說改變?nèi)祟愇拿鞯淖呦虻哪腥?/b>。
在現(xiàn)在,任何談及密碼學(xué),加解密,算法,人工智能,數(shù)字化等現(xiàn)在計算機科學(xué),都繞不開這個猶如數(shù)字上帝一般的人物,因為是他奠定了這些學(xué)科的基礎(chǔ),以至于我們現(xiàn)在在用的計算機,人工智能,手機等等軟硬件都是基于他的理論框架內(nèi)實踐的。
計算機界內(nèi)有一個號稱計算機的諾貝爾獎就叫“圖靈獎”。
據(jù)說蘋果那個咬掉一口的蘋果LOGO也是喬布斯為了致敬圖靈老爺子。
什么是加密
其實加密這個事情大家每時每刻都在接觸,打開手機的密碼,指紋,銀行卡密碼等等,這些都是一個加密手段,這里主要講的是加密在互聯(lián)網(wǎng)上的使用。
這里有個概念要寫解釋一下,就是無論是手機,還是電腦,還是服務(wù)器,甚至是智能開關(guān),我們把接入網(wǎng)絡(luò)的設(shè)備統(tǒng)一稱為終端。那么,互聯(lián)網(wǎng)就是把這些終端串起來的一張大網(wǎng),讓這里面的設(shè)備可以互聯(lián)互通。
正如上文述說的,在這種長距離的傳播中,如何保證數(shù)據(jù)安全就是一個很大的剛需和命題,在這個網(wǎng)絡(luò)中,所有人都參與,也就意味著都有機會截取到你的數(shù)據(jù)包,如果你是明文傳輸?shù)脑挘簿鸵馕吨嗦懵愕匕炎约旱拿艽a暴漏在所有人面前。互聯(lián)網(wǎng)一開始,也為軍方和科研機構(gòu)服務(wù)的,那些印著top secret(絕密)的材料更加需要得到保護(hù)。
所以,在互聯(lián)網(wǎng)的假設(shè)和各種協(xié)議的設(shè)計之處,如何保證數(shù)據(jù)包的傳輸安全和加解密算法,都已經(jīng)早早地安排上了,畢竟,沒有加密的明文數(shù)據(jù)包在互聯(lián)網(wǎng)上傳播,和你在人潮涌動的大街上裸奔沒啥區(qū)別。
這里先不描述那些復(fù)雜晦澀難懂的加密原理和算法,我們先來了解一般來說,用得最多的加密算法和基本的原理,然后舉個栗子來感受一下加解密和算法的過程來看看是怎么保護(hù)數(shù)據(jù)和通訊安全的。
加密算法
一般來說,現(xiàn)在我們在用的主流的加密方式分為兩大類,一類是可逆加密,一類是不可逆加密。
不可逆加密
不可逆加密其實就很簡答了,就是字面意思,就是加密后其實是解密不了的,要解密的話,其實也是根據(jù)明文再加密一次,然后得到密文,和原來的密文做匹配最后來校驗這個結(jié)果對不對。主流的加密算法有:MD5,SHA1等等。
這部分可以略過,有點復(fù)雜,有興趣的可以研究一下。
MD5算法原理:
MD5以512位分組來處理輸入的信息,且每一分組又被劃分為16個32位子分組,經(jīng)過了一系列的處理后,算法的輸出由四個32位分組組成,將這四個32位分組級聯(lián)后將生成一個128位散列值;
第一步、填充:如果輸入信息的長度(bit)對512求余的結(jié)果不等于448,就需要填充使得對512求余的結(jié)果等于448。填充的方法是填充一個1和n個0。填充完后,信息的長度就為N*512+448(bit);
第二步、記錄信息長度:用64位來存儲填充前信息長度。這64位加在第一步結(jié)果的后面,這樣信息長度就變?yōu)镹*512+448+64=(N+1)*512位;
第三步、裝入標(biāo)準(zhǔn)的幻數(shù)(四個整數(shù)):標(biāo)準(zhǔn)的幻數(shù)(物理順序)是(A=(01234567)16,B=(89ABCDEF)16,C=(FEDCBA98)16,D=(76543210)16);
第四步、四輪循環(huán)運算:循環(huán)的次數(shù)是分組的個數(shù)(N+1);
因為不可逆,所以不可逆算法主要是應(yīng)用在防篡改,防止明文直接暴漏,數(shù)字簽名等用途,最近流行大火的區(qū)塊鏈技術(shù)中在在很多地方用了不可逆算法的地方來保證安全性。
舉個栗子
這幾年我們時常聽到某某互聯(lián)網(wǎng)公司被脫庫(就是數(shù)據(jù)庫被黑客拷貝下來),然后發(fā)現(xiàn)密碼是明文存儲的,結(jié)果圈內(nèi)人一陣震驚,破口大罵,吃瓜群眾我看不懂,但是大受震撼。
為什么互聯(lián)網(wǎng)從業(yè)者各種震驚呢。因為密碼在互聯(lián)網(wǎng)系統(tǒng)中,是不允許被明文存儲的,這是一條鐵律,鐵到什么程度呢,就像葵花寶典第一句,欲練神功必先自宮。
這是因為隨著大家的賬戶的增多,很多人可能都是用同一個密碼的,然后呢,因為開發(fā)人員和數(shù)據(jù)庫管理等問題,也是希望最大程度上保護(hù)用戶而不存儲用戶的明文密碼數(shù)據(jù)最大程度上的保護(hù)用戶信息。下面舉個常規(guī)狀態(tài)下是怎么保存賬戶和密碼登錄這個過程給大家感受一下。
用戶注冊:用戶輸入手機號和密碼,然后通過數(shù)據(jù)接口上報給服務(wù)器(合理有一層網(wǎng)絡(luò)傳輸?shù)腟SL加密算法來打包保護(hù)數(shù)據(jù)在網(wǎng)絡(luò)中傳播的安全性,這里先不講解,就是在數(shù)據(jù)包傳輸?shù)臅r候的加解密保護(hù)),服務(wù)器系統(tǒng)在收到用戶的手機號和密碼之后,會對明文密碼做一次不可逆的加密,一般來說都會用 sha1(md5(明文密碼)),經(jīng)過兩次不可逆加密,然后把得到的密文,就是加密結(jié)果那堆亂七八糟的字符串,存儲在數(shù)據(jù)庫里面。
密碼明文: abc123456cba
加密后密文:34758d201abdb25f4cb4f88900d67b7b4a4739b5
然后這個時候,其實大家都不知道這串字符串對應(yīng)的是個啥東西,怎么校驗用戶密碼呢。校驗原理是這樣的:
用戶登錄:用戶輸入手機號和密碼,系統(tǒng)收到之后,先根據(jù)手機號找到這個用戶,然后把收到的明文密碼,按照原來的味道,原來的配方再加密一次,然后得到一個結(jié)果,把這個結(jié)果和數(shù)據(jù)庫里面存儲的密文做對比,這樣就可以知道密碼是正確是還是錯誤的。
這種技術(shù)還被廣泛的防篡改上,我們的文件其實自創(chuàng)建開始就有一個MD5值,一旦文件內(nèi)容被改動過,就等于原來加密的明文信息改變了,MD5值就會改變。所以當(dāng)你拿到一個文件和MD5值,然后在你收到文件的時候,把你收到的文件和原來文件的MD5值做一下對比,就知道這個文件有沒有被人動過手腳修改過內(nèi)容了。
對稱性加密和非對稱性加密
在很多情況下,我們在加密完了之后,都希望能解密開明文信息知道說的是什么內(nèi)容,所以這個時候我們就需要能解密出明文的算法了。所以可逆加密中,有這兩種常用的加解密方式。
對稱性加密
對稱性加密簡單來說,就像一個鎖,然后有兩把鑰匙,兩把都可以打開鎖。這個是最早應(yīng)用的加密方式,包括前文所說的凱撒密碼也是這種。
首先把明文,就是我們前文說的abc,使用秘鑰加密,這里的的秘鑰就是凱撒密碼中的向后偏移3位字母順序的【3】,算法就是把明文偏移3位字母順序后輸出,得到的結(jié)果就是def,我們稱為密文。
拿到密文之后,同時你擁有解密的秘鑰,秘鑰是【3】,解密算法是,密文里面的字母,向前退3為字母順序,得到明文【abc】。
這我們能看到,秘鑰是【3】,加密算法和解密算法,也存在些許區(qū)別。
對稱性加密
但是漸漸地,大家發(fā)現(xiàn)這種方式不夠用了,因為如果秘鑰被人獲取了之后,推算出加密方式,很容易就會被破解,而且大規(guī)模應(yīng)用之后,加密算法可以被推算出來,然后秘鑰一旦泄露風(fēng)險性問題也是極高。當(dāng)然,這個只是相對的,也有一些對稱性加密算法會無線增加破解的難度,常見的AES,DES,3DES等。
DES 加密算法是對密鑰進(jìn)行保密,而公開算法,包括加密和解密算法。這樣,只有掌握了和發(fā)送方 相同密鑰的人才能解讀由 DES加密算法加密的密文數(shù)據(jù)。
因此,破譯 DES 加密算法實際上就是 搜索密鑰的編碼。對于 56 位長度的 密鑰 來說,如果用 窮舉法 來進(jìn)行搜索的話,其運算次數(shù)為 2 ^ 56 次。
所以,一般現(xiàn)在不單獨使用對稱性加碼,而是混合著非對稱性加密一起使用,再混合時間戳,隨機數(shù)等算法。
非對稱性加密
非對稱性加密稍微復(fù)雜一點,它是有兩把鑰匙的,一把成為公鑰,一把成為秘鑰。簡單來說,就是一個鎖,然后有兩把對應(yīng)的鑰匙,這兩把鑰匙是匹配的,然后兩把鑰匙一次插入,才能打開得到明文信息。
一般是拿公鑰來加密數(shù)據(jù)體,然后這個用公鑰加密的密文,公鑰自己也是是打不開的,要使用與公鑰對應(yīng)的私鑰才能解密出來明文數(shù)據(jù),所以只獲取到公鑰是解不開數(shù)據(jù)的,這在無形中大大提高了安全性。
非對稱性有很多種加密算法,其中最普遍的是RSA加密算法。被普遍認(rèn)為是目前最優(yōu)秀的公鑰方案之一。RSA 是第一個能同時用于加密和數(shù)字簽名的算法,它能夠抵抗目前已知的所有密碼攻擊,被 ISO推薦為公鑰數(shù)據(jù)加密標(biāo)準(zhǔn)。
RSA 加密算法基于一個十分簡單的數(shù)論事實:將兩個大素數(shù)相乘十分容易,但想要對其乘積進(jìn)行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰。
RSA算法過程:
舉個栗子
為了方便,p , q 的值取小一點,假設(shè):p = 17,q = 19,
(1)求N:N = p * q = 323;
(2)求L:L = lcm(p-1, q-1)= lcm(16,18) = 144,144為16和18對最小公倍數(shù);
(3)求E:1 < E < L ,gcd(E,L)=1,即1 < E < 144,gcd(E,144) = 1,E和144互為質(zhì)數(shù),E = 5滿足上述2個條件,E = 5,此時公鑰= (E,N)=(5,323);
(4)求D:求D也必須滿足2個條件:1 < D < L,E*D mod L = 1,即1 < D < 144,5 * D mod 144 = 1,顯然當(dāng)D= 29 時滿足上述兩個條件。1 < 29 < 144,5*29 mod 144 = 145 mod 144 = 1,此時私鑰=(D,N)=(29,323);
(5)加密:準(zhǔn)備的明文必須是小于N的數(shù),因為加密或者解密都要 mod N,其結(jié)果必須小于N。
假設(shè)明文 = 123,則 密文=(123的5次方)mod 323=225
(6)解密:明文=(225的29次方)mod 323 =123,所以解密后的明文為123。
鑒于RSA算法的應(yīng)用非常的多,可以說只要要計算機的地方,就有RSA算法的存在,這里就不舉出具體應(yīng)用的,如果有興趣的小伙伴可以留言,我們會找一期出來專門說一下這個算法的應(yīng)用實例。
結(jié)語:
基于加密解密,保護(hù)信息安全,各路大佬都用各種手段斗智斗勇,法力無邊。本文只是做了簡單的概述,這里面設(shè)計了各種數(shù)學(xué)公式,算法,計算機設(shè)計等內(nèi)容,本文盡量用大白話的語言讓大家了解計算機科學(xué)的神秘的面紗和運行邏輯,如果想了解更多的內(nèi)容,可以評論留言(我估計有耐心看到這里的人不多)。
鳴謝
互聯(lián)網(wǎng)鼓勵開源共享,但是也尊重版權(quán)。
【申明】RSA加解密部分算法部分素材圖片來自于:
總結(jié)
以上是生活随笔為你收集整理的实例告诉你什么是加密/解密和算法加密算法和解密算法怎么理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 破解版路由器重置了怎么办破解版路由器重置
- 下一篇: 如何填充序列1表格如何填充序列