ASP.NET JS加密解密实现流程
流程图
flowchart TD
A(开始)
B(生成密钥)
C(加密明文)
D(解密密文)
E(结束)
A --> B
B --> C
C --> D
D --> E
甘特图
gantt
dateFormat YYYY-MM-DD
section 任务
生成密钥 :a1, 2021-05-01, 3d
加密明文 :a2, after a1, 2d
解密密文 :a3, after a2, 2d
详细步骤
-
生成密钥
// 生成密钥 string key = Guid.NewGuid().ToString("N").Substring(0, 16);
解释:使用
Guid.NewGuid()
生成一个全球唯一的标识符(GUID),然后将其转换为不带连字符的16进制字符串,最后取前16个字符作为密钥。 -
加密明文
// 将明文转换为字节数组 byte[] plainBytes = Encoding.UTF8.GetBytes(plainText); // 创建AES加密算法实例 using (Aes aes = Aes.Create()) { aes.Key = Encoding.UTF8.GetBytes(key); aes.Mode = CipherMode.CBC; aes.Padding = PaddingMode.PKCS7; // 生成随机的初始化向量 byte[] iv = aes.IV; // 使用密钥和初始化向量进行加密 using (ICryptoTransform encryptor = aes.CreateEncryptor()) { byte[] encryptedBytes = encryptor.TransformFinalBlock(plainBytes, 0, plainBytes.Length); // 将密文和初始化向量合并 byte[] encryptedData = new byte[iv.Length + encryptedBytes.Length]; Buffer.BlockCopy(iv, 0, encryptedData, 0, iv.Length); Buffer.BlockCopy(encryptedBytes, 0, encryptedData, iv.Length, encryptedBytes.Length); // 将密文转换为Base64字符串 encryptedText = Convert.ToBase64String(encryptedData); } }
解释:首先将明文转换为字节数组。然后创建一个AES加密算法实例,并设置密钥、加密模式和填充模式。生成一个随机的初始化向量。使用密钥和初始化向量创建一个加密转换器,在最后一个数据块之后进行加密。将初始化向量和加密后的数据合并,并将密文转换为Base64字符串。
-
解密密文
// 将密文转换回字节数组 byte[] encryptedData = Convert.FromBase64String(encryptedText); // 创建AES解密算法实例 using (Aes aes = Aes.Create()) { aes.Key = Encoding.UTF8.GetBytes(key); aes.Mode = CipherMode.CBC; aes.Padding = PaddingMode.PKCS7; // 从密文中提取初始化向量 byte[] iv = new byte[aes.BlockSize / 8]; Buffer.BlockCopy(encryptedData, 0, iv, 0, iv.Length); // 使用密钥和初始化向量进行解密 using (ICryptoTransform decryptor = aes.CreateDecryptor()) { byte[] encryptedBytes = new byte[encryptedData.Length - iv.Length]; Buffer.BlockCopy(encryptedData, iv.Length, encryptedBytes, 0, encryptedBytes.Length); byte[] plainBytes = decryptor.TransformFinalBlock(encryptedBytes, 0, encryptedBytes.Length); plainText = Encoding.UTF8.GetString(plainBytes); } }
解释:首先将密文转换回字节数组。然后创建一个AES解密算法实例,并设置密钥、加密模式和填充模式。从密文中提取初始化向量,然后使用密钥和初始化向量创建一个解密转换器,在最后一个数据块之后进行解密。将解密后的字节数组转换为明文。
完成以上三个步骤后,即可成功实现ASP.NET中的JS加密解密功能。