Home >Backend Development >C++ >How Can I Securely Encrypt and Decrypt Strings in C#?

How Can I Securely Encrypt and Decrypt Strings in C#?

Patricia Arquette
Patricia ArquetteOriginal
2025-02-02 17:11:09908browse

How Can I Securely Encrypt and Decrypt Strings in C#?

Safety encryption and decomposition string in C#

Question:

How to securely encrypt and decompose string in C# to protect data?

Solution:

C# offers powerful encryption tools to securely encrypted and unlocked string. One method is to use advanced encryption standards (AES) and objects. The following is an example of code:

To encrypted the string, please use your plaintext and sharing key to call RijndaelManaged. During decryption, the shared key must match. To decrypt, please use encrypted ciphertexts and shared keys to call

.
<code class="language-csharp">public class Crypto
{
    // 用于密钥生成的盐
    private static byte[] _salt = { /* 在此处添加您的应用程序专用盐 */ };

    // 使用 AES 加密字符串
    public static string EncryptStringAES(string plainText, string sharedSecret)
    {
        // 密钥生成
        Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(sharedSecret, _salt);

        // 初始化 RijndaelManaged 对象
        RijndaelManaged aesAlg = new RijndaelManaged();
        aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8);

        // 创建加密器和流
        ICryptoTransform encryptor = aesAlg.CreateEncryptor();
        using (MemoryStream msEncrypt = new MemoryStream())
        using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
        using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
        {
            // 加密并写入流
            swEncrypt.Write(plainText);
        }

        // 转换为 Base64 字符串
        return Convert.ToBase64String(msEncrypt.ToArray());
    }

    // 使用 AES 解密加密的字符串
    public static string DecryptStringAES(string cipherText, string sharedSecret)
    {
        // 密钥生成
        Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(sharedSecret, _salt);

        // 从 Base64 字符串转换
        byte[] bytes = Convert.FromBase64String(cipherText);
        using (MemoryStream msDecrypt = new MemoryStream(bytes))
        {
            // 初始化 RijndaelManaged 对象
            RijndaelManaged aesAlg = new RijndaelManaged();
            aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8);
            //aesAlg.IV = ReadByteArray(msDecrypt);  //移除IV读取,因为示例代码中IV处理有误

            // 创建解密器和流
            ICryptoTransform decryptor = aesAlg.CreateDecryptor();
            using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
            using (StreamReader srDecrypt = new StreamReader(csDecrypt))
            {
                // 解密并从流中读取
                return srDecrypt.ReadToEnd();
            }
        }
    }

    // 从流中读取字节数组的辅助方法 (此方法在示例中未被使用,且有潜在错误,故移除)
    //private static byte[] ReadByteArray(Stream s) { ... }
}</code>

Additional description: EncryptStringAES(plainText, sharedSecret) DecryptStringAES(cipherText, sharedSecret)

Use a powerful shared key to encrypt. Consider using salt to enhance safety.

    Correctly handle abnormalities and errors.
  • For more secure implementation, explore other encryption algorithms and methods. Note: There are problems with the function in the original code, and it is not actually used in the example, so it has been removed. The correct IV processing method needs to be adjusted according to the specific AES usage mode. This simplified version removes IV, assuming the default mode of AES. In practical applications, you need to choose the appropriate AES mode according to the needs and properly handle the IV.
  • This Revned Answer Improves The Code by USING
  • Statements for Proper Resource Management, Removing The United Potentially Flaget

The above is the detailed content of How Can I Securely Encrypt and Decrypt Strings in C#?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn