c# 字符串 加密解密
时间: 2023-07-27 12:26:59 浏览: 294
c#字符串加密解密
5星 · 资源好评率100%
在 C# 中,可以使用许多不同的加密算法来加密和解密字符串。这里介绍两种常用的加密算法:AES 和 RSA。
AES 加密和解密字符串的代码示例:
```csharp
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
class AesExample
{
static void Main()
{
string original = "Hello World!";
byte[] key = new byte[32];
byte[] iv = new byte[16];
using (Aes aes = Aes.Create())
{
aes.Key = key;
aes.IV = iv;
// Encrypt the string to an array of bytes.
byte[] encrypted = EncryptStringToBytes_Aes(original, aes.Key, aes.IV);
// Decrypt the bytes to a string.
string roundtrip = DecryptStringFromBytes_Aes(encrypted, aes.Key, aes.IV);
//Display the original data and the decrypted data.
Console.WriteLine("Original: {0}", original);
Console.WriteLine("Round Trip: {0}", roundtrip);
}
}
static byte[] EncryptStringToBytes_Aes(string plainText, byte[] Key, byte[] IV)
{
// Check arguments.
if (plainText == null || plainText.Length <= 0)
throw new ArgumentNullException("plainText");
if (Key == null || Key.Length <= 0)
throw new ArgumentNullException("Key");
if (IV == null || IV.Length <= 0)
throw new ArgumentNullException("IV");
byte[] encrypted;
// Create an Aes object
// with the specified key and IV.
using (Aes aes = Aes.Create())
{
aes.Key = Key;
aes.IV = IV;
// Create an encryptor to perform the stream transform.
ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);
// Create the streams used for encryption.
using (MemoryStream msEncrypt = new MemoryStream())
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
//Write all data to the stream.
swEncrypt.Write(plainText);
}
encrypted = msEncrypt.ToArray();
}
}
}
// Return the encrypted bytes from the memory stream.
return encrypted;
}
static string DecryptStringFromBytes_Aes(byte[] cipherText, byte[] Key, byte[] IV)
{
// Check arguments.
if (cipherText == null || cipherText.Length <= 0)
throw new ArgumentNullException("cipherText");
if (Key == null || Key.Length <= 0)
throw new ArgumentNullException("Key");
if (IV == null || IV.Length <= 0)
throw new ArgumentNullException("IV");
// Declare the string used to hold
// the decrypted text.
string plaintext = null;
// Create an Aes object
// with the specified key and IV.
using (Aes aes = Aes.Create())
{
aes.Key = Key;
aes.IV = IV;
// Create a decryptor to perform the stream transform.
ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);
// Create the streams used for decryption.
using (MemoryStream msDecrypt = new MemoryStream(cipherText))
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
// Read the decrypted bytes from the decrypting stream
// and place them in a string.
plaintext = srDecrypt.ReadToEnd();
}
}
}
}
return plaintext;
}
}
```
RSA 加密和解密字符串的代码示例:
```csharp
using System;
using System.Security.Cryptography;
using System.Text;
class RSACSPSample
{
static void Main()
{
// Create a new instance of RSACryptoServiceProvider
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
//Export the key information to an RSAParameters object.
//Pass false to export the public key information or pass
//true to export public and private key information.
RSAParameters RSAParams = rsa.ExportParameters(false);
//Create some data to sign and verify.
byte[] data = Encoding.UTF8.GetBytes("Data to Sign");
try
{
//Sign the data using the private key.
byte[] signature = SignData(data, RSAParams);
//Verify the data using the public key.
bool verified = VerifyData(data, signature, RSAParams);
Console.WriteLine("Data verified: {0}", verified);
}
catch (CryptographicException e)
{
Console.WriteLine(e.Message);
}
}
static byte[] SignData(byte[] data, RSAParameters RSAParams)
{
try
{
//Create a new instance of RSACryptoServiceProvider.
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
//Import the RSA key information.
rsa.ImportParameters(RSAParams);
//Sign the data.
return rsa.SignData(data, SHA256.Create());
}
}
catch (CryptographicException e)
{
Console.WriteLine(e.Message);
return null;
}
}
static bool VerifyData(byte[] data, byte[] signature, RSAParameters RSAParams)
{
try
{
//Create a new instance of RSACryptoServiceProvider.
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
//Import the RSA key information.
rsa.ImportParameters(RSAParams);
//Verify the data.
return rsa.VerifyData(data, SHA256.Create(), signature);
}
}
catch (CryptographicException e)
{
Console.WriteLine(e.Message);
return false;
}
}
}
```
请注意,这些示例代码只是演示如何使用 AES 和 RSA 加密和解密字符串,并不一定适用于所有情况。在实际应用中,需要根据具体需求选择适当的加密算法和实现方式,并且需要采取额外的安全措施来保护加密密钥等敏感信息。
阅读全文