c# 字符串加密解密不出现特殊字符
时间: 2023-08-22 08:06:38 浏览: 41
您可以使用Base64编码来实现字符串的加密和解密,它不会产生特殊字符。
加密:
```csharp
string plainText = "Hello, world!";
byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText);
string encryptedText = Convert.ToBase64String(plainTextBytes);
Console.WriteLine(encryptedText);
```
解密:
```csharp
string encryptedText = "SGVsbG8sIHdvcmxkIQ==";
byte[] encryptedTextBytes = Convert.FromBase64String(encryptedText);
string plainText = Encoding.UTF8.GetString(encryptedTextBytes);
Console.WriteLine(plainText);
```
输出:
```
SGVsbG8sIHdvcmxkIQ==
Hello, world!
```
注意:这种加密方式并不安全,如果您需要更高级的加密方式,请使用专业的加密算法。
相关问题
c# 字符串 加密解密
在 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 加密和解密字符串,并不一定适用于所有情况。在实际应用中,需要根据具体需求选择适当的加密算法和实现方式,并且需要采取额外的安全措施来保护加密密钥等敏感信息。
C# 字符串加密 示例代码
在C#中,可以使用System.Security.Cryptography命名空间中的MD5类来进行字符串加密。下面是一个示例代码:
using System.Security.Cryptography;
using System.Text;
public string ToMD5(string strs)
{
MD5 md5 = new MD5CryptoServiceProvider();
byte[] bytes = Encoding.Default.GetBytes(strs);//将要加密的字符串转换为字节数组
byte[] encryptdata = md5.ComputeHash(bytes);//将字符串加密后也转换为字符数组
return Convert.ToBase64String(encryptdata);//将加密后的字节数组转换为加密字符串
}
这个方法接收一个字符串参数,返回一个经过MD5加密后的字符串。在方法中,首先创建了一个MD5CryptoServiceProvider对象,然后将要加密的字符串转换为字节数组,接着使用ComputeHash方法将字节数组加密,最后将加密后的字节数组转换为加密字符串并返回。
除了MD5加密,C#还支持其他加密算法,例如SHA1、SHA256、RSA等。其中RSA加密比较复杂,需要生成公钥和私钥,然后使用公钥加密、私钥解密。如果需要进行RSA加密,可以使用System.Security.Cryptography命名空间中的RSACryptoServiceProvider类。