using System.Security.Cryptography; using System.Text; namespace IotManager.Common { public class Base64 { public static void MainTest() { // 要加密的原始字符串 string originalText = "Hello, World!"; // 加密成Base64字符串 string base64EncodedText = EncodeBase64(originalText); Console.WriteLine("Base64 编码结果: " + base64EncodedText); // 解密Base64字符串 string decodedText = DecodeBase64(base64EncodedText); Console.WriteLine("Base64 解码结果: " + decodedText); } // 使用Base64编码字符串 public static string EncodeBase64(string text) { byte[] bytesToEncode = Encoding.UTF8.GetBytes(text); string encodedText = Convert.ToBase64String(bytesToEncode); return encodedText; } // 使用Base64解码字符串 public static string DecodeBase64(string encodedText) { byte[] decodedBytes = Convert.FromBase64String(encodedText); string decodedText = Encoding.UTF8.GetString(decodedBytes); return decodedText; } // 使用3DES-MAC签名消息 public static string Sign3DESMAC(string key, string message) { byte[] keyBytes = Encoding.UTF8.GetBytes(key); byte[] messageBytes = Encoding.UTF8.GetBytes(message); using (TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider()) { des.Key = keyBytes; des.Mode = CipherMode.ECB; // 3DES-MAC通常使用ECB模式 des.Padding = PaddingMode.PKCS7; // PKCS7填充 using (HMACMD5 hmac = new HMACMD5(des.Key)) { byte[] hashBytes = hmac.ComputeHash(messageBytes); return BitConverter.ToString(hashBytes).Replace("-", "").ToLower(); } } } // 验证3DES-MAC签名 public static bool Verify3DESMAC(string key, string message, string macToVerify) { string calculatedMAC = Sign3DESMAC(key, message); return string.Equals(calculatedMAC, macToVerify, StringComparison.OrdinalIgnoreCase); } /// /// 取前16个字节 /// /// /// /// public static byte[] ComputeHMACSHA256Short(string message, string key) { using (HMACSHA256 hmac = new HMACSHA256(Encoding.UTF8.GetBytes(key))) { byte[] messageBytes = Encoding.UTF8.GetBytes(message); byte[] fullHash = hmac.ComputeHash(messageBytes); // 对完整哈希再做一次SHA256并取前16字节 using (SHA256 sha = SHA256.Create()) { byte[] rehashed = sha.ComputeHash(fullHash); byte[] result = new byte[16]; Array.Copy(rehashed, result, 16); return result; } } } public static byte[] ComputeHMACSHA256(string message, string key) { using (HMACSHA256 hmac = new HMACSHA256(Encoding.UTF8.GetBytes(key))) { byte[] messageBytes = Encoding.UTF8.GetBytes(message); return hmac.ComputeHash(messageBytes); } } public static bool VerifyHMACSHA256(byte[] message, byte[] key, byte[] expectedMac) { using (HMACSHA256 hmac = new HMACSHA256(key)) { byte[] computedMac = hmac.ComputeHash(message); return CryptographicOperations.FixedTimeEquals(computedMac, expectedMac); // 防止时间攻击 } } static void Test() { string key = "ThisIsASecretKey"; // 密钥长度必须是24字节(192位) string message = "Hello, World!"; // 使用3DES-MAC签名消息 string mac = Sign3DESMAC(key, message); Console.WriteLine("3DES-MAC 签名: " + mac); // 验证3DES-MAC签名 bool isVerified = Verify3DESMAC(key, message, mac); if (isVerified) { Console.WriteLine("消息验证成功!"); } else { Console.WriteLine("消息验证失败!"); } } } }