C 使用Des加密

2021-08-26 22:02:59 字數 2739 閱讀 8021

des(data encryption standard)演算法為密碼體制中的對稱密碼體制,又被成為美國資料加密標準,是2023年美國ibm公司研製的對稱密碼體制加密演算法.

哎理論的東西就不多說了,很容易讓人頭痛,我們只要有個概念:有對稱加密和非對稱加密這兩種型別.

對稱加密:

只有乙個金鑰,加密資料和解密資料時都用它.打個比方,跟我們平時開門的門鎖一樣,關門開門都用的乙個鎖匙.金鑰就相當於是鑰匙.在**中其實就相當於是傳給函式的乙個引數.

非對稱加密:

有兩個金鑰,乙個公鑰,乙個私鑰.相當於我們鎖門用乙個鑰匙,開門的時候要用另外乙個鑰匙.

對於對稱加密我們可能較容易理解,反正只要乙個金鑰,寫**時就是弄乙個變數,然後加密的函式用這個變數做引數,解密函式也用它做引數.

非對稱加密就稍微難理解點,它不一般不是用在同乙個程式中.而用於不同的程式間傳資料.假如有這樣乙個場景,你在某**上輸入乙個密碼,然後要傳到伺服器去驗證.那密碼在傳輸過程中不安全,假如被人擷取了可咋整啊,這時你就會想到把密碼加密.這樣人家擷取到了也看不懂.這時不能用對稱加密,因為就乙個金鑰,只你客戶端程式知道它並用它加密,但伺服器那邊不知道,你想到傳送密碼過去時把金鑰也傳過去,這樣就同樣不安全,也怕被擷取.於是非對稱加密閃亮登場了.

首先伺服器那端通過某個演算法生成一對密鑰匙,乙個公鑰a,乙個私鑰b.這樣a加密後的東西用b可以解密,b加密的東西用a可以解密.所謂公鑰自然是公開的,大家都知道.這樣所有人都可以用公鑰去加密,而私鑰只要伺服器知道,別人不會知道,所以你就安全了.那有人會問能不能通過公鑰a算出b,理論上自然是能的,不然也不存在破解密碼那一說了.只是難度可能比較大.這主要是一些數學演算法不太容易逆推,這就涉及些數學的理論了啊.

演算法的具體實現我們不管了,.net的一些系統函式給我們完成了那些工作,我們只要去呼叫就行.

using system.text;

using system.io;

using system.security.cryptography; //呼叫那些函式需要先引用這兩個命名空間

string mykey = "weiwenhp"; //這就是傳說中的金鑰了,你可以隨便取乙個.des的金鑰是64位的二進位制,那換成字串的話只能是8個字元.

//加密的函式

string jiami(string sourcestring,string key)

byte keybytes = encoding.utf8.getbytes(key);

byte keyiv = keybytes;

byte inputbytearray = encoding.utf8.getbytes(sourcestring);

descryptoserviceprovider desprovider = new descryptoserviceprovider();

memorystream memstream = new memorystream();

cryptostream crypstream = new cryptostream(memstream, desprovider.createencryptor(keybytes,keyiv), cryptostreammode.write);

crypstream.write(inputbytearray,0, inputbytearray.length);

crypstream.flushfinalblock();

returnconvert.tobase64string(memstream.toarray());

//解密的函式

string jiemi(string encryptstring,string key)

byte keybytes = encoding.utf8.getbytes(key);

byte keyiv = keybytes;

byte inputbytearray = convert.frombase64string(encryptstring);

descryptoserviceprovider desprovider = new descryptoserviceprovider();

memorystream memstream = new memorystream();

cryptostream crypstream = new cryptostream(memstream, desprovider.createdecryptor(keybytes,keyiv), cryptostreammode.write);

crypstream.write(inputbytearray,0, inputbytearray.length);

crypstream.flushfinalblock();

returnencoding.utf8.getstring(memstream.toarray());

string password = "pwd"; //假如這是你的密碼

string miwen = jiami(password,mykey); //加密後的密文,這裡的值是 9tesi4kkhxw=

string mingwen = jiemi(miwen,mykey); //把密文解密,這裡的值是pwd

C 中使用DES加密解密

des演算法為 密碼體制 中的對稱密碼體制,又被稱為美國 資料加密標準 是1972年美國ibm公司研製的對稱密碼體制 加密演算法 明文按64位進行分組,金鑰長64位,金鑰事實上是56位參與des運算 第8 16 24 32 40 48 56 64位是校驗位,使得每個金鑰都有奇數個1 分組後的明文組和...

C 實現DES加密

1.定義金鑰變數key 2.定義子金鑰儲存變數subkey 3.將pc 1,pc 2,ip,ip 1,e盒和s盒,p,加密輪資料新建陣列變數儲存 4.定義chartobitset方法進行字串到二進位制數的轉換 5.定義exec函式對資料進行進行擴充套件置換,異或,查s盒置換,p置換的初始操作 6.定...

C 中使用DES和AES加密解密

c 中使用des和aes加密解密 using system using system.text using system.security.cryptography using system.io namespace mycryptography 獲取向量 private static string...