生成加密密钥、加密和解密数据、生成许可证和验证许可证的功能
using System;
using System.Security.Cryptography;
using System.Text;
// 使用Aes类生成对称加密密钥:
public static byte[] GenerateKey()
{
using (Aes aes = Aes.Create())
{
aes.GenerateKey();
return aes.Key;
}
}
// 使用Aes类进行数据加密和解密:
public static byte[] EncryptData(byte[] key, string data)
{
using (Aes aes = Aes.Create())
{
aes.Key = key;
aes.GenerateIV();
ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);
using (var ms = new System.IO.MemoryStream())
{
ms.Write(aes.IV, 0, aes.IV.Length);
using (var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
{
using (var sw = new System.IO.StreamWriter(cs))
{
sw.Write(data);
}
}
return ms.ToArray();
}
}
}
public static string DecryptData(byte[] key, byte[] encryptedData)
{
using (Aes aes = Aes.Create())
{
aes.Key = key;
byte[] iv = new byte[aes.BlockSize / 8];
Array.Copy(encryptedData, iv, iv.Length);
ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, iv);
using (var ms = new System.IO.MemoryStream(encryptedData, iv.Length, encryptedData.Length - iv.Length))
{
using (var cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
{
using (var sr = new System.IO.StreamReader(cs))
{
return sr.ReadToEnd();
}
}
}
}
}
// 生成许可证文件,包含用户信息和加密密钥的哈希值:
public static string GenerateLicense(byte[] key, string userInfo)
{
string licenseData = $"{userInfo}|{Convert.ToBase64String(key)}";
string licenseHash = ComputeSha256Hash(licenseData);
return Convert.ToBase64String(Encoding.UTF8.GetBytes($"{licenseData}|{licenseHash}"));
}
private static string ComputeSha256Hash(string rawData)
{
using (SHA256 sha256Hash = SHA256.Create())
{
byte[] bytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(rawData));
StringBuilder builder = new StringBuilder();
for (int i = 0; i < bytes.Length; i++)
{
builder.Append(bytes[i].ToString("x2"));
}
return builder.ToString();
}
}
// 验证许可证的合法性:
public static bool VerifyLicense(string license, string userInfo)
{
string licenseData = Encoding.UTF8.GetString(Convert.FromBase64String(license));
string[] licenseParts = licenseData.Split('|');
if (licenseParts.Length != 3)
{
return false;
}
string licenseUserInfo = licenseParts[0];
string licenseKey = licenseParts[1];
string licenseHash = licenseParts[2];
if (licenseUserInfo != userInfo)
{
return false;
}
string expectedHash = ComputeSha256Hash($"{licenseUserInfo}|{licenseKey}");
return expectedHash == licenseHash;
}
// 示例代码展示如何生成加密密钥、加密和解密数据、生成许可证和验证许可证:
public class Program
{
public static void Main()
{
string userInfo = "user@example.com";
byte[] key = GenerateKey();
string license = GenerateLicense(key, userInfo);
Console.WriteLine("生成的许可证: " + license);
Console.WriteLine("许可证验证结果: " + VerifyLicense(license, userInfo));
// 加密和解密数据
string data = "Hello, World!";
byte[] encryptedData = EncryptData(key, data);
Console.WriteLine("加密数据: " + Convert.ToBase64String(encryptedData));
string decryptedData = DecryptData(key, encryptedData);
Console.WriteLine("解密数据: " + decryptedData);
}
}