❶ 什麼是對稱加密
對稱加密顧名思義就是加密和解密的密鑰是相同的。
❷ 科普知識—對稱加密和非對稱加密
區塊鏈技術中廣泛應用到非對稱加密技術,非對稱加密技術保證了信息在傳輸過程中的安全性,非對稱加密技術是在對稱加密技術上發展來的。本文主要闡述對稱加密技術和非對稱加密技術的概念和特點,並舉例說明。
對稱加密就是用相同的密鑰對原文進行加密和解密,通信雙方共用一個密鑰。
基於對稱加密演算法傳輸信息「ABC」的步驟。
(1)發送方通過密鑰對原文"ABC"進行加密,得到密文"abc",並發送給接收方。密鑰為將字母轉換為對應的小寫字母,大寫A轉換為小寫a,「BC」同理轉換為「bc」。
(2)發送方將密鑰發送給接收方。
(3)接收方通過密鑰對密文進行解密,反推出原文「ABC」。
對稱加密演算法的缺點:無法確保密鑰被安全傳遞。
密鑰就是傳說中的「密碼本」。密文在傳輸過程中是可能被第三方截獲的,關鍵就落在「密碼本」上,如果密碼本也被第三方截獲,則傳輸的密碼信息將被第三方破獲,所以經常看到電影、電視劇的情節中通過各種手段保護密碼本的安全送達。
非對稱加密技術很好的解決了對稱加密技術密鑰無法安全傳遞的問題。
非對稱加密有兩個密鑰,即公鑰(Public Key)和私鑰(Private Key),對數據進行加密和解密使用不同的密鑰。使用公鑰進行加密,使用私鑰進行解密。
非對稱加密演算法中私鑰就是一個隨機數,基於不同的演算法生成不同的隨機數,如:SHA256演算法生成的是256位的隨機數,通常是調用操作系統的隨機數生成器來生成私鑰,私鑰通過一定的加密演算法推導出公鑰,私鑰到公鑰的推導過程是單向的,也就是說公鑰無法反推導出私鑰。
基於非對稱加密演算法傳輸信息「hello world」的步驟。
(1)發送方使用接收方的公鑰對待發送信息「hello world」加密,此處需注意:信息發送給誰,使用誰的公鑰進行加密,公鑰是可以公開的,類似於銀行卡賬戶。
(2)發送方將加密後的密文通過網路發送給接收方。
(3)接收方接收到密文後,使用自己的私鑰對密文進行解密,從而獲得傳輸信息「hello world」。
採用非對稱加密演算法即使第三方在網路上截獲到密文,但其無法獲得接收方的私鑰,也就無法對密文進行解密,作為接收方務必保證自己私鑰的安全,所以非對稱加密技術解決了密鑰傳輸過程的安全性問題。
本文主要闡述對稱加密技術和非對稱加密技術的概念和特點,並舉例說明。對稱加密是通信雙方共用密鑰,無法保證密鑰的安全傳遞;非對稱加密使用接收方的公鑰對數據加密,接收方使用自己的私鑰解密,即使信息被第三方截獲,由於沒有接收方的私鑰,也無法破解密文。
❸ 什麼是對稱加密演算法請舉例
對稱加密演算法簡介:
對稱加密演算法 對稱加密演算法是應用較早的加密演算法,技術成熟。在對稱加密演算法中,數據發信方將明文(原始數據)和加密密鑰一起經過特殊加密演算法處理後,使其變成復雜的加密密文發送出去。收信方收到密文後,若想解讀原文,則需要使用加密用過的密鑰及相同演算法的逆演算法對密文進行解密,才能使其恢復成可讀明文。在對稱加密演算法中,使用的密鑰只有一個,發收信雙方都使用這個密鑰對數據進行加密和解密,這就要求解密方事先必須知道加密密鑰。
特點:
對稱加密演算法的特點是演算法公開、計算量小、加密速度快、加密效率高。
不足之處是,交易雙方都使用同樣鑰匙,安全性得不到保證。此外,每對用戶每次使用對稱加密演算法時,都需要使用其他人不知道的惟一鑰匙,這會使得發收信雙方所擁有的鑰匙數量成幾何級數增長,密鑰管理成為用戶的負擔。對稱加密演算法在分布式網路系統上使用較為困難,主要是因為密鑰管理困難,使用成本較高。而與公開密鑰加密演算法比起來,對稱加密演算法能夠提供加密和認證卻缺乏了簽名功能,使得使用范圍有所縮小。在計算機專網系統中廣泛使用的對稱加密演算法有DES和IDEA等。美國國家標准局倡導的AES即將作為新標准取代DES。
具體演算法:
3DES演算法,Blowfish演算法,RC5演算法。 對稱加密演算法-原理及應用對稱加密演算法的優點在於加解密的高速度和使用長密鑰時的難破解性。假設兩個用戶需要使用對稱加密方法加密然後交換數據,則用戶最少需要2個密鑰並交換使用,如果企業內用戶有n個,則整個企業共需要n×(n-1) 個密鑰,密鑰的生成和分發將成為企業信息部門的惡夢。對稱加密演算法的安全性取決於加密密鑰的保存情況,但要求企業中每一個持有密鑰的人都保守秘密是不可能的,他們通常會有意無意的把密鑰泄漏出去——如果一個用戶使用的密鑰被入侵者所獲得,入侵者便可以讀取該用戶密鑰加密的所有文檔,如果整個企業共用一個加密密鑰,那整個企業文檔的保密性便無從談起。DESCryptoServiceProvider
RC2CryptoServiceProvider
RijndaelManaged
//例加密文本文件(RijndaelManaged )
byte[] key = { 24, 55, 102,24, 98, 26, 67, 29, 84, 19, 37, 118, 104, 85, 121, 27, 93, 86, 24, 55, 102, 24,98, 26, 67, 29, 9, 2, 49, 69, 73, 92 };
byte[] IV ={ 22, 56, 82, 77, 84, 31, 74, 24,55, 102, 24, 98, 26, 67, 29, 99 };
RijndaelManaged myRijndael = new RijndaelManaged();
FileStream fsOut = File.Open(strOutName, FileMode.Create,FileAccess.Write);//strOutName文件名及路徑 FileStream fsIn = File.Open(strPath, FileMode.Open,FileAccess.Read);
CryptoStream csDecrypt=new CryptoStream(fsOut,myRijndael.CreateEncryptor(key, IV),CryptoStreamMode.Write);//讀加密文本
BinaryReader br = new BinaryReader(fsIn);
csDecrypt.Write(br.ReadBytes((int)fsIn.Length),0, (int)fsIn.Length);
csDecrypt.FlushFinalBlock();
csDecrypt.Close();
fsIn.Close();
fsOut.Close();
//解密文件
byte[] key = { 24, 55, 102, 24, 98, 26, 67, 29, 84, 19, 37, 118,104, 85, 121, 27, 93, 86, 24, 55, 102, 24, 98, 26, 67, 29, 9, 2, 49, 69, 73, 92};
byte[] IV ={ 22, 56, 82, 77, 84, 31, 74, 24, 55, 102, 24, 98, 26,67, 29, 99 };
RijndaelManaged myRijndael = new RijndaelManaged();
FileStream fsOut = File.Open(strPath, FileMode.Open, FileAccess.Read);
CryptoStream csDecrypt = new CryptoStream(fsOut, myRijndael.CreateDecryptor(key,IV), CryptoStreamMode.Read);
StreamReader sr = new StreamReader(csDecrypt);//把文件讀出來
StreamWriter sw = new StreamWriter(strInName);//解密後文件寫入一個新的文件
sw.Write(sr.ReadToEnd());
sw.Flush();
sw.Close();
sr.Close();f
sOut.Close();
用圖片加密(RC2CryptoServiceProvider )
FileStreamfsPic = new FileStream(pictureBox1.ImageLocation,FileMode.Open, FileAccess.Read);
//加密文件流(textBox1.Text是文件名及路徑)
FileStream fsText = new FileStream(textBox1.Text, FileMode.Open,FileAccess.Read);
byte[] bykey = new byte[16]; //初始化
Key IVbyte[] byIv = new byte[8];
fsPic.Read(bykey, 0, 16);
fsPic.Read(byIv, 0, 8);
RC2CryptoServiceProvider desc = newRC2CryptoServiceProvider();//desc進行加密
BinaryReader br = new BinaryReader(fsText);//從要加密的文件中讀出文件內容
FileStream fsOut = File.Open(strLinPath,FileMode.Create, FileAccess.Write); // strLinPath臨時加密文件路徑CryptoStream cs = new CryptoStream(fsOut, desc.CreateEncryptor(bykey,byIv), CryptoStreamMode.Write);//寫入臨時加密文件
cs.Write(br.ReadBytes((int)fsText.Length),0, (int)fsText.Length);//寫入加密流
cs.FlushFinalBlock();
cs.Flush();
cs.Close();
fsPic.Close();
fsText.Close();
fsOut.Close();
用圖片解密
FileStream fsPic = new FileStream(pictureBox1.ImageLocation, FileMode.Open, FileAccess.Read); //圖片流FileStream fsOut = File.Open(textBox1.Text,FileMode.Open, FileAccess.Read);//解密文件流
byte[] bykey = new byte[16]; //初始化
Key IVbyte[] byIv = new byte[8];
fsPic.Read(bykey, 0, 16);
fsPic.Read(byIv, 0, 8);
string strPath = textBox1.Text;//加密文件的路徑
int intLent = strPath.LastIndexOf("\\")+ 1;
int intLong = strPath.Length;
string strName = strPath.Substring(intLent, intLong - intLent);//要加密的文件名稱
string strLinPath = "C:\\"+ strName;//臨時解密文件路徑
FileStream fs = new FileStream(strLinPath, FileMode.Create,FileAccess.Write);
RC2CryptoServiceProvider desc = newRC2CryptoServiceProvider();//desc進行解密
CryptoStream csDecrypt = new CryptoStream(fsOut, desc.CreateDecryptor(bykey,byIv), CryptoStreamMode.Read);
//讀出加密文件
BinaryReader sr = new BinaryReader(csDecrypt);//從要加密流中讀出文件內容
BinaryWriter sw = new BinaryWriter(fs);//寫入解密流
sw.Write(sr.ReadBytes(Convert.ToInt32(fsOut.Length)));
//sw.Flush();
sw.Close();
sr.Close();
fs.Close();
fsOut.Close();
fsPic.Close();
csDecrypt.Flush();
File.Delete(textBox1.Text.TrimEnd());//刪除原文件
File.Copy(strLinPath, textBox1.Text);//復制加密文件
File.Delete(strLinPath);//刪除臨時文件
❹ 快速了解常用的對稱加密演算法,再也不用擔心面試官的刨根問底
加密演算法通常被分為兩種: 對稱加密 和 非對稱加密 。其中,對稱加密演算法在加密和解密時使用的密鑰相同;非對稱加密演算法在加密和解密時使用的密鑰不同,分為公鑰和私鑰。此外,還有一類叫做 消息摘要演算法 ,是對數據進行摘要並且不可逆的演算法。
這次我們了解一下對稱加密演算法。
對稱加密演算法在加密和解密時使用的密鑰相同,或是使用兩個可以簡單地相互推算的密鑰。在大多數的對稱加密演算法中,加密和解密的密鑰是相同的。
它要求雙方在安全通信之前,商定一個密鑰。對稱演算法的安全性依賴於密鑰,泄漏密鑰就意味著任何人都可以對他們發送的信息進行解密,這也是對稱加密演算法的主要缺點之一。
常見的對稱加密演算法有:DES演算法、3DES演算法、AES演算法。
DES演算法(Data Encryption Standard)是一種常見的分組加密演算法。
分組加密演算法是將明文分成固定長度的組,每一組都採用同一密鑰和演算法進行加密,輸出也是固定長度的密文。
由IBM公司在1972年研製,1976年被美國聯邦政府的國家標准局確定為聯邦資料處理標准(FIPS),隨後在國際上廣泛流傳開來。
在DES演算法中,密鑰固定長度為64位。明文按64位進行分組,分組後的明文組和密鑰按位置換或交換的方法形成密文組,然後再把密文組拼裝成密文。
密鑰的每個第八位設置為奇偶校驗位,也就是第8、16、24、32、40、48、56、64位,所以密鑰的實際參與加密的長度為56位。
我們用Java寫個例子:
運行結果如下:
DES現在已經不是一種安全的加密方法,主要因為它使用的密鑰過短,很容易被暴力破解。
3DES演算法(Triple Data Encryption Algorithm)是DES演算法的升級版本,相當於是對明文進行了三次DES加密。
由於計算機運算能力的增強,DES演算法由於密鑰長度過低容易被暴力破解;3DES演算法提供了一種相對簡單的方法,即通過增加DES的密鑰長度來避免類似的攻擊,而不是設計一種全新的塊密碼演算法。
在DES演算法中,密鑰固定長度為192位。在加密和解密時,密鑰會被分為3個64位的密鑰。
加密過程如下:
解密過程如下:
我們用Java寫個例子:
運行結果如下:
雖然3DES演算法在安全性上有所提升,但是因為使用了3次DES演算法,加密和解密速度比較慢。
AES(Advanced Encryption Standard,高級加密標准)主要是為了取代DES加密演算法的,雖然出現了3DES的加密方法,但由於它的加密時間是DES演算法的3倍多,密鑰位數還是不能滿足對安全性的要求。
1997年1月2號,美國國家標准與技術研究院(NIST)宣布希望徵集高級加密標准,用以取代DES。全世界很多密碼工作者都提交了自己設計的演算法。經過甄選流程,高級加密標准由美國國家標准與技術研究院於2001年11月26日發布於FIPS PUB 197,並在2002年5月26日成為有效的標准。
該演算法為比利時密碼學家Joan Daemen和Vincent Rijmen所設計,結合兩位作者的名字,以 Rijndael 為名投稿高級加密標準的甄選流程。
AES演算法的密鑰長度是固定,密鑰的長度可以使用128位、192位或256位。
AES演算法也是一種分組加密演算法,其分組長度只能是128位。分組後的明文組和密鑰使用幾種不同的方法來執行排列和置換運算形成密文組,然後再把密文組拼裝成密文。
我們用Java寫個例子:
運行結果如下:
AES演算法是目前應用最廣泛的對稱加密演算法。
對稱加密演算法在加密和解密時使用的密鑰相同,常見的對稱加密演算法有:DES演算法、3DES演算法、AES演算法。
由於安全性低、加密解密效率低,DES演算法和3DES演算法是不推薦使用的,AES演算法是目前應用最廣泛的對稱加密演算法。
❺ 什麼是對稱密碼和非對密碼,分析這兩種密碼體系的特點和應用領域
一、對稱密碼
1、定義:採用單鑰密碼系統的加密方法,同一個密鑰可以同時用作信息的加密和解密,這種加密方法稱為對稱加密,也稱為單密鑰加密。
2、特點:演算法公開、計算量小、加密速度快、加密效率高。
3、應用領域:由於其速度快,對稱性加密通常在消息發送方需要加密大量數據時使用。
二、非對密碼
1、定義:非對稱密碼指的是非對稱密碼體制中使用的密碼。
2、特點:
(1)是加密密鑰和解密密鑰不同 ,並且難以互推 。
(2)是有一個密鑰是公開的 ,即公鑰 ,而另一個密鑰是保密的 ,即私鑰。
3、應用領域:很好的解決了密鑰的分發和管理的問題 ,並且它還能夠實現數字簽名。
(5)簡述對稱加密演算法的概念擴展閱讀
對稱加密演算法特徵
1、加密方和解密方使用同一個密鑰;
2、加密解密的速度比較快,適合數據比較長時的使用;
3、密鑰傳輸的過程不安全,且容易被破解,密鑰管理也比較麻煩