Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya boleh menyulitkan dan menyahsulit tali dengan selamat di C#?
<:> Soalan:
Bagaimana untuk menyulitkan dan menguraikan rentetan dengan selamat di C# untuk melindungi data?
Penyelesaian:
C# menawarkan alat penyulitan yang kuat untuk rentetan yang disulitkan dan dibuka dengan selamat. Satu kaedah adalah menggunakan piawaian enkripsi lanjutan (AES) dan objek. Berikut adalah contoh kod:
untuk menyulitkan rentetan, sila gunakan plaintext anda dan berkongsi kekunci untuk memanggil RijndaelManaged
. Semasa penyahsulitan, kunci yang dikongsi mesti dipadankan. Untuk menyahsulit, sila gunakan ciphertext yang disulitkan dan kekunci yang dikongsi untuk memanggil
<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>
Keterangan tambahan: EncryptStringAES(plainText, sharedSecret)
DecryptStringAES(cipherText, sharedSecret)
Gunakan kunci kongsi yang kuat untuk menyulitkan. Pertimbangkan menggunakan garam untuk meningkatkan keselamatan.
Atas ialah kandungan terperinci Bagaimanakah saya boleh menyulitkan dan menyahsulit tali dengan selamat di C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!