加解密你了解多少
加密解密你了解多少?
這個(gè)題目一寫(xiě)出來(lái),筆者自己也思考了下自己在以前職業(yè)生涯中涉及到的加密解密技術(shù),也思考了自己熟知的公知度高的幾種加密方式。
下面我來(lái)說(shuō)說(shuō)一些理解上的東西。
加密解密中間參與的是一個(gè)算法,有這個(gè)算法規(guī)律你才可以將簡(jiǎn)單的語(yǔ)言或者數(shù)據(jù)轉(zhuǎn)換成只有了解此算法的人才能看懂才能知道其本身含義的語(yǔ)言或者是數(shù)據(jù),你做的這部分工作其實(shí)就是在加密,別人理解的過(guò)程就是解密。
定義:把一段原始數(shù)據(jù)通過(guò)某種算法處理成另外一種數(shù)據(jù)(原始數(shù)據(jù)為明文,處理后的數(shù)據(jù)為密文)。明文->密文:稱(chēng)之為加密。密文->明文:稱(chēng)之為解密。
從圖中可以了解到對(duì)于加密、解密來(lái)講算法是非常關(guān)鍵。但是公知度高的算法都是公開(kāi)的,一旦有人想要pojie這個(gè)算法,而且能夠被pojie了,則所有使用這個(gè)算法的產(chǎn)品都面臨要報(bào)廢、被daoban的危機(jī)。而且很多的時(shí)候做過(guò)開(kāi)發(fā)的人就知道,替換一個(gè)算法的成本很大。因此一個(gè)加密出來(lái)的數(shù)據(jù)本身可靠與否,取決于密鑰,而不是算法,因?yàn)槊荑€的調(diào)換成本比較低。
那么問(wèn)題來(lái)了,什么是密鑰呢?
密鑰是一種參數(shù),它是在明文->密文或密文->明文的算法中輸入的數(shù)據(jù)。分為對(duì)稱(chēng)密鑰,非對(duì)稱(chēng)密鑰。
顧名思義,對(duì)稱(chēng)加密又稱(chēng)為私鑰加密,發(fā)送方和接收方使用同一個(gè)密鑰區(qū)加密解密數(shù)據(jù)。優(yōu)勢(shì)是加解密速度快適合于對(duì)大數(shù)據(jù)進(jìn)行加密。但是密鑰管理困難。
非對(duì)稱(chēng)加密:又稱(chēng)公鑰加密。需要使用不同的密鑰來(lái)分別完成加密和解密操作。其中一個(gè)密鑰公開(kāi)發(fā)布,即為公鑰。另一個(gè)由用戶(hù)自己秘密保存,即為私鑰。發(fā)送方用對(duì)方的公鑰加密數(shù)據(jù),對(duì)方用自己的私鑰解密數(shù)據(jù)。缺點(diǎn)在于加密解密的速度比對(duì)稱(chēng)密鑰慢很多。
關(guān)于算法這塊現(xiàn)在也就上面提到的對(duì)稱(chēng)和非對(duì)稱(chēng)兩類(lèi)。在此簡(jiǎn)單闡述下。對(duì)稱(chēng)算法,即單向加密算法。
對(duì)稱(chēng)算法:
對(duì)稱(chēng)算法的缺點(diǎn)其實(shí)是很明顯的,因?yàn)槠浼用芙饷苁褂玫亩际窍嗤拿荑€,那么在整個(gè)過(guò)程中密鑰存儲(chǔ)的安全性這塊就需要好好考量方案。優(yōu)點(diǎn)前面也說(shuō)過(guò)了,在此不累述。
非對(duì)稱(chēng)算法:
從圖中可以看到加密和解密用到的不是同一個(gè)密鑰,發(fā)送方使用接收方的公鑰進(jìn)行加密,接收方使用與之配合的私鑰進(jìn)行解密,整個(gè)傳送過(guò)程中,加密后的數(shù)據(jù)只用接收方自己可以解密,因?yàn)橹挥兴约簱碛兴借€。
相對(duì)來(lái)說(shuō)非對(duì)稱(chēng)算法比較安全,但是在實(shí)際使用中總歸是要考慮很多的情況,權(quán)衡所有的條件。因?yàn)闅w根結(jié)底沒(méi)有哪種算法是絕對(duì)安全絕對(duì)完美的,所以讀者可以在自己的產(chǎn)品保密方案中涉及到幾種算法。
舉個(gè)簡(jiǎn)單的例子:你可以把要傳遞給接收方的線(xiàn)路加密對(duì)稱(chēng)秘鑰,用對(duì)非稱(chēng)算法加密以密文的方式傳遞給接收方,用公鑰/私鑰加密,相對(duì)應(yīng)的就是私鑰/公鑰解密。線(xiàn)路數(shù)據(jù)加密可以使用對(duì)稱(chēng)算法加密數(shù)據(jù)。
把對(duì)稱(chēng)算法和非對(duì)稱(chēng)算法糅合到一起,可以保證數(shù)據(jù)的機(jī)密性,來(lái)源的合法性。但是數(shù)據(jù)本身的完整性又該如何解決?若是有非法截取,然后亂修改一通,破壞數(shù)據(jù)的完整性接收方又該如何判斷呢?
此問(wèn)題的提出就涉及到了另外一種加密算法,即單項(xiàng)加密算法。準(zhǔn)確來(lái)說(shuō),單向加密算法并不是一種加密技術(shù),而是通過(guò)提取數(shù)據(jù)特征碼,來(lái)驗(yàn)證數(shù)據(jù)的完整性。在單項(xiàng)算法的設(shè)計(jì)上需要考慮的兩個(gè)因素:雪崩現(xiàn)象和定長(zhǎng)特征。雪崩現(xiàn)象:任何微小的變動(dòng)都可以導(dǎo)致結(jié)果發(fā)生巨大的變化。定長(zhǎng)特征:不論數(shù)據(jù)本身多長(zhǎng),提取的特征碼的長(zhǎng)度都是固定的。
上面提到的這三種算法如果讀者在設(shè)計(jì)思路中有考慮并糅合在實(shí)際中使用。最終保證數(shù)據(jù)的完整性,可靠性,機(jī)密性以及來(lái)源的合法性。希望這篇整理能對(duì)于讀者在理解算法的概念上有些幫助!
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。