国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Rijndael算法的研究和應(yīng)用

2012-04-11 02:10:22張青鳳張鳳琴
關(guān)鍵詞:輪數(shù)明文解密

張青鳳,張鳳琴

(1.運城學(xué)院公共計算機教學(xué)部,山西運城044000;2.空軍工程大學(xué)計算機系,陜西西安710071)

2001年美國國家標準技術(shù)協(xié)會已經(jīng)將Rijndael算法作為下一代對稱密碼算法的標準,該算法借鑒了很多Square算法的設(shè)計思想。它允許128,192,256位密鑰長度,不僅能夠在128位分組上工作,也能夠在不同的硬件上工作[1-3]。

1 Rijndael算法簡介

Rijndael屬對稱加密,是一種可變數(shù)據(jù)塊長和可變密鑰長的迭代分組加密算法,在安全、性能、效率、可實現(xiàn)、靈活等多方面有優(yōu)點,它被設(shè)計成數(shù)據(jù)塊長、密鑰長為128/192/256三個可選長度,來加密128bit分組,相應(yīng)的加密輪數(shù)分別為10/12/14,每一輪循環(huán)都有一個循環(huán)密鑰,它來自于初始密鑰[4-5]。

2 Rijndael基本術(shù)語

2.1 狀態(tài)

狀態(tài)由一個4行、Nb列的二維字節(jié)數(shù)組表示,Nb等于數(shù)據(jù)塊長度除以32,取Nb=4時的狀態(tài)為:

2.2 分組密鑰

Rijindael的消息組a00長度和密鑰長度可以是128/192/256比特。為了方便數(shù)據(jù)的計算和算法的描述,限制密鑰長度為128位,128位輸入分成16個字節(jié),每字節(jié)8位,密碼也類似由一個4階方陣組成,NK等于密碼的長度除以32:

2.3 有限域GF(28)

有限域中的元素是按字節(jié)計算的,GF(28)的元素代表8比特的字節(jié)。例如x7+x6+x3+x+1代表11001011,Rijindael算法選擇的多項式為x8+x4+x3+x+1。

2.4 加密輪數(shù)Nr

設(shè)Nb為一個消息組經(jīng)上述處理后得到的字的個數(shù),Nk為加密密鑰處理后的字的個數(shù)。那么Nb=4,6,8;Nk=4,6,8,加密的輪數(shù)Nr根據(jù)表1由Nb和Nk控制。

3 Rijndael算法的實現(xiàn)

Rijindael算法由10輪、12輪、14輪循環(huán)組成,加密過程的每輪循環(huán)都有一個循環(huán)密鑰,每輪循環(huán)有4個基本步驟組成:字節(jié)轉(zhuǎn)換、移動行變換、混合列變換、加循環(huán)密鑰。因?qū)賹ΨQ加密,在加密和解密時都使用相同的密鑰。

表1 密鑰長度Nb、加密分組長、加密輪數(shù)Nr之間的關(guān)系

3.1 加密過程

(1)取明文分組為128bit的數(shù)據(jù)X,

(2)與原始密鑰k1異或

(3)s盒變換

(4)行置換

(5)列置換

(6)與子密鑰Ki異或

(7)重復(fù)(3)~(6)

3.2 解密過程

(1)取加密分組數(shù)據(jù)S

(2)與子密鑰 Ki+1異或

(3)反行置換

(4)反盒置換

(5)與子密鑰Ki異或

(6)反列置換

(7)得解密分組數(shù)據(jù)

(8)恢復(fù)明文分組數(shù)據(jù)

4 Rijndael算法在文件加解密過程的應(yīng)用

Rijindael算法常被用于文件的加解密過程,加密時先將讀入的明文依次分組,用加密密鑰將明文加密后寫入文件中;解密時用解密密鑰將文件中的密文解密后將明文寫入結(jié)果文件中。

4.1 加密實現(xiàn)關(guān)鍵代碼

public static void EncryptTextToFile(String Data,String FileName,byte[]Key,byte[]IV)

{

try

{//創(chuàng)建文件

FileStream fStream = File.Open(FileName,File-Mode.OpenOrCreate);

//創(chuàng)建新的Rijndael對象

Rijndael RijndaelAlg = Rijndael.Create();

//創(chuàng)建加密流,以passed key和initialization vector(IV)填充

CryptoStream cStream=new CryptoStream(fStream,Ri

jndaelAlg.CreateEncryptor(Key,IV),

CryptoStreamMode.Write);

//用加密流創(chuàng)建StreamWriter StreamWriter sWriter=new StreamWriter(cStream);

try

{//加密

sWriter.WriteLine(Data);

}

catch(Exception e)

{

Console.WriteLine("An error occurred:{0}",e.Message);

}

finally

{//關(guān)閉文件

sWriter.Close();

cStream.Close();

fStream.Close();

}

}

catch(CryptographicException e)

{

Console.WriteLine("A Cryptographic error occurred:{0}",e.Message);

}

catch(UnauthorizedAccessException e)

{

Console.WriteLine("A file error occurred:{0}",e.Message);

}

}

4.2 解密

從文件中讀取密文實現(xiàn)關(guān)鍵代碼:

public static string DecryptTextFromFile(String File-

Name,byte[]Key,byte[]IV)

{

try

{//創(chuàng)建文件流

FileStream fStream = File.Open(FileName,File-Mode.OpenOrCreate);

//創(chuàng)建新的Rijndael對象

Rijndael RijndaelAlg = Rijndael.Create();

//創(chuàng)建加密流,以 passed key和 initialization vector(IV)填充

CryptoStream cStream=new CryptoStream(fStream,RijndaelAlg.CreateDecryptor(Key,IV),

CryptoStreamMode.Read);//用加密流創(chuàng)建StreamWriter

StreamReader sReader=new StreamReader(cStream);string val=null;

try

{//解密

val= sReader.ReadLine();

}

catch(Exception e)

{

Console.WriteLine("An error occurred:{0}",e.Message);

}

finally

{//關(guān)閉文件

sReader.Close();

cStream.Close();

fStream.Close();

}

//返回密碼結(jié)果

return val;

}

catch(CryptographicException e)

{

Console.WriteLine("A Cryptographic error occurred:{0}",e.Message);

return null;

}

catch(UnauthorizedAccessException e)

{

Console.WriteLine("A file error occurred:{0}",e.Message);return null;

}

}

4.3 實際實現(xiàn)過程

try

{//創(chuàng)建新的Rijndael對象以產(chǎn)生Key和IV(初始化向量)

Rijndael RijndaelAlg = Rijndael.Create ();//需要加密的字符串及保存的文件名

string sData="Here is some data to encrypt.";

string FileName="CText.txt";

//利用Key和IV加密字符串到文件中Encrypt-TextToFile(sData,FileName,RijndaelAlg.Key,RijndaelAlg.IV);

//利用Key和IV從文件中解密

string Final=DecryptTextFromFile(FileName,Rijn

daelAlg.Key,RijndaelAlg.IV);

//顯示密碼

Console.WriteLine(Final);

}

catch(Exception e)

{

Console.WriteLine(e.Message);

}

5 結(jié)語

Rijndael算法作為AES標準,其密鑰長度的安全性已經(jīng)足夠,分析結(jié)果表明,7輪以上的Rijndael對于square攻擊是安全的。Rijndael算法已被廣泛應(yīng)用于身份認證、數(shù)字簽名、結(jié)點加密機、網(wǎng)絡(luò)加密等方面。Rijndael也有一個非常小的版本(52位),適用在蜂窩電話、個人數(shù)字處理器(PDA)和其他的小設(shè)備上。

[1]段鋼.加密與解密[M].3版.北京:電子工業(yè)出版社,2008.

[2]馮登國.信息安全中的數(shù)學(xué)方法與技術(shù)[M].北京:清華大學(xué)出版社,2009.

[3]裴定一,徐祥.信息安全數(shù)學(xué)基礎(chǔ)[M].北京:人民郵電出版社,2007.

[4]高永強,郭世澤.網(wǎng)絡(luò)安全技術(shù)與應(yīng)用大典[M].北京:人民郵電出版社,2004.

[5]王衍波,薛通.應(yīng)用密碼學(xué)[M].北京:機械工業(yè)出版社,2003.

猜你喜歡
輪數(shù)明文解密
解密“熱脹冷縮”
多輪反應(yīng)溶液用量對微生物加固粉土的影響
LowMC實例的差分枚舉攻擊效果分析
解密“一包三改”
少先隊活動(2020年9期)2020-12-17 06:17:31
網(wǎng)絡(luò)安全平臺斗象科技 完成C輪數(shù)億元融資
炫詞解密
奇怪的處罰
奇怪的處罰
四部委明文反對垃圾焚燒低價競爭
江川县| 辽阳县| 新绛县| 界首市| 宣武区| 灌阳县| 沁水县| 茂名市| 房产| 阳谷县| 浑源县| 新津县| 柯坪县| 柳河县| 泰和县| 淮滨县| 什邡市| 左贡县| 类乌齐县| 喀喇| 刚察县| 大港区| 专栏| 沙湾县| 葵青区| 荥经县| 巴东县| 沛县| 米脂县| 安阳市| 大兴区| 石首市| 邯郸市| 余干县| 多伦县| 灵山县| 报价| 平顺县| 大同县| 九龙城区| 科技|