CryptoSharp: Step 3

C#入門實踐:Windows桌面加密器 CryptoSharp

Step 3 分組加密/數(shù)據(jù)分割

by Pixel Frame

GitHub: CryptoSharp
本篇中的圖片來自維基共享資源

分組加密

上一篇中我們完成了DES加密算法的基本加解密功能辕翰,對于DES而言數(shù)據(jù)和密鑰都是64bit(8 bytes),顯然我們需要對數(shù)據(jù)進行分組以進行加密尝江。數(shù)據(jù)分組有4中操作模式,即電碼本(ECB)段只、密文分組鏈接(CBC)咬崔、密文反饋(CFB)、輸出反饋(OFB)以及計數(shù)器(CTR)胆胰,這在之后的AES自然也是相同的狞贱。四天王有五個是常識()
無論是字符串輸入還是二進制文件輸入,都會轉(zhuǎn)換為byte數(shù)組進行加密蜀涨,對于CFB外的操作模式瞎嬉,都以8 bytes作為分組長度。CFB模式加密的明文是初始化向量IV勉盅,密文拋棄一定bit后與數(shù)據(jù)異或產(chǎn)生加密結(jié)果佑颇,因此一般直接以1 byte為分組,大大簡化了分組過程草娜。但實際上OFB模式也是對初始時變值進行加密,可以指定1-64bit的分組長度痒筒,但本程序?qū)崿F(xiàn)時依然使用了64bit的分組長度宰闰。
分組數(shù)量通過Math.Ceiling取上邊值,最后一個分組需要補足到8 bytes簿透。這里使用到了之前構(gòu)建的ByteString類移袍。

int part = (int)Math.Ceiling(bsPlain.GetLength() / 8.0);
int rem = 8 - (bsPlain.GetLength() % 8);
bsPlain += new byte[rem];

電碼本

ECB Encryption

ECB Decryption

對于每個分組采用相同的密鑰進行獨立加密,實現(xiàn)非常簡單老充。使用List<QWORD>保存加密結(jié)果葡盗,明文分組通過BitConverter.ToUInt64()轉(zhuǎn)換為QWORD輸入上一篇實現(xiàn)的加密方法。

while(count > 0)
{
    QWORD token = BitConverter.ToUInt64(bsPlain.GetBytes(), (part - count) * 8);
    qwlCipher.Add(Encrypt(token, qwKey));
    --count;
}

密文分組鏈接

CBC Encryption

CBC Decryption

將明文與初始化向量異或后輸入加密方法啡浊,加密結(jié)果作為密文和下一組的向量觅够。

while (count > 0)
{
    QWORD token = BitConverter.ToUInt64(bsPlain.GetBytes(), (part - count) * 8) ^ qwIV;
    qwIV = Encrypt(token, qwKey);
    qwlCipher.Add(qwIV);
    --count;
}

另外還有將密文和明文進行異或后作為下一組向量的CBC,即擴散密文分組鏈接PCBC巷嚣。

while (count > 0)
{
    QWORD qwPlain = BitConverter.ToUInt64(bsPlain.GetBytes(), (part - count) * 8);
    qwIV = Encrypt(qwPlain ^ qwIV, qwKey);
    qwlCipher.Add(qwIV);
    qwIV ^= qwPlain;
    --count;
}

密文反饋

CFB Encryption

CFB Decryption

將初始化向量和密鑰進行加密喘先,然后與明文分組異或產(chǎn)生密文。由于明文不是輸入加密算法的量廷粒,所以可以取加密結(jié)果的8位與明文異或窘拯,同時解密時也只需要加密算法。這里的實現(xiàn)是取加密結(jié)果的高8位與明文分組異或坝茎。下一組的向量將本組向量左移8位再由密文填充空位涤姊。

foreach(byte token in baPlain)
{
    QWORD qwEnc = Encrypt(qwIV, qwKey);
    QWORD bEnc = (qwEnc >> 56) ^ token;
    qwIV = (qwIV << 8) ^ bEnc;
    qwlCipher.Add(bEnc);
}

輸出反饋

OFB Encryption

OFB Decryption

與CFB相比將加密結(jié)果作為下一組的向量。這里的實現(xiàn)中分組依然為64bit而不是CFB的8bit嗤放。

while (count > 0)
{
    qwIV = Encrypt(qwIV, qwKey);
    QWORD token = BitConverter.ToUInt64(bsPlain.GetBytes(), (part - count) * 8) ^ qwIV;
    qwlCipher.Add(token);
    --count;
}

計數(shù)器

和ECB相比將明文變?yōu)橛嫈?shù)器思喊,加解密雙方通過相同的隨機序列發(fā)生器發(fā)生Nonce來輸入加密算法,加密結(jié)果與明文異或產(chǎn)生密文斤吐。由于本程序只有并不是通訊雙方進行加密搔涝,所以未作實現(xiàn)厨喂。
CTR和ECB一樣實現(xiàn)了加密的并行,但安全性要顯然高于ECB庄呈,攻擊者必須要知道隨機序列發(fā)生器的產(chǎn)生序列和密鑰蜕煌。

至此,DES的基本功能就完成了诬留,相對而言還是很簡單的斜纪。下一篇中我們將開始RSA算法的實現(xiàn)。


次回予告:RSA#1 - BigInteger/Prime/PowMod/SteinGCD/ExEuclid


END_OF_PART_3Cry

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末文兑,一起剝皮案震驚了整個濱河市盒刚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绿贞,老刑警劉巖因块,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異籍铁,居然都是意外死亡涡上,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門拒名,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吩愧,“玉大人,你說我怎么就攤上這事增显⊙慵眩” “怎么了?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵同云,是天一觀的道長糖权。 經(jīng)常有香客問我,道長梢杭,這世上最難降的妖魔是什么温兼? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮武契,結(jié)果婚禮上募判,老公的妹妹穿的比我還像新娘。我一直安慰自己咒唆,他們只是感情好届垫,可當我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著全释,像睡著了一般装处。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天妄迁,我揣著相機與錄音寝蹈,去河邊找鬼。 笑死登淘,一個胖子當著我的面吹牛箫老,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播黔州,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼耍鬓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了流妻?” 一聲冷哼從身側(cè)響起牲蜀,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绅这,沒想到半個月后涣达,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡君躺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年峭判,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棕叫。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖奕删,靈堂內(nèi)的尸體忽然破棺而出俺泣,到底是詐尸還是另有隱情,我是刑警寧澤完残,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布伏钠,位于F島的核電站,受9級特大地震影響谨设,放射性物質(zhì)發(fā)生泄漏熟掂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一扎拣、第九天 我趴在偏房一處隱蔽的房頂上張望赴肚。 院中可真熱鬧,春花似錦二蓝、人聲如沸誉券。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽踊跟。三九已至,卻和暖如春鸥诽,著一層夾襖步出監(jiān)牢的瞬間商玫,已是汗流浹背箕憾。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拳昌,地道東北人袭异。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像地回,于是被迫代替她去往敵國和親扁远。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 概述 什么是模式 第三章介紹的對稱密碼算法DES刻像、AES都屬于分組密碼畅买,分組密碼的特點是分組的長度是固定的。但是由...
    JMasche閱讀 3,093評論 0 4
  • 目錄一湃缎、對稱加密?1、對稱加密是什么?2蠢壹、對稱加密的優(yōu)點?3嗓违、對稱加密的問題?4、對稱加密的應(yīng)用場景?5图贸、對稱加密...
    意一ineyee閱讀 61,949評論 8 110
  • 重點:分組密碼的設(shè)計思想分組密碼的基本特點AES蹂季、DES密碼算法AES和DES各自組成、每部分的實現(xiàn)過程以及特點A...
    七八音閱讀 2,767評論 1 2
  • 本文主要介紹移動端的加解密算法的分類疏日、其優(yōu)缺點特性及應(yīng)用偿洁,幫助讀者由淺入深地了解和選擇加解密算法。文中會包含算法的...
    蘋果粉閱讀 11,524評論 5 29
  • 在生活中沟优,處處都有涕滋,讓我們感動的事。例如見義勇為挠阁,救死扶傷宾肺。等…其中我也被感動過… 在去年的夏天,我和王天約好去學(xué)...
    李冠良初中閱讀 320評論 0 0