代码如下: using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Security.Cryptography; using Microsoft.Win32; //************************************************************************ //by Windrand //Date:2008-10-05 //http://www.pefine.com namespace TrialTest { class TrialClass { public static byte[] Encrypt(byte[] clearData, byte[] Key, byte[] IV) { MemoryStream ms = new MemoryStream(); Rijndael alg = Rijndael.Create(); alg.Key = Key; alg.IV = IV; CryptoStream cs = new CryptoStream(ms, alg.CreateEncryptor(), CryptoStreamMode.Write); cs.Write(clearData, 0, clearData.Length); cs.Close(); byte[] encryptedData = ms.ToArray(); return encryptedData; } public string EncryptStr(string clearText, string Password) { byte[] clearBytes = System.Text.Encoding.Unicode.GetBytes(clearText); PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password, new byte[] {0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76}); byte[] encryptedData = Encrypt(clearBytes, pdb.GetBytes(32), pdb.GetBytes(16)); return Convert.ToBase64String(encryptedData); } public static byte[] Decrypt(byte[] cipherData, byte[] Key, byte[] IV) { MemoryStream ms = new MemoryStream(); Rijndael alg = Rijndael.Create(); alg.Key = Key; alg.IV = IV; CryptoStream cs = new CryptoStream(ms, alg.CreateDecryptor(), CryptoStreamMode.Write); cs.Write(cipherData, 0, cipherData.Length); cs.Close(); byte[] decryptedData = ms.ToArray(); return decryptedData; } public string DecryptStr(string cipherText, string Password) { byte[] cipherBytes = Convert.FromBase64String(cipherText); PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password, new byte[] {0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76}); byte[] decryptedData = Decrypt(cipherBytes, pdb.GetBytes(32), pdb.GetBytes(16)); return System.Text.Encoding.Unicode.GetString(decryptedData); } public static void SaveSetting(string Section, string Key, string Setting) { string text1 = Section; RegistryKey key1 = Registry.LocalMachine.CreateSubKey(text1); if (key1 == null) { return; } try { key1.SetValue(Key, Setting); } catch (Exception exception1) { return; } finally { key1.Close(); } } public static string GetSetting(string Section, string Key, string Default) { if (Default == null) { Default = ""; } string text2 = Section; RegistryKey key1 =Registry.LocalMachine.OpenSubKey(text2); if (key1 != null) { object obj1 = key1.GetValue(Key, Default); key1.Close(); if (obj1 != null) { if (!(obj1 is string)) { return null; } return (string)obj1; } return null; } return Default; } } } 调用如下: private void button3_Click(object sender, EventArgs e) { //返回值有三个,-1表示调用错误,0调试试用次数已到,除-1和0以外的返回值则是实际的试用次数 int result = GetTrialTime(10); switch (result) { case -1: label1.Text = "软件调用错误请与作者联系!"; break; case 0: label1.Text = "软件试用已到期请购买正式版软件!"; break; default: label1.Text="软件已试用"+result.ToString()+"次!"; break; } }