摘要:但是給永強留下了面積巨大的心理陰影。所以永強本來昨天要發(fā)的文章拖到了今天,但是永強實在是怕了,他怕被人噴了被人罵了。
永強被嚇壞了!因為永強看到了某個微信群有人指出公眾號里上篇打醬油附送的那篇文章《震驚!北京一男子竟然用swoole做了這種事!》的內(nèi)容實在是太low了,這種low文章就不要拿出來發(fā)了。
但是給永強留下了面積巨大的心理陰影。他尚未見識過社交網(wǎng)絡(luò)的惡毒嘴臉。
所以永強本來昨天要發(fā)的文章拖到了今天,但是永強實在是怕了,他怕被人噴了被人罵了。雖然我百般鼓勵,但他還是心有余悸。盡管我都已經(jīng)直接告訴他“你那玩意根本就沒人看”了,他還是依然不敢發(fā)了。然后我不得不擺出PS大法給他做了一張圖,他看了看那張圖后又收了我6.66元的微信紅包,決定繼續(xù)鼓起勇氣發(fā)了。
是時候表現(xiàn)一下我的PS精湛技術(shù)了!
“我們歷經(jīng)千辛萬苦,摸打滾爬過數(shù)不清的錯誤,發(fā)射了不知道多少枚長征系列,耗費了一代航天人的心血,終于看到了地球與月亮通信的曙光,然后就在五分鐘,我們驚訝地發(fā)現(xiàn),原來老王的smartmesh技術(shù)早就實現(xiàn)了,甚至連地球文明與外形文明的通信都給出了完美的解決方案…” ——— 尼古拉斯 * 趙永強
眾所周知,作為精通各種技術(shù)表演的我早就已經(jīng)不屑于采用ppt的方式吹牛了,一般我都是直接上機操作表演,當(dāng)然了,程序都是提前寫好了的,全是mock的假數(shù)據(jù),腳本實現(xiàn)自動化,無論誰來操作都是流暢的,一切都是完美的!
作為一個追求完美的人,我還得繼續(xù)接著吹上次聊到結(jié)尾,好像是遺留了兩個問題:
ecb、cfb、cbc等這些后綴是什么意思
iv向量又是什么意思
鑒于DES和3DES已經(jīng)屬于不建議使用的方法了,所以這次我們直接用AES加密進(jìn)行裝逼表演,比如下面這坨代碼,你們復(fù)制粘貼走運行一下:
我這里運行結(jié)果是:
c1391e34caf38f8c2a477cbda3772533c1391e34caf38f8c2a477cbda3772533d96aa42b59151a9e9b5925fc9d95adaf : 96分析一下上面代碼:這次我們選用的加密方法是AES-128-ECB,這個128是什么意思?128就是密鑰長度的意思:128bit;如果你留心的話,還會注意到有aes-192-ecb和aes-256-ecb,其實就是指加密密鑰長度為192bit、256bit,然后是值得注意的一個地方是:
$enc_data = openssl_encrypt( $data, $my_method, $key, OPENSSL_RAW_DATA );
最后一個參數(shù)是OPENSSL_RAW_DATA,如果選用這個option的話,經(jīng)過加密后的數(shù)據(jù)會是奇怪的二進(jìn)制數(shù)據(jù),無法直接通過文本方式查看,所以要看的話必須先使用bin2hex函數(shù)處理一下。注意了哈,我選的這個密鑰1234567812345678是有特殊用意的,這個密鑰的長度是16字節(jié)也就是128bit,而我們選用的aes加密方法中要求的密鑰長度就是128bit,那么我們嘗試將密鑰增加幾位變成:1234567812345678abc,然后其他代碼不做任何改動,再次執(zhí)行加密,結(jié)果如下:
c1391e34caf38f8c2a477cbda3772533c1391e34caf38f8c2a477cbda3772533d96aa42b59151a9e9b5925fc9d95adaf : 96就是說用“1234567812345678”和“1234567812345678abc”加密后的數(shù)據(jù)都是一樣的。看起來如果我們選用128bit密鑰長度的話,一旦密鑰長度超過128bit后面多余的部分會被直接無視掉~~~
然后我們再嘗試將密鑰“1234567812345678”縮短一個字節(jié),改成“123456781234567”,其他地方代碼不做任何改動,運行一波兒,結(jié)果如下:
c202e5b1dc36c3147e50d02df7ab700cc202e5b1dc36c3147e50d02df7ab700cda89b056d926d3fea2e59ffc552b1d98 : 96這次不行了,已經(jīng)不一樣了~
然后,我們將注意力放到明文和密文上來:
明文:12345678abcdxxoo12345678abcdxxoo 密文:c1391e34caf38f8c2a477cbda3772533c1391e34caf38f8c2a477cbda3772533d96aa42b59151a9e9b5925fc9d95adaf仔細(xì)觀察有一個比較屌的地方,我們將密文每隔32個字符長度就分割一下,你們感受一下:
c1391e34caf38f8c2a477cbda3772533
c1391e34caf38f8c2a477cbda3772533
d96aa42b59151a9e9b5925fc9d95adaf臥槽,竟然有前兩段是一樣的!???臥槽。。。 。。。
仔細(xì)看了一把明文12345678abcdxxoo12345678abcdxxoo,分析一下,臥槽!:
12345678abcdxxoo 12345678abcdxxoo難道說明文“12345678abcdxxoo”被密鑰“1234567812345678”加密后后的密文就是“c1391e34caf38f8c2a477cbda3772533”?
時機已然成熟了!是時候繼續(xù)深入裝逼了!為什么會出現(xiàn)這個結(jié)果?現(xiàn)在我們開始說“ecb、cfb、cbc等這些后綴是什么意思”。
你若有所思的猜測到:“難道說對稱加密的時候,都是將明文先分塊,然后再分別對分塊加密?”,我欣慰地看著你說:“嗯,是的,肯定是,不然老子往下沒法寫了,我特么都快編不下去了…”
DES和3DES會將明文以64bit(8字節(jié))作為一個單元進(jìn)行分組;
AES則會將明文以128bit(16字節(jié))作為一個單元進(jìn)行分組;
無論是AES還是DES,當(dāng)最后一個分組的數(shù)據(jù)長度不滿足分組標(biāo)準(zhǔn)長度的時候,會用某種填充方式進(jìn)行填充;
AES對一個16字節(jié)分組加密完畢后,分組大小依然為16字節(jié);
比如說這段明文“12345678abcdxxoo12345678abcdxxoo”,一共是32字節(jié),理論上說就會被先按照16字節(jié)分組:“12345678abcdxxoo”是一組,剩下的“12345678abcdxxoo”是另外一組,我們用程序驗證一下:
注意明文長度我選擇剛好為32字節(jié)。保存運行一下,至于你們那里是什么結(jié)果我不知道,反正我這里是這樣的:
我日,感覺被打臉了,為毛加密后多出了16字節(jié)?
我們將明文從32字節(jié)的“12345678abcdxxoo12345678abcdxxoo”修改成33字節(jié)的“12345678abcdxxoo12345678abcdxxooa”,這樣的話,明文會被分成三個16字節(jié)的分組,由于最后一個分組只有一個字節(jié),所以剩余15字節(jié)會被填充:
似乎印證了我們一個猜測:當(dāng)最后一個明文分組小于要求分組標(biāo)準(zhǔn)大小時,不會產(chǎn)生新的分組;當(dāng)最后一個明文分組大于等于要求分組標(biāo)準(zhǔn)大小時,會產(chǎn)生一個新的分組。
我不想填充怎么辦?修改一下加密和解密函數(shù)的最后那個OPENSSL_NO_PADDING選項即可,你們感受一下:
上面代碼運行一下,結(jié)果如下圖:
有時候一些同學(xué)在做跨語言加解密的時候,基本上都是栽在了填充上。具體表現(xiàn)就是PHP加密后讓Java解密,然后發(fā)現(xiàn)解密失敗;或者Java加密PHP解密結(jié)果也是掛了。這個時候首先檢查一下PADDING這里,基本上都是這樣的問題。
那么說了這么多,總結(jié)一下:
AES和DES以及3DES這種加密方式被稱為分組密碼,分組密碼每次只能加密固定長度的明文,所以如果明文很長的話,就需要輪流為每個分組明文進(jìn)行加密,AES的分組長度是128bit,而DES的分組長度為64bit;如果一旦需要對多個分組進(jìn)行輪流加密,加入明文被分成了三個明文分組,那么就需要對三個明文進(jìn)行迭代加密(粗暴理解就是輪流加密),然而會有很多種不同的迭代方式,這種不同的迭代方式專業(yè)名詞就叫“模式”,這些模式有:ECB、CBC、OFB、CFB、CTR… …
PS:??對明文進(jìn)行分組的方式是固定的,唯一不同的就是分組長度不一樣而已;模式是指對多個明文從第一個開始輪流加密到最后一個的這個過程,是怎么輪流執(zhí)行的。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/31726.html
摘要:大家好,我是永強,就是老李之前經(jīng)常給你們說的區(qū)塊鏈大神大學(xué)肄業(yè)卻依然大公司主程一波兒流只生活在老李口中尚未真實露面的騙錢高手老王的左膀右臂趙永強。 大家好,我是永強,就是老李之前經(jīng)常給你們說的區(qū)塊鏈大神、大學(xué)肄業(yè)卻依然大公司iOS主程一波兒流、只生活在老李口中尚未真實露面的騙錢高手、老王的左膀右臂 ——— 趙永強。我和尼古拉斯趙四之間并沒有什么強關(guān)聯(lián),我只是單方面認(rèn)識他而已。 之前老李...
摘要:實際上這一篇和上一篇均可以看作是關(guān)于加解密的懶漢入門篇安全加強篇一的后續(xù),只不過側(cè)重點在于安全上。回到上篇結(jié)果提到的問題,就是對稱加密的安全性要人命,非對稱加密的性能非常要人命。元首作為高智商罪犯,這種低級錯誤是不可能犯的。 為什么標(biāo)題總是要帶上API安全關(guān)鍵字呢?因為我想我樂意。 實際上這一篇和上一篇均可以看作是《關(guān)于PHP加解密的懶漢入門篇(API安全加強篇一)》》)的后續(xù),只不過...
摘要:實際上這一篇和上一篇均可以看作是關(guān)于加解密的懶漢入門篇安全加強篇一的后續(xù),只不過側(cè)重點在于安全上。回到上篇結(jié)果提到的問題,就是對稱加密的安全性要人命,非對稱加密的性能非常要人命。元首作為高智商罪犯,這種低級錯誤是不可能犯的。 為什么標(biāo)題總是要帶上API安全關(guān)鍵字呢?因為我想我樂意。 實際上這一篇和上一篇均可以看作是《關(guān)于PHP加解密的懶漢入門篇(API安全加強篇一)》》)的后續(xù),只不過...
摘要:添加應(yīng)用啟動類配置客戶端鏈接經(jīng)過對稱加解密的配置微服務(wù)專門為測試經(jīng)過對稱加解密的配置微服務(wù)微服務(wù)模塊。 SpringCloud(第 031 篇)配置客戶端ConfigClient鏈接經(jīng)過對稱加解密的配置微服務(wù) - 一、大致介紹 1、Git服務(wù)端的文件內(nèi)容進(jìn)行了加密處理,那么是不是配置客戶端拿到內(nèi)容之后需要解密呢? 2、答案顯然不是的,因為這樣解密的話,先不說實現(xiàn)起來的難易程度,單從表面...
摘要:由于密鑰被暴露了,所以必須換新的密鑰,元首這會兒只能走途徑告訴古德里安新的密鑰,這會兒逗逼的事情來了,如何對密鑰進(jìn)行加密。但是,有一點是值得說明,那就是無論是對稱加密還是非對稱加密,都頂不住用機器是強行暴力猜解私鑰。 懶漢 入門 這兩點就足以說明這篇文章不想要著有什么高端大氣的技術(shù)內(nèi)容,我跟你講,全是水。不可能有什么質(zhì)數(shù)素數(shù)、橢圓曲線加密、迪菲-赫爾曼什么的,不可能有的。 首先我不...
閱讀 2637·2023-04-26 02:17
閱讀 1610·2021-11-24 09:39
閱讀 1070·2021-11-18 13:13
閱讀 2598·2021-09-02 15:11
閱讀 2770·2019-08-30 15:48
閱讀 3406·2019-08-30 14:00
閱讀 2431·2019-08-29 13:43
閱讀 658·2019-08-29 13:07