轉(zhuǎn)帖|使用教程|編輯:楊鵬連|2021-06-01 17:32:48.993|閱讀 471 次
概述:說到軟件安全保護(hù),數(shù)據(jù)加密技術(shù)是網(wǎng)絡(luò)中最基本的安全技術(shù),小編為大家介紹了常用數(shù)據(jù)加密和解密方法匯總,以及給出相關(guān)實(shí)現(xiàn)代碼。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
上圖是整個DES和TripleDES算法的加密解密過程,下面以TripleDES為例,結(jié)合dotnet分析加密解密的各個步驟,并給出相關(guān)實(shí)現(xiàn)代碼。
1、 生成key和IV
System.Security.Cryptography. TripleDESCryptoServiceProvider類是dotnet中實(shí)現(xiàn)TripleDES算法的主要的類。
TripleDESCryptoServiceProvider類只有一個構(gòu)造方法TripleDESCryptoServiceProvider(),這個方法把一些屬性初始化:
KeySize(加密密鑰長度,以位為單位)= 192(24字節(jié))
BlockSize(加密處理的數(shù)據(jù)塊大小,以位為單位)= 64(8字節(jié))
FeedbackSize(加密數(shù)據(jù)塊后返回的數(shù)據(jù)大小,以位為單位)= 64(8字節(jié))
TripleDESCryptoServiceProvider構(gòu)造方法同時會初始化一組隨機(jī)的key和IV。
默認(rèn)的TripleDESCryptoServiceProvider的key為24字節(jié),IV為8字節(jié),加密數(shù)據(jù)塊為8字節(jié)。
生成key和IV的代碼很簡單:
TripleDESCryptoServiceProvider tDESalg = new TripleDESCryptoServiceProvider();
byte[] keyArray = tDESalg.Key;
byte[] IVArray = tDESalg.IV;
生成的key和IV在加密過程和解密過程都要使用。
2、 字符串明文轉(zhuǎn)成某一代碼頁對應(yīng)的編碼字節(jié)流
待加密的數(shù)據(jù)可能有兩種形式,一種是二進(jìn)制的數(shù)據(jù),本身就是一組字節(jié)流,這樣的數(shù)據(jù)可以跳過這一步,直接進(jìn)入加密步驟。還有一種情況是字符串?dāng)?shù)據(jù),字符串中同樣的字符使用不同的代碼頁會生成不同的字節(jié)碼,所以從字符串到字節(jié)流的轉(zhuǎn)換是需要指定使用何種編碼的。在解密之后,要從字節(jié)流轉(zhuǎn)換到字符串就要使用相同的代碼頁解碼,否則就會出現(xiàn)亂碼。
// 待加密的字符串
string plainTextString = "Here is some data to encrypt. 這里是一些要加密的數(shù)據(jù)。";
// 使用utf-8編碼(也可以使用其它的編碼)
Encoding sEncoding = Encoding.GetEncoding("utf-8");
// 把字符串明文轉(zhuǎn)換成utf-8編碼的字節(jié)流
byte[] plainTextArray = sEncoding.GetBytes(plainTextString);
3、 加密操作
加密的原料是明文字節(jié)流,TripleDES算法對字節(jié)流進(jìn)行加密,返回的是加密后的字節(jié)流。同時要給定加密使用的key和IV。
// 把字符串明文轉(zhuǎn)換成utf-8編碼的字節(jié)流
byte[] plainTextArray = sEncoding.GetBytes(plainTextString); public static byte[] EncryptString(byte[] plainTextArray, byte[] Key, byte[] IV) { // 建立一個MemoryStream,這里面存放加密后的數(shù)據(jù)流 MemoryStream mStream = new MemoryStream(); // 使用MemoryStream 和key、IV新建一個CryptoStream 對象 CryptoStream cStream = new CryptoStream(mStream, new TripleDESCryptoServiceProvider().CreateEncryptor(Key, IV), CryptoStreamMode.Write); // 將加密后的字節(jié)流寫入到MemoryStream cStream.Write(plainTextArray, 0, plainTextArray.Length); //把緩沖區(qū)中的最后狀態(tài)更新到MemoryStream,并清除cStream的緩存區(qū) cStream.FlushFinalBlock(); // 把解密后的數(shù)據(jù)流轉(zhuǎn)成字節(jié)流 byte[] ret = mStream.ToArray(); // 關(guān)閉兩個streams. cStream.Close(); mStream.Close(); return ret; }4、 解密操作
解密操作解密上面步驟生成的密文byte[],需要使用到加密步驟使用的同一組Key和IV。
// 調(diào)用解密方法,返回已解密數(shù)據(jù)的byte[]
byte[] finalPlainTextArray = DecryptTextFromMemory(Data, keyArray, IVArray); public static byte[] DecryptTextFromMemory(byte[] EncryptedDataArray, byte[] Key, byte[] IV) { // 建立一個MemoryStream,這里面存放加密后的數(shù)據(jù)流 MemoryStream msDecrypt = new MemoryStream(EncryptedDataArray); // 使用MemoryStream 和key、IV新建一個CryptoStream 對象 CryptoStream csDecrypt = new CryptoStream(msDecrypt, new TripleDESCryptoServiceProvider().CreateDecryptor(Key, IV), CryptoStreamMode.Read); // 根據(jù)密文byte[]的長度(可能比加密前的明文長),新建一個存放解密后明文的byte[] byte[] DecryptDataArray = new byte[EncryptedDataArray.Length]; // 把解密后的數(shù)據(jù)讀入到DecryptDataArray csDecrypt.Read(DecryptDataArray, 0, DecryptDataArray.Length); msDecrypt.Close(); csDecrypt.Close(); return DecryptDataArray; }有一點(diǎn)需要注意,DES加密是以數(shù)據(jù)塊為單位加密的,8個字節(jié)一個數(shù)據(jù)塊,如果待加密明byte[]的長度不是8字節(jié)的整數(shù)倍,算法先用值為“0”的byte補(bǔ)足8個字節(jié),然后進(jìn)行加密。所以加密后的密文長度一定是8的整數(shù)倍。這樣的密文解密后如果補(bǔ)了0值的byte,則解密后這些0值的byte依然存在。比如上例中要加密的明文是:
“Here is some data to encrypt. 這里是一些要加密的數(shù)據(jù)?!?/span>
轉(zhuǎn)成明文byte[]后是66個字節(jié),DES算法就會補(bǔ)上6個0值的byte,補(bǔ)到72個字節(jié)。這樣加密后再解密回來的密文byte[]解碼后的字符串就是這樣的:
"Here is some data to encrypt. 這里是一些要加密的數(shù)據(jù)。\0\0\0\0\0\0"
5、 從編碼字節(jié)流轉(zhuǎn)成字符串明文
// 使用前面定義的Encoding,utf-8的編碼把byte[]轉(zhuǎn)成字符串
plainTextString = sEncoding.GetString(finalPlainTextArray);
說到軟件安全保護(hù),小編為大家推薦幾款給力的加密解密軟件保護(hù)工具,希望對您有所幫助。
網(wǎng)絡(luò)評價:加密的安全級別非常高,破解難度很大,但是加密數(shù)據(jù)多,需要注意系統(tǒng)的性能。
網(wǎng)絡(luò)評價:用好其虛擬機(jī)保護(hù)功能,將關(guān)鍵敏感代碼用虛擬機(jī)保護(hù)起來,能很好提高強(qiáng)度。
網(wǎng)絡(luò)評價:WinLicense主要比Themida多了一個協(xié)議,可以設(shè)定使用時間,運(yùn)行次數(shù)等功能,兩者核心保護(hù)是一樣的。
慧都科技響應(yīng)“全面加強(qiáng)知識產(chǎn)權(quán)保護(hù),推動構(gòu)建新發(fā)展格局”號召,加密解密產(chǎn)品為您的應(yīng)用程序保駕護(hù)航!在線購買享受限時特惠,Go!>>
★VMProtect
【下載試用】
【在線購買】
★Themida
【下載試用】
【在線購買】
★WinLicense
【下載試用】
【在線購買】
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: