《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 高級(jí)加密標(biāo)準(zhǔn)算法Rijndael的分析與應(yīng)用
高級(jí)加密標(biāo)準(zhǔn)算法Rijndael的分析與應(yīng)用
來(lái)源:微型機(jī)與應(yīng)用2012年第7期
張青鳳1,張鳳琴2,王 蓉2
(1.運(yùn)城學(xué)院,公共計(jì)算機(jī)教學(xué)部,山西 運(yùn)城 044000; 2.空軍工程大學(xué),計(jì)算機(jī)系,陜西 西安
摘要: 介紹了高級(jí)加密標(biāo)準(zhǔn)Rijndael算法的背景和特點(diǎn),深入研究和分析了該算法的實(shí)現(xiàn)原理和過(guò)程,并給出了該算法在文件加解密過(guò)程實(shí)現(xiàn)的關(guān)鍵代碼。
Abstract:
Key words :

摘  要: 介紹了高級(jí)加密標(biāo)準(zhǔn)Rijndael算法的背景和特點(diǎn),深入研究和分析了該算法的實(shí)現(xiàn)原理和過(guò)程,并給出了該算法在文件加解密過(guò)程實(shí)現(xiàn)的關(guān)鍵代碼。
關(guān)鍵詞: Rijndael算法;狀態(tài);密鑰

1 Rijndael算法的背景
 AES(Advanced Encryption Standard)是美國(guó)聯(lián)邦標(biāo)準(zhǔn)局于1997年開(kāi)始向全世界征集的加密標(biāo)準(zhǔn)[1],屬于對(duì)稱(chēng)加密算法,代表了當(dāng)今最先進(jìn)的編碼技術(shù),最終獲勝的是RijnDael算法。統(tǒng)計(jì)顯示,即使使用目前世界上運(yùn)算速度最快的計(jì)算機(jī),窮盡128 bit密鑰也需要幾十億年的時(shí)間,更不用說(shuō)去破解采用256 bit密鑰長(zhǎng)度的AES算法了。
 Rijndael算法由比利時(shí)計(jì)算機(jī)科學(xué)家Vincent Rijmen和Joan Daemen開(kāi)發(fā),它使用128 bit、192 bit、256 bit的密鑰長(zhǎng)度,比56 bit的DES更健壯可靠[3]。美國(guó)國(guó)家標(biāo)準(zhǔn)技術(shù)研究所選擇Rijndael作為美國(guó)政府加密標(biāo)準(zhǔn)AES的加密算法,取代早期的數(shù)據(jù)加密標(biāo)準(zhǔn)DES[1]。Rijndael作為一種迭代分組加密算法,其數(shù)據(jù)塊長(zhǎng)度和密鑰長(zhǎng)度均是可變的,因此它匯聚了強(qiáng)安全性、高性能、高效率、易用、靈活等優(yōu)點(diǎn)被廣泛應(yīng)用在各個(gè)領(lǐng)域中。
2 Rijndael算法的設(shè)計(jì)原理
 Rijndael作為加密標(biāo)準(zhǔn)AES算法,其128 bit輸入分組用以字節(jié)為單位的矩陣方陣描述[4]。該數(shù)組被復(fù)制到State數(shù)組。數(shù)據(jù)塊長(zhǎng)度、密鑰長(zhǎng)度可以被設(shè)定為128 bit、192 bit、256 bit三個(gè)可選長(zhǎng)度,相應(yīng)的加密輪數(shù)分別為10、12、14,每一輪循環(huán)都有一個(gè)循環(huán)密鑰,它來(lái)自于初始密鑰。
2.1 Rijndael算法的加密流程
 加密過(guò)程分為四個(gè)階段:密鑰擴(kuò)展、輪密鑰加、Nr-1(128 bit、192 bit、256 bit密鑰長(zhǎng)度,Nr分別為10、12、14)輪變換及最后一輪變換。輪變換包括字節(jié)代換、行移位、列混淆和輪密鑰加四個(gè)過(guò)程,最后一輪變換包括字節(jié)代換、行移位和輪密鑰加三個(gè)過(guò)程。其流程圖如圖1所示。
 (1)狀態(tài):指明文分組及每次變換的中間結(jié)果[4],是一個(gè)4×Nb的矩陣,Nb為數(shù)據(jù)塊長(zhǎng)度除以32。
 (2)字符代換:用一個(gè)簡(jiǎn)單的查表操作代替了基于矩陣乘法的復(fù)雜仿射變換。S盒是一個(gè)16×16字節(jié)矩陣,包含8 bit值所能表達(dá)的256種可能的變換。把Statc中每個(gè)字節(jié)的高4位作為行值,低4位作為列值,取出S盒中對(duì)應(yīng)行列的元素作為新的字節(jié)輸出。

2.2 解密過(guò)程
 Rijndael解密過(guò)程是加密的逆過(guò)程,每輪循環(huán)中的步驟都被它們的逆所替換,值得注意的是:循環(huán)密鑰使用起來(lái)應(yīng)該顛倒次序。
3  Rijndael算法的應(yīng)用
 Rijindael算法常被用于文件的加解密過(guò)程,加密時(shí)先將讀入的明文依次分組,用加密密鑰將明文加密后寫(xiě)入文件中;解密時(shí)用解密密鑰將文件中的密文解密后將明文寫(xiě)入結(jié)果文件中。
3.1 Rijindael算法在文件加解密應(yīng)用的實(shí)現(xiàn)

 


 try
{// 創(chuàng)建新的Rijndael 對(duì)象以產(chǎn)生Key和IV
Rijndael RijndaelAlg= Rijndael.Create();
 //需要加密的字符串及保存的文件名
string sData = "Here is some data to encrypt.";
string FileName = "CText.txt";
            //利用Key和IV加密字符串到文件中
EncryptTextToFile(sData,F(xiàn)ileName,RijndaelAlg.Key, RijndaelAlg.IV);      //利用Key和IV從文件中解密
string Final=DecryptTextFromFile(FileName, RijndaelAlg.Key, RijndaelAlg.IV);
     Console.WriteLine(Final);  //顯示密碼
}
catch (Exception e)
 {
 Console.WriteLine(e.Message);
 }
3.2加密模塊實(shí)現(xiàn)
 public static void EncryptTextToFile(String Data, String FileName, byte[] Key, byte[] IV)
{
 try
{//創(chuàng)建文件
FileStream fStream=File.Open(FileName, FileMode.OpenOrCreate);
//創(chuàng)建新的Rijndael對(duì)象
 Rijndael RijndaelAlg=Rijndael.Create();
//創(chuàng)建加密流,以passed key 和initialization vector (IV)填充
 CryptoStream cStream = new CryptoStream(fStream,
RijndaelAlg.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
 {
 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);
 }
 }
3.3 解密模塊的實(shí)現(xiàn)
public static string DecryptTextFromFile(String FileName, byte[] Key, byte[] IV)
  {
 try
 { //創(chuàng)建文件流
 FileStream fStream = File.Open(FileName, FileMode.OpenOrCreate);
 //創(chuàng)建新的Rijndael對(duì)象
 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
 {  
 sReader.Close();
 cStream.Close();
 fStream.Close();
 }
return val; //返回密碼結(jié)果
}
 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;
   }
    }
 Rijndael算法一直經(jīng)受著世界各國(guó)密碼機(jī)構(gòu)和專(zhuān)家的攻擊,最有名的當(dāng)屬Squre攻擊[4]。目前Rijndael算法已被廣泛應(yīng)用于身份認(rèn)證、數(shù)字簽名、數(shù)據(jù)加密等方面,由于硬件的加解密速度要比軟件快,且可在物理上保證系統(tǒng)安全,國(guó)內(nèi)很多單位用硬件的方法來(lái)實(shí)現(xiàn)該算法。
參考文獻(xiàn)
[1] 段鋼.加密與解密(第3版)[M].北京:電子工業(yè)出版社,2008.
[2] 馮登國(guó).信息安全中的數(shù)學(xué)方法與技術(shù)[M].北京:清華大學(xué)出版社,2009.
[3] Http://zhidao.baidu.com.
[4] DAEMEN J, RIJMAN V.高級(jí)加密標(biāo)準(zhǔn)算法(AES)—Rijndael的設(shè)計(jì)[M].谷大武,徐勝波譯.北京:清華大學(xué)出版社,2003.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
主站蜘蛛池模板: 激情网婷婷 | 亚洲精品高清国产一线久久97 | 澳门毛片免费播放 | 欧美一a一片一级一片 | 午夜网页| 欧美一级黄色片视频 | 高清在线亚洲精品国产二区 | 欧美成人aⅴ | 337p色噜噜人体大胆欧美 | 99ri视频 | 国产精品免费看久久久香蕉 | 欧美日韩大片在线观看 | 天天骑天天干 | 亚洲国产福利精品一区二区 | 国产精品免费入口视频 | 1204国产成人精品视频 | 日本黄色小说网站 | 亚洲欧美日韩精品永久在线 | 国产精品页 | 日本三级日本三级人妇三级四 | 成人国产精品免费视频不卡 | 日韩在线网址 | 亚洲欧洲在线观看 | 一级做a爰片久久毛片武则天 | 波多野结衣在线免费观看视频 | 中国一级特黄高清免费的大片 | 在线播放精品视频 | 中文字幕视频 | 欧美大黄视频 | 新一级毛片国语版 | 18成人网| 日韩欧美一二三区 | 欧美在线播放成人a | 91精品国产免费久久国语蜜臀 | 青草青草视频2免费观看 | 日韩免费在线观看 | 在线视频 亚洲 | 操比片| 欧美综合网欧美色妞网 | 人人澡澡 | 欧美激情视频一区二区三区 |