C 中RSA加密解密和簽名與驗證的實現

2021-04-25 20:15:05 字數 3309 閱讀 6432

rsa加密演算法是一種非對稱加密演算法。在公鑰加密標準和電子商業中rsa被廣泛使用。rsa是2023年由羅納德•李維斯特(ron rivest)、阿迪•薩莫爾(adi shamir)和倫納德•阿德曼(leonard adleman)一起提出的。當時他們三人都在麻省理工學院工作。rsa就是他們三人姓氏開頭字母拼在一起組成的。.net的推出,我們能夠利用.net framework中的類提供的加密服務來保證資料安全。目前應用較為廣泛的加密方法是使用rsa演算法進行加密。在.net framework中與rsa加密演算法相關的類主要有兩個:rsa 類和rsacryptoserviceprovider 類。按照msdn的說法rsa 類是「表示 rsa 演算法的所有實現均從中繼承的基類」,而rsacryptoserviceprovider 類是「使用加密服務提供程式 (csp) 提供的 rsa 演算法的實現執行不對稱加密和解密」。另外,「表示 rsa 演算法的標準引數」的rsaparameters 結構也是很重要的,它儲存了rsa演算法的引數。

這裡具體講述一下在

c#中如何使用框架提供的rsa演算法來對我們的資訊加密、簽名、驗證簽名、解密的這個幾個步驟的實現

using

system.security.cryptography;

using

system.management;

using

microsoft.win32;

//////

生成公私鑰

///

///

///

public

void rsakey(string privatekeypath, string publickeypath)

catch (exception exception)

} //////

對原始資料進行md5加密

//////

待加密資料

///返回機密後的資料

public

string gethash(string m_strsource)

//////

rsa加密

//////

公鑰///

md5加密後的資料

///rsa

公鑰加密後的資料

public

string rsaencrypt(string xmlpublickey, string m_strencryptstring)

catch (exception exception)

return str2; }

//////rsa解密

///

///私鑰

///待解密的資料

///解密後的結果

public

string rsadecrypt(string xmlprivatekey, string m_strdecryptstring)

catch (exception exception)

return str2; }

//////對md5加密後的密文進行簽名

//////

私鑰///

md5加密後的密文

///

public

string signatureformatter(string p_strkeyprivate, string m_strhashbytesignature)

//////

簽名驗證

//////

公鑰///

待驗證的使用者名稱

///註冊碼

///

public

bool signaturedeformatter(string p_strkeypublic, string p_strhashbytedeformatter, string p_strdeformatterdata)

return

false; }

catch }

//////獲取硬碟id

///

///硬碟id

public

string gethardid()

return hdinfo; }

//////讀登錄檔中指定鍵的值

//////

鍵名///

返回鍵值

private

string

readreg(

string

key)

catch

(exception)}

//////建立登錄檔中指定的鍵和值

//////

鍵名///

鍵值private

void

writereg(

string

key,

string

value)

catch

(exception)}

//////

建立公鑰檔案

//////

///public

void

createpublickeyxml(

string

path,

string

publickey)

catch

}///

///建立私鑰檔案

//////

///public

void

createprivatekeyxml(

string

path,

string

privatekey)

catch

}///

///讀取公鑰

//////

///public

string

readpublickey(

string

path)

//////

讀取私鑰

//////

///public

string

readprivatekey(

string

path)

//////

初始化登錄檔,程式執行時呼叫,在呼叫之前更新公鑰xml

///

///公鑰路徑

public

void

initialreg(

string

path)

else} 

如果是要對傳送的訊息進行加密和解密,加密時用公鑰,解密時用私鑰,即使密文被竊取也無法破解。

如果是要對軟體進行註冊,生成註冊碼,則服務端將使用者的硬碟號用私鑰加密,客戶端用公鑰解密,解密後將客戶端的硬碟號進行md5加密,將得到的結果和解密後的結果進行比較,如果相同,說明是註冊使用者,否則為非註冊使用者。

C 中RSA加密解密和簽名與驗證的實現

rsa加密演算法是一種非對稱加密演算法。在公鑰加密標準和電子商業中rsa被廣泛使用。rsa是1977年由羅納德 李維斯特 ron rivest 阿迪 薩莫爾 adi shamir 和倫納德 阿德曼 leonard adleman 一起提出的。當時他們三人都在麻省理工學院工作。rsa就是他們三人姓氏開...

C 中RSA加密解密和簽名與驗證的實現

rsa加密演算法是一種非對稱加密演算法。在公鑰加密標準和電子商業中rsa被廣泛使用。rsa是1977年由羅納德 李維斯特 ron rivest 阿迪 薩莫爾 adi shamir 和倫納德 阿德曼 leonard adleman 一起提出的。當時他們三人都在麻省理工學院工作。rsa就是他們三人姓氏開...

C 中RSA加密解密和簽名與驗證的實現

rsa加密演算法是一種非對稱加密演算法。在公鑰加密標準和電子商業中rsa被廣泛使用。rsa是1977年由羅納德 李維斯特 ron rivest 阿迪 薩莫爾 adi shamir 和倫納德 阿德曼 leonard adleman 一起提出的。當時他們三人都在麻省理工學院工作。rsa就是他們三人姓氏開...