簡單網路傳遞加密資料

2022-09-03 23:24:20 字數 2525 閱讀 7806

網路傳遞加密資料

雖然不對稱加密解決了用對稱加密傳遞訊息必須傳遞金鑰的問題,但是由於不對稱加密無法使用流進行處理,因此與對稱加密相比效率較低,不適用於加密大量資料的場合。在實際應用中,一般將兩種加密方法配合使用。其基本思想是:用不對稱加密演算法加密對稱加密演算法的金鑰,用對稱加密演算法加密實際資料。   

具體設計思路可以簡單描述為:a和b相互傳遞加密的資料前,b首先生成乙個不對稱加密演算法使用的公鑰/私鑰對,假定公鑰為publickey,私鑰為privatekey,然後b將公鑰publickey通過網路傳遞給a;a接收到此公鑰後,根據此公鑰初始化不對稱加密物件,並用此物件加密使用對稱加密演算法的金鑰key,並將加密後的金鑰key通過網路傳遞給b;這樣,a和b都有了乙個共同使用的對稱加密的金鑰,然後雙方用此金鑰加密資料,並將加密後的資料傳遞給對方,對方收到加密後的資料後,再用金鑰key解密資料。

下面通過乙個例子說明具體的實現方法 

客戶端客戶端傳送

//使用預設金鑰建立對稱加密物件

tripledescryptoserviceprovider   tdes = new tripledescryptoserviceprovider();

//使用預設金鑰建立不對稱加密物件

rsacryptoserviceprovider  rsa = new rsacryptoserviceprovider();

//匯出不對稱加密金鑰的xml表示形式,false表示不包括私鑰

string rsapublickey = rsa.toxmlstring(false);

//將匯出的公鑰傳送到伺服器,公鑰可以對任何人公開

senddata("rsapublickey,true", encoding.default.getbytes(rsapublickey));

客戶端接收

case "tdeskey":

//解密

tdes.key = rsa.decrypt(receivebytes, false);//rsa解密key

break;

case "tdesiv":

//解密

tdes.iv = rsa.decrypt(receivebytes, false);//rsa解密iv

break;

case "talk":

//解密

string talkstring = decrypttext(receivebytes, tdes.key, tdes.iv);用對稱解密獲取解密後資料

服務端接收

case "rsapublickey":

//使用傳遞過來的公鑰重新初始化該客戶端對

//應的rsacryptoserviceprovider物件,

//然後就可以使用這個物件加密對稱加密的私鑰了

user.rsa.fromxmlstring(encoding.default.getstring(receivebytes));

//加密對稱加密的私鑰

trycatch (exception err)

break;

case "talk":

//解密

string talkstring = decrypttext(receivebytes, user.tdes.key, user.tdes.iv);//對稱加密資料

break;

hash演算法與數字簽名

用hash演算法加密的提供方法有md5,sha等,

hash演算法具有如下特點:

1) 雜湊效果好。即使原始資料只發生乙個小小的改動,資料的雜湊也會發生非常大的變化。假如兩個單詞非常相似,比如只有乙個字母不同,使用hash演算法得到的結果也相差甚遠。甚至根本看不出二者之間有什麼相似之處。

2) 雜湊函式不可逆。即不可能從雜湊結果推導出原始資料。(md5,sha等不可逆)

3) 對不同的資料進行hash運算不可能生成相同的hash值。

hash演算法的用途主要有兩大類:一類是將hash值作為訊息身份驗證**(mac,message authentication code),用於和數字簽名一起實現對訊息資料進行身份驗證;另一類是將hash值作為訊息檢測**(mdc,message detection code),用於檢測資料完整性。

在應用程式中,可以利用數字簽名實現資料身份驗證和資料完整性驗證。資料身份驗證是為了驗證資料是不是持有私鑰的人傳送的;資料完整性驗證則用於驗證資料在傳輸過程中是否被修改過。

驗證資料完整性的實現原理是:傳送方先使用hash演算法對資料進行hash運算得到資料的hash值,然後將資料和hash值一塊兒傳送給接收方;接收方接收到資料和hash值後,對接收的資料進行和傳送方相同的hash運算,然後將計算得到的hash值和接收的hash值進行比較,如果二者一致,說明收到的資料肯定與傳送方傳送的原始資料相同,從而說明資料是完整的。 

byte hashval = new md5cryptoserviceprovider().computehash(datatoencrypt);產生hash值,然後對比是否相等來判斷.

加密網路資料

網路資料加密需要解決三個問題 完整 資料不被篡改 安全 資料不被截獲,或者截獲也無法得到明文 可靠 資料從真正的傳送方而來,其他人無法偽造乙個資料來欺騙接受方 下面例子只解決了安全這個問題 非對稱演算法使用的兩個金鑰有如下關係 使用公共金鑰加密的資訊只能被相應的私有金鑰解密。因此,我首要求你給我傳送...

aes加密 js和php資料傳遞

必須先確定js與php兩邊的加密模式 秘鑰,否則不能相互解開。php加密 function encrypt data hello,axl php解密 function decrypt str js加密 需要的js檔案 加密function jsencrypt str return result 解密...

程式設計題 簡單的資料加密

某個公司採用公用 傳遞資料資訊,資料是小於8位的整數,為了確保安全,在傳遞過程中需要加密,加密規則如下 首先將資料倒序,然後將每位數字都加上5,再用和除以10的餘數代替該數字,最後將第一位和最後一位數字交換。請任意給定乙個小於8位的整數,然後,把加密後的結果在控制台列印出來。題目要求 a 資料是小於...