在C#和JavaScript之间进行加解密互转,我们通常会选择一种通用的算法,比如AES(高级加密标准)。这里我将为你提供一个基本的示例,展示如何在C#和JavaScript中使用AES算法进行加密和解密,以实现数据的互转。
### C# 加密和解密
在C#中,我们可以使用`System.Security.Cryptography`命名空间下的`Aes`类来实现AES加密和解密。
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
public class AesEncryption
{
public static string Encrypt(string plainText, string key)
{
byte[] encrypted;
using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = Encoding.UTF8.GetBytes(key.Substring(0, 32));
aesAlg.IV = Encoding.UTF8.GetBytes(key.Substring(32));
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msEncrypt = new MemoryStream())
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
swEncrypt.Write(plainText);
}
encrypted = msEncrypt.ToArray();
}
}
}
return Convert.ToBase64String(encrypted);
}
public static string Decrypt(string cipherText, string key)
{
byte[] cipherBytes = Convert.FromBase64String(cipherText);
using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = Encoding.UTF8.GetBytes(key.Substring(0, 32));
aesAlg.IV = Encoding.UTF8.GetBytes(key.Substring(32));
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msDecrypt = new MemoryStream(cipherBytes))
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
return srDecrypt.ReadToEnd();
}
}
}
}
}
}
### JavaScript 加密和解密
在JavaScript中,我们可以使用`crypto-js`库来执行AES加密和解密。首先,你需要通过npm或CDN引入`crypto-js`。
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>
<script>
function encrypt(text, secretKey) {
var key = CryptoJS.enc.Utf8.parse(secretKey.substring(0, 32));
var iv = CryptoJS.enc.Utf8.parse(secretKey.substring(32));
var encrypted = CryptoJS.AES.encrypt(text, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString();
}
function decrypt(ciphertext, secretKey) {
var key = CryptoJS.enc.Utf8.parse(secretKey.substring(0, 32));
var iv = CryptoJS.enc.Utf8.parse(secretKey.substring(32));
var bytes = CryptoJS.AES.decrypt(ciphertext, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return bytes.toString(CryptoJS.enc.Utf8);
}
</script>
注意,在上述C#和JavaScript示例中,我们使用了相同的密钥和IV(初始化向量),并且它们都是从同一个密钥字符串中分割出来的。在实际应用中,你可能需要更安全地管理密钥和IV,例如使用密钥管理系统(KMS)来存储和分发密钥。
另外,请注意在传输加密数据时,应确保密文和密钥的安全性,避免在不安全的通道上明文传输。