Utilisez des algorithmes C # et AES pour crypter et déchiffrer la chaîne
Cet article présente comment crypter et déchiffrer la chaîne avec l'algorithme C # et supérieur de norme de chiffrement (AES). AES est un algorithme de chiffrement symétrique qui offre une sécurité solide et est souvent utilisé pour protéger les données sensibles.
.NET Framework fournit une classe RijndaelManaged
, qui est l'implémentation de l'hôte d'un algorithme AES. Il fournit des méthodes de cryptage et de décryptage.
<code class="language-csharp">using System.Security.Cryptography; public class EncryptionManager { private static byte[] _salt = /* 请在此处插入自定义salt */; public static string EncryptStringAES(string plainText, string sharedSecret) { if (string.IsNullOrEmpty(plainText) || string.IsNullOrEmpty(sharedSecret)) throw new ArgumentNullException(); using (var aesAlg = new RijndaelManaged()) { // 使用共享密钥和salt生成密钥 using (var key = new Rfc2898DeriveBytes(sharedSecret, _salt)) { aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8); } // 创建加密器 var encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV); // 加密文本 using (var msEncrypt = new MemoryStream()) { using (var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) { using (var swEncrypt = new StreamWriter(csEncrypt)) { swEncrypt.Write(plainText); } } // 将加密后的字节转换为base64字符串 return Convert.ToBase64String(msEncrypt.ToArray()); } } } public static string DecryptStringAES(string cipherText, string sharedSecret) { if (string.IsNullOrEmpty(cipherText) || string.IsNullOrEmpty(sharedSecret)) throw new ArgumentNullException(); using (var aesAlg = new RijndaelManaged()) { // 使用共享密钥和salt生成密钥 using (var key = new Rfc2898DeriveBytes(sharedSecret, _salt)) { aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8); } var cipherBytes = Convert.FromBase64String(cipherText); using (var msDecrypt = new MemoryStream(cipherBytes)) { aesAlg.IV = ReadByteArray(msDecrypt); // 创建解密器 var decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV); // 解密文本 using (var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) { using (var srDecrypt = new StreamReader(csDecrypt)) { return srDecrypt.ReadToEnd(); } } } } } private static byte[] ReadByteArray(Stream s) { byte[] rawLength = new byte[sizeof(int)]; s.Read(rawLength, 0, rawLength.Length); byte[] buffer = new byte[BitConverter.ToInt32(rawLength, 0)]; s.Read(buffer, 0, buffer.Length); return buffer; } }</code>
Ce code montre comment utiliser la classe
pour implémenter le cryptage et le décryptage AES. Veuillez noter que dans le code doit être remplacé par une valeur de sel personnalisée pour améliorer la sécurité. Cet exemple utilise pour dériver la clé AES de la clé partagée et du sel. Les résultats cryptés sont retournés sous la forme de la chaîne Base64, ce qui est pratique pour le stockage et la transmission. Le processus de décryptage est inversé, convertissant la chaîne Base64 en tableau d'octets, puis décrivrant. La fonction est utilisée pour lire IV (vecteur d'initialisation) du flux. N'oubliez pas de faire face à des anomalies potentielles. RijndaelManaged
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!