JavaScript 中的 AES 加密与 C# 中的解密涉及几个基础概念,包括对称加密、AES 算法、密钥管理以及编码格式。以下是对这些概念的详细解释,以及如何在 JavaScript 中进行 AES 加密并在 C# 中进行解密的示例。
首先,你需要一个支持 AES 的库,如 crypto-js
。
// 安装 crypto-js: npm install crypto-js
const CryptoJS = require('crypto-js');
// 密钥和初始向量(IV),应从安全的地方获取
const secretKey = 'YourSecretKey123'; // 16字节(128位)密钥
const iv = CryptoJS.lib.WordArray.random(16); // 16字节随机IV
// 待加密的数据
const data = 'Hello, World!';
// 加密
const encrypted = CryptoJS.AES.encrypt(data, secretKey, { iv: iv });
// 将IV和密文一起编码为Base64字符串以便传输
const encryptedData = iv.toString() + ':' + encrypted.toString();
console.log('Encrypted Data:', encryptedData);
在 C# 中,你可以使用 System.Security.Cryptography
命名空间中的类来进行解密。
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
class Program
{
static void Main()
{
// 假设这是从JavaScript端接收到的加密数据
string encryptedData = "YourBase64EncodedEncryptedData"; // 替换为实际接收到的数据
// 分割IV和密文
var parts = encryptedData.Split(':');
byte[] iv = Convert.FromBase64String(parts[0]);
byte[] cipherText = Convert.FromBase64String(parts[1]);
// 密钥,应从安全的地方获取
string secretKey = "YourSecretKey123"; // 与JavaScript端保持一致
using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = Encoding.UTF8.GetBytes(secretKey);
aesAlg.IV = iv;
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msDecrypt = new MemoryStream(cipherText))
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
string plaintext = srDecrypt.ReadToEnd();
Console.WriteLine("Decrypted Data: " + plaintext);
}
}
}
}
}
}
通过以上步骤和注意事项,你应该能够在JavaScript中进行AES加密并在C#中进行相应的解密操作。
领取专属 10元无门槛券
手把手带您无忧上云