當前位置:首頁 » 密碼管理 » 文件des加密

文件des加密

發布時間: 2024-04-24 19:24:20

① des加密演算法

des加密演算法如下:

一、DES加密演算法簡介

DES(Data Encryption Standard)是目前最為流行的加密演算法之一。DES是對稱的,也就是說它使用同一個密鑰來加密和解密數據。

DES還是一種分組加密演算法,該演算法每次處理固定長度的數據段,稱之為分組。DES分組的大小是64位,如果加密的數據長度不是64位的倍數,可以按照某種具體的規則來填充位。

從本質上來說,DES的安全性依賴於虛假表象,從密碼學的術語來講就是依賴於「混亂和擴散」的原則。混亂的目的是為隱藏任何明文同密文、或者密鑰之間的關系,而擴散的目的是使明文中的有效位和密鑰一起組成盡可能多的密文。兩者結合到一起就使得安全性變得相對較高。

DES演算法具體通過對明文進行一系列的排列和替換操作來將其加密。過程的關鍵就是從給定的初始密鑰中得到16個子密鑰的函數。要加密一組明文,每個子密鑰按照順序(1-16)以一系列的位操作施加於數據上,每個子密鑰一次,一共重復16次。每一次迭代稱之為一輪。要對密文進行解密可以採用同樣的步驟,只是子密鑰是按照逆向的順序(16-1)對密文進行處理。

② des鏄瀵圭О鍔犲瘑榪樻槸闈炲圭О鍔犲瘑

瀵圭О鍔犲瘑銆

DES鏄涓縐嶅圭О鍔犲瘑綆楁硶錛屾槸涓縐嶉潪甯哥畝渚跨殑鍔犲瘑綆楁硶錛屼絾鏄瀵嗛掗闀垮害姣旇緝鐭銆侱ES鍏ㄧО涓篋ata Encryption Standard錛屽嵆鏁版嵁鍔犲瘑鏍囧噯錛屾槸涓縐嶄嬌鐢ㄥ瘑閽ュ姞瀵嗙殑鍧楃畻娉曪紝1977騫磋緹庡浗鑱旈偊鏀垮簻鐨勫浗瀹舵爣鍑嗗矓紜瀹氫負鑱旈偊璧勬枡澶勭悊鏍囧噯錛團IPS錛夛紝騫舵巿鏉冨湪闈炲瘑綰ф斂搴滈氫俊涓浣跨敤錛岄殢鍚庤ョ畻娉曞湪鍥介檯涓婂箍娉涙祦浼犲紑鏉ャ

闇瑕佹敞鎰忕殑鏄錛屽湪鏌愪簺鏂囩尞涓錛屼綔涓虹畻娉曠殑DES縐頒負鏁版嵁鍔犲瘑綆楁硶錛圖ata Encryption Algorithm,DEA錛夛紝宸蹭笌浣滀負鏍囧噯鐨凞ES鍖哄垎寮鏉ャ

DES鍩烘湰鍘熷垯

DES璁捐′腑浣跨敤浜嗗垎緇勫瘑鐮佽捐$殑涓や釜鍘熷垯錛氭販娣嗭紙confusion錛夊拰鎵╂暎錛坉iffusion錛夛紝鍏剁洰鐨勬槸鎶楀嚮鏁屾墜瀵瑰瘑鐮佺郴緇熺殑緇熻″垎鏋愩傛販娣嗘槸浣垮瘑鏂囩殑緇熻$壒鎬т笌瀵嗛掗鐨勫彇鍊間箣闂寸殑鍏崇郴灝藉彲鑳藉嶆潅鍖栵紝浠ヤ嬌瀵嗛掗鍜屾槑鏂囦互鍙婂瘑鏂囦箣闂寸殑渚濊禆鎬у瑰瘑鐮佸垎鏋愯呮潵璇存槸鏃犳硶鍒╃敤鐨勩

鎵╂暎鐨勪綔鐢ㄥ氨鏄灝嗘瘡涓浣嶆槑鏂囩殑褰卞搷灝藉彲鑳借繀閫熷湴浣滅敤鍒拌緝澶氱殑杈撳嚭瀵嗘枃浣嶄腑錛屼互渚垮湪澶ч噺鐨勫瘑鏂囦腑娑堥櫎鏄庢枃鐨勭粺璁$粨鏋勶紝騫朵笖浣挎瘡涓浣嶅瘑閽ョ殑褰卞搷灝藉彲鑳借繀閫熷湴鎵╁睍鍒拌緝澶氱殑瀵嗘枃浣嶄腑錛屼互闃插瑰瘑閽ヨ繘琛岄愭電牬璇戙

浠ヤ笂鍐呭瑰弬鑰鐧懼害鐧劇-DES

③ des加密演算法原理

DES加密演算法原理:

DES演算法使用一個56位的密鑰以及附加的8位奇偶校驗位,產生最大64位的分組大小。是一個迭代的分組密碼,其中將加密的文本亮散悔塊分成兩半。使用子密鑰對其中一半應用循環功能,然後將輸出與另一半進行「異或」運算;接著交換這兩半,這一過程會繼續下去,掘裂但最後一個循環不交換。DES使用16輪循環,使用異或,置換,代換,移位敬正操作四種基本運算。

④ 加密技術06-加密總結

對稱密碼是一種用相同的密鑰進行加密和解密的技術,用於確保消息的機密性。在對稱密碼的演算法方面,目前主要使用的是 AES。盡管對稱密碼能夠確保消息的機密性,但需要解決將解密密鑰配送給接受者的密鑰配送問題。

主要演算法

DES

數據加密標准(英語:Data Encryption Standard,縮寫為 DES)是一種對稱密鑰加密塊密碼演算法,1976年被美國聯邦政府的國家標准局確定為聯邦資料處理標准(FIPS),隨後在國際上廣泛流傳開來。它基於使用56位密鑰的對稱演算法。

DES現在已經不是一種安全的加密方法,主要因為它使用的56位密鑰過短。

原理請參考: 加密技術01-對稱加密-DES原理

3DES

三重數據加密演算法(英語:Triple Data Encryption Algorithm,縮寫為TDEA,Triple DEA),或稱3DES(Triple DES),是一種對稱密鑰加密塊密碼,相當於是對每個數據塊應用三次DES演算法。由於計算機運算能力的增強,原版DES由於密鑰長度過低容易被暴力破解;3DES即是設計用來提供一種相對簡單的方法,即通過增加DES的密鑰長度來避免類似的攻擊,而不是設計一種全新的塊密碼演算法。

注意:有3個獨立密鑰的3DES的密鑰安全性為168位,但由於中途相遇攻擊(知道明文和密文),它的有效安全性僅為112位。

3DES使用「密鑰包」,其包含3個DES密鑰,K1,K2和K3,均為56位(除去奇偶校驗位)。

密文 = E k3 (D k2 (E k1 (明文)))

而解密則為其反過程:

明文 = D k3 (E k2 (D k1 (密文)))

AES

AES 全稱 Advanced Encryption Standard(高級加密標准)。它的出現主要是為了取代 DES 加密演算法的,因為 DES 演算法的密鑰長度是 56 位,因此演算法的理論安全強度是 56 位。於是 1997 年 1 月 2 號,美國國家標准技術研究所宣布希望徵集高級加密標准,用以取代 DES。AES 也得到了全世界很多密碼工作者的響應,先後有很多人提交了自己設計的演算法。最終有5個候選演算法進入最後一輪:Rijndael,Serpent,Twofish,RC6 和 MARS。最終經過安全性分析、軟硬體性能評估等嚴格的步驟,Rijndael 演算法獲勝。

AES 密碼與分組密碼 Rijndael 基本上完全一致,Rijndael 分組大小和密鑰大小都可以為 128 位、192 位和 256 位。然而 AES 只要求分組大小為 128 位,因此只有分組長度為 128 位的 Rijndael 才稱為 AES 演算法。

本文 AES 默認是分組長度為 128 位的 Rijndael 演算法

原理請參考: 加密技術02-對稱加密-AES原理

演算法對比

公鑰密碼是一種用不同的密鑰進行加密和解密的技術,和對稱密碼一樣用於確保消息的機密性。使用最廣泛的一種公鑰密碼演算法是 RAS。和對稱密碼相比,公鑰密碼的速度非常慢,因此一般都會和對稱密碼一起組成混合密碼系統來使用。公鑰密碼能夠解決對稱密碼中的密鑰交換問題,但存在通過中間人攻擊被偽裝的風險,因此需要對帶有數字簽名的公鑰進行認證。

公鑰密碼學的概念是為了解決對稱密碼學中最困難的兩個問題而提出

應用場景

幾個誤解

主要演算法

Diffie–Hellman 密鑰交換

迪菲-赫爾曼密鑰交換(英語:Diffie–Hellman key exchange,縮寫為D-H) 是一種安全協議。它可以讓雙方在完全沒有對方任何預先信息的條件下通過不安全信道創建起一個密鑰。這個密鑰可以在後續的通訊中作為對稱密鑰來加密通訊內容。公鑰交換的概念最早由瑞夫·墨克(Ralph C. Merkle)提出,而這個密鑰交換方法,由惠特菲爾德·迪菲(Bailey Whitfield Diffie)和馬丁·赫爾曼(Martin Edward Hellman)在1976年發表,也是在公開文獻中發布的第一個非對稱方案。

Diffie–Hellman 演算法的有效性是建立在計算離散對數很困難的基礎上。簡單地說,我們可如下定義離散對數。首先定義素數 p 的本原跟。素數 p 的本原根是一個整數,且其冪可以產生 1 到 p-1 之間所有整數,也就是說若 a 是素數 p 的本原根,則

a mod p, a 2 mod p,..., a p-1 mod p 各不相同,它是整數 1 到 p-1 的一個置換。

對任意整數 b 和素數 p 的本原跟 a,我們可以找到唯一的指數 i 使得

b ≡ a i (mod p) 其中 0 <= i <= p-1

其中 a, b, p 這些是公開的,i 是私有的,破解難度就是計算 i 的難度。

Elgamal

1985年,T.Elgamal 提出了一種基於離散對數的公開密鑰體制,一種與 Diffie-Hellman 密鑰分配體制密切相關。Elgamal 密碼體系應用於一些技術標准中,如數字簽名標准(DSS) 和 S/MIME 電子郵件標准。

基本原理就是利用 Diffie–Hellman 進行密鑰交換,假設交換的密鑰為 K,然後用 K 對要發送的消息 M,進行加密處理。

所以 Elgamal 的安全系數取決於 Diffie–Hellman 密鑰交換。

另外 Elgamal 加密後消息發送的長度會增加一倍。

RSA

MIT 的羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)在 1977 年提出並於 1978 年首次發表的演算法。RSA 是最早滿足要求的公鑰演算法之一,自誕生日起就成為被廣泛接受且被實現的通用的公鑰加密方法。

RSA 演算法的有效性主要依據是大數因式分解是很困難的。

原理請參考: 加密技術03-非對稱加密-RSA原理

ECC

大多數使用公鑰密碼學進行加密和數字簽名的產品和標准都使用 RSA 演算法。我們知道,為了保證 RSA 使用的安全性,最近這些年來密鑰的位數一直在增加,這對使用 RSA 的應用是很重的負擔,對進行大量安全交易的電子商務更是如此。近來,出現的一種具有強大競爭力的橢圓曲線密碼學(ECC)對 RSA 提出了挑戰。在標准化過程中,如關於公鑰密碼學的 IEEE P1363 標准中,人們也已考慮了 ECC。

與 RSA 相比,ECC 的主要誘人之處在於,它可以使用比 RSA 短得多的密鑰得到相同安全性,因此可以減少處理負荷。

ECC 比 RSA 或 Diffie-Hellman 原理復雜很多,本文就不多闡述了。

演算法對比

公鑰密碼體制的應用

密碼分析所需計算量( NIST SP-800-57 )

註:L=公鑰的大小,N=私鑰的大小

散列函數是一種將長消息轉換為短散列值的技術,用於確保消息的完整性。在散列演算法方面,SHA-1 曾被廣泛使用,但由於人們已經發現了一些針對該演算法理論上可行的攻擊方式,因此該演算法不應再被用於新的用途。今後我們應該主要使用的演算法包括目前已經在廣泛使用的 SHA-2,以及具有全新結構的 SHA-3 演算法。散列函數可以單獨使用,也可以作為消息認證、數字簽名以及偽隨機數生成器等技術的組成元素來使用。

主要應用

主要演算法

MD5

MD5消息摘要演算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數,可以產生出一個 128 位( 16 位元組,被表示為 32 位十六進制數字)的散列值(hash value),用於確保信息傳輸完整一致。MD5 由美國密碼學家羅納德·李維斯特(Ronald Linn Rivest)設計,於 1992 年公開,用以取代 MD4 演算法。這套演算法的程序在 RFC 1321 中被加以規范。

2009年,中國科學院的謝濤和馮登國僅用了 2 20.96 的碰撞演算法復雜度,破解了MD5的碰撞抵抗,該攻擊在普通計算機上運行只需要數秒鍾。2011年,RFC 6151 禁止MD5用作密鑰散列消息認證碼。

原理請參考: 加密技術04-哈希演算法-MD5原理

SHA-1

SHA-1(英語:Secure Hash Algorithm 1,中文名:安全散列演算法1)是一種密碼散列函數,美國國家安全局設計,並由美國國家標准技術研究所(NIST)發布為聯邦資料處理標准(FIPS)。SHA-1可以生成一個被稱為消息摘要的160位(20位元組)散列值,散列值通常的呈現形式為40個十六進制數。

2005年,密碼分析人員發現了對SHA-1的有效攻擊方法,這表明該演算法可能不夠安全,不能繼續使用,自2010年以來,許多組織建議用SHA-2或SHA-3來替換SHA-1。Microsoft、Google以及Mozilla都宣布,它們旗下的瀏覽器將在2017年停止接受使用SHA-1演算法簽名的SSL證書。

2017年2月23日,CWI Amsterdam與Google宣布了一個成功的SHA-1碰撞攻擊,發布了兩份內容不同但SHA-1散列值相同的PDF文件作為概念證明。

2020年,針對SHA-1的選擇前綴沖突攻擊已經實際可行。建議盡可能用SHA-2或SHA-3取代SHA-1。

原理請參考: 加密技術05-哈希演算法-SHA系列原理

SHA-2

SHA-2,名稱來自於安全散列演算法2(英語:Secure Hash Algorithm 2)的縮寫,一種密碼散列函數演算法標准,由美國國家安全局研發,由美國國家標准與技術研究院(NIST)在2001年發布。屬於SHA演算法之一,是SHA-1的後繼者。其下又可再分為六個不同的演算法標准,包括了:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。

SHA-2 系列的演算法主要思路和 SHA-1 基本一致

原理請參考: 加密技術05-哈希演算法-SHA系列原理

SHA-3

SHA-3 第三代安全散列演算法(Secure Hash Algorithm 3),之前名為 Keccak 演算法。

Keccak 是一個加密散列演算法,由 Guido Bertoni,Joan Daemen,Michaël Peeters,以及 Gilles Van Assche 在 RadioGatún 上設計。

2012年10月2日,Keccak 被選為 NIST 散列函數競賽的勝利者。SHA-2 目前沒有出現明顯的弱點。由於對 MD5、SHA-0 和 SHA-1 出現成功的破解,NIST 感覺需要一個與之前演算法不同的,可替換的加密散列演算法,也就是現在的 SHA-3。

SHA-3 在2015年8月5日由 NIST 通過 FIPS 202 正式發表。

原理請參考: 加密技術05-哈希演算法-SHA系列原理

演算法對比

⑤ 當待加密明文長度為任意長時,如何使用DES演算法來進行加密呢

不知道你用什麼語言,下面是C#的寫法。在C#里使用對稱加密不考慮明文大小,因為明文被處理成流.

public class TestClass
{
static void Main(string[] args)
{
byte[] key = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 };
byte[] iv = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 };
byte[] bytes = Encoding.UTF8.GetBytes("任意長度字元串");
byte[] enBytes = Encrypt(bytes, key, iv);
}

static byte[] Encrypt(byte[] bytes, byte[] key, byte[] iv)
{
MemoryStream ms = new MemoryStream();
DESCryptoServiceProvider desCsp = new DESCryptoServiceProvider();
desCsp.BlockSize = iv.Length * 8;
CryptoStream cs = new CryptoStream(ms, desCsp.CreateEncryptor(key, iv), CryptoStreamMode.Write);
cs.Write(bytes, 0, bytes.Length);
cs.FlushFinalBlock();
cs.Close();
desCsp.Clear();
return ms.ToArray();
}
}

熱點內容
數字密碼人格是什麼原理 發布:2024-11-27 03:46:34 瀏覽:426
華為怎麼看手機的配置 發布:2024-11-27 03:27:42 瀏覽:381
php函數作用域 發布:2024-11-27 03:26:11 瀏覽:176
pythonasteval 發布:2024-11-27 03:21:14 瀏覽:563
電腦伺服器機什麼意思 發布:2024-11-27 03:18:59 瀏覽:837
本地存儲是否允許 發布:2024-11-27 03:08:02 瀏覽:411
adc的電腦密碼是多少 發布:2024-11-27 03:01:54 瀏覽:965
會員管理系統php 發布:2024-11-27 02:15:41 瀏覽:235
企業php網站系統 發布:2024-11-27 02:14:14 瀏覽:254
佛滔算命源碼 發布:2024-11-27 02:11:01 瀏覽:765