在C#中使用RSA進行加密和解密


這篇文章向您展示了如何在c#.net Windows窗體應用程序中使用RSA算法對字符串進行加密和解密。
RSA是由Ron Rivest,Adi Shamir和Leonard Adleman開發的非對稱編碼系統(其名稱也是這三位作者的縮寫)。它被廣泛用於加密和電子簽名技術。它通過使用公共密鑰與所有人共享來工作。

RSA操作基於四個主要步驟:密鑰生成,密鑰共享,加密和解密。

本文將介紹有關c#rsa生成公共和私有密鑰的算法,密鑰如何在c#中進行加密和解密。

拖動 文本框,標簽和按鈕從Visual Studio工具箱到您的WinForm設計,那么你可以設計一個簡單的用戶界面,使您可以加密和使用C#代碼RSA算法解密字符串,如下圖所示。

 

在C#中使用RSA算法進行加密和解密
通過本c#密碼學教程,我將創建一個Encrypt方法來使用RSA算法加密您的數據。

byte[] Encrypt(byte[] data, RSAParameters RSAKey, bool fOAEP)
{
    byte[] encryptedData;
    using (RSACryptoServiceProvider rSACryptoServiceProvider = new RSACryptoServiceProvider())
    {
        rSACryptoServiceProvider.ImportParameters(RSAKey);
        encryptedData = rSACryptoServiceProvider.Encrypt(data, fOAEP);
    }
    return encryptedData;
}

同樣,創建  Decrypt方法以使用RSA算法解密數據。

byte[] Decrypt(byte[] data, RSAParameters RSAKey, bool fOAEP)
{
    byte[] decryptedData;
    using (RSACryptoServiceProvider rSACryptoServiceProvider = new RSACryptoServiceProvider())
    {
        rSACryptoServiceProvider.ImportParameters(RSAKey);
        decryptedData = rSACryptoServiceProvider.Decrypt(data, fOAEP);
    }
    return decryptedData;
}

C#RSA用公鑰加密
接下來,聲明 unicodeEncoding, rSACryptoServiceProvider, data 和 cryptoData變量,如下所示。

UnicodeEncoding unicodeEncoding = new UnicodeEncoding();
RSACryptoServiceProvider rSACryptoServiceProvider = new RSACryptoServiceProvider();
byte[] data;
byte[] encryptData;

最后,使用RSA通過調用ExportParameters方法來生成公鑰和私鑰  

rSACryptoServiceProvider.ExportParameters(false)

RSA算法使用密鑰在c#中執行加密和解密。

將單擊事件處理程序添加到“  加密”按鈕后,即可使用RSA算法對數據進行加密

private void btnEncrypt_Click(object sender, EventArgs e)
{
    data = unicodeEncoding.GetBytes(txtInput.Text);
    encryptData = Encrypt(data, rSACryptoServiceProvider.ExportParameters(false), false);
    txtEncrypt.Text = unicodeEncoding.GetString(encryptData);
}

將單擊事件處理程序添加到“ 解密” 按鈕,使您可以解密數據。

private void btnDecrypt_Click(object sender, EventArgs e)
{
    byte[] data = Decrypt(encryptData, rSACryptoServiceProvider.ExportParameters(true), false);
    txtDecrypt.Text = unicodeEncoding.GetString(data);
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM