C#工具类整理


/// <summary> /// 日志类 /// </summary> public class Log { /// <summary> /// 日志等级,0.不输出日志;1.只输出错误信息; 2.输出错误和正常信息; 3.输出错误信息、正常信息和调试信息 /// </summary> public static int logLevel = 3; /// <summary> /// 在网站根目录下创建日志目录 /// </summary> public static string path = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory) + Path.DirectorySeparatorChar + "logs"; /// <summary> /// 向日志文件写入调试信息 /// </summary> /// <param name="className">类名</param> /// <param name="content">写入内容</param> public static void Debug(string className, string content) { if (logLevel >= 3) { WriteLog("DEBUG", className, content); } } /// <summary> /// 向日志文件写入运行时信息 /// </summary> /// <param name="className">类名</param> /// <param name="content">写入内容</param> public static void Info(string className, string content) { if (logLevel >= 2) { WriteLog("INFO", className, content); } } /// <summary> /// 向日志文件写入出错信息 /// </summary> /// <param name="className">类名</param> /// <param name="content">写入内容</param> public static void Error(string className, string content) { if (logLevel >= 1) { WriteLog("ERROR", className, content); } } /// <summary> /// 实际的写日志操作 /// </summary> /// <param name="type">日志记录类型</param> /// <param name="className">类名</param> /// <param name="content">写入内容</param> protected static void WriteLog(string type, string className, string content) { if (!Directory.Exists(path))//如果日志目录不存在就创建 { Directory.CreateDirectory(path); } string time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");//获取当前系统时间 string filename = path + "/" + DateTime.Now.ToString("yyyy-MM-dd") + ".log";//用日期对日志文件命名 //创建或打开日志文件,向日志文件末尾追加记录 using (StreamWriter mySw = File.AppendText(filename)) { //向日志文件写入内容 string write_content = time + " " + type + " " + className + ": " + content; mySw.WriteLine(write_content); } } }

 

 /// <summary>
 /// RSA密钥格式转换
 /// </summary>
 public class RSAKeyConvert
 {
     #region 私钥

     /// <summary>
     /// RSA私钥格式转换,java->.net
     /// </summary>
     /// <param name="privateKey">java生成的RSA私钥</param>
     /// <returns></returns>
     public static string RSAPrivateKeyJava2DotNet(string privateKey)
     {
         RsaPrivateCrtKeyParameters privateKeyParam = (RsaPrivateCrtKeyParameters)PrivateKeyFactory.CreateKey(Convert.FromBase64String(privateKey));

         return string.Format("<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent><P>{2}</P><Q>{3}</Q><DP>{4}</DP><DQ>{5}</DQ><InverseQ>{6}</InverseQ><D>{7}</D></RSAKeyValue>",
             Convert.ToBase64String(privateKeyParam.Modulus.ToByteArrayUnsigned()),
             Convert.ToBase64String(privateKeyParam.PublicExponent.ToByteArrayUnsigned()),
             Convert.ToBase64String(privateKeyParam.P.ToByteArrayUnsigned()),
             Convert.ToBase64String(privateKeyParam.Q.ToByteArrayUnsigned()),
             Convert.ToBase64String(privateKeyParam.DP.ToByteArrayUnsigned()),
             Convert.ToBase64String(privateKeyParam.DQ.ToByteArrayUnsigned()),
             Convert.ToBase64String(privateKeyParam.QInv.ToByteArrayUnsigned()),
             Convert.ToBase64String(privateKeyParam.Exponent.ToByteArrayUnsigned()));
     }

     /// <summary>
     /// RSA私钥格式转换,.net->java
     /// </summary>
     /// <param name="privateKey">.net生成的私钥</param>
     /// <returns></returns>
     public static string RSAPrivateKeyDotNet2Java(string privateKey)
     {
         XmlDocument doc = new XmlDocument();
         doc.LoadXml(privateKey);
         BigInteger m = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("Modulus")[0].InnerText));
         BigInteger exp = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("Exponent")[0].InnerText));
         BigInteger d = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("D")[0].InnerText));
         BigInteger p = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("P")[0].InnerText));
         BigInteger q = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("Q")[0].InnerText));
         BigInteger dp = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("DP")[0].InnerText));
         BigInteger dq = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("DQ")[0].InnerText));
         BigInteger qinv = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("InverseQ")[0].InnerText));

         RsaPrivateCrtKeyParameters privateKeyParam = new RsaPrivateCrtKeyParameters(m, exp, d, p, q, dp, dq, qinv);

         PrivateKeyInfo privateKeyInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(privateKeyParam);
         byte[] serializedPrivateBytes = privateKeyInfo.ToAsn1Object().GetEncoded();
         return Convert.ToBase64String(serializedPrivateBytes);
     }

     /// <summary>
     /// PEM私钥转换成XML私钥
     /// </summary>
     /// <param name="privateKey">生成的RSA私钥 pem格式密钥</param>
     /// <returns></returns>
     public static string PrivateKeyPemToXml(string privateKey)
     {
         string rsaKey = string.Empty;
         using (StringReader sReader = new StringReader(privateKey))
         {
             var pemReader = new Org.BouncyCastle.OpenSsl.PemReader(sReader);
             object pemObject = pemReader.ReadObject();

             RsaPrivateCrtKeyParameters key = (RsaPrivateCrtKeyParameters)((AsymmetricCipherKeyPair)pemObject).Private;
             RSAParameters rsaPara = new RSAParameters
             {
                 Modulus = key.Modulus.ToByteArrayUnsigned(),
                 Exponent = key.PublicExponent.ToByteArrayUnsigned(),
                 D = key.Exponent.ToByteArrayUnsigned(),
                 P = key.P.ToByteArrayUnsigned(),
                 Q = key.Q.ToByteArrayUnsigned(),
                 DP = key.DP.ToByteArrayUnsigned(),
                 DQ = key.DQ.ToByteArrayUnsigned(),
                 InverseQ = key.QInv.ToByteArrayUnsigned(),
             };
             RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
             rsa.ImportParameters(rsaPara);
             using (StringWriter sw = new StringWriter())
             {
                 sw.Write(rsa.ToXmlString(true));
                 rsaKey = sw.ToString();
             }
         }
         return rsaKey;
     }

     /// <summary>
     /// XML私钥转成PEM私钥
     /// </summary>
     /// <param name="xmlPrivateKey"></param>
     /// <returns></returns>
     public static string PrivateKeyXmlToPem(string xmlPrivateKey)
     {
         RSAParameters rsaParam;
         using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
         {
             rsa.FromXmlString(xmlPrivateKey);
             rsaParam = rsa.ExportParameters(true);
         }

         var param = new RsaPrivateCrtKeyParameters(
         new BigInteger(1, rsaParam.Modulus), new BigInteger(1, rsaParam.Exponent), new BigInteger(1, rsaParam.D),
         new BigInteger(1, rsaParam.P), new BigInteger(1, rsaParam.Q), new BigInteger(1, rsaParam.DP), new BigInteger(1, rsaParam.DQ),
         new BigInteger(1, rsaParam.InverseQ));

         string pemPrivateKeyStr = null;
         using (var ms = new MemoryStream())
         {
             using (var sw = new StreamWriter(ms))
             {
                 var pemWriter = new Org.BouncyCastle.OpenSsl.PemWriter(sw);
                 pemWriter.WriteObject(param);
                 sw.Flush();

                 byte[] buffer = new byte[ms.Length];
                 ms.Position = 0;
                 ms.Read(buffer, 0, (int)ms.Length);
                 pemPrivateKeyStr = Encoding.UTF8.GetString(buffer);
             }
         }

         return pemPrivateKeyStr;
     }
     #endregion 私钥

     #region 公钥
     /// <summary>
     /// RSA公钥格式转换,java->.net
     /// </summary>
     /// <param name="publicKey">java生成的公钥</param>
     /// <returns></returns>
     public static string RSAPublicKeyJava2DotNet(string publicKey)
     {
         RsaKeyParameters publicKeyParam = (RsaKeyParameters)PublicKeyFactory.CreateKey(Convert.FromBase64String(publicKey));
         return string.Format("<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent></RSAKeyValue>",
             Convert.ToBase64String(publicKeyParam.Modulus.ToByteArrayUnsigned()),
             Convert.ToBase64String(publicKeyParam.Exponent.ToByteArrayUnsigned()));
     }

     /// <summary>
     /// RSA公钥格式转换,.net->java
     /// </summary>
     /// <param name="publicKey">.net生成的公钥</param>
     /// <returns></returns>
     public static string RSAPublicKeyDotNet2Java(string publicKey)
     {
         XmlDocument doc = new XmlDocument();
         doc.LoadXml(publicKey);
         BigInteger m = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("Modulus")[0].InnerText));
         BigInteger p = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("Exponent")[0].InnerText));
         RsaKeyParameters pub = new RsaKeyParameters(false, m, p);

         SubjectPublicKeyInfo publicKeyInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(pub);
         byte[] serializedPublicBytes = publicKeyInfo.ToAsn1Object().GetDerEncoded();
         return Convert.ToBase64String(serializedPublicBytes);
     }

     /// <summary>
     /// PEM公钥转换成XML公钥
     /// </summary>
     /// <param name="publicKey">生成的RSA公钥 pem格式密钥</param>
     /// <returns></returns>
     public static string PublicKeyPemToXml(string publicKey)
     {
         string rsaKey = string.Empty;
         using (StringReader sReader = new StringReader(publicKey))
         {
             var pemReader = new Org.BouncyCastle.OpenSsl.PemReader(sReader);
             object pemObject = pemReader.ReadObject();

             RsaKeyParameters key = (RsaKeyParameters)pemObject;
             RSAParameters rsaPara = new RSAParameters
             {
                 Modulus = key.Modulus.ToByteArrayUnsigned(),
                 Exponent = key.Exponent.ToByteArrayUnsigned(),
             };
             RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
             rsa.ImportParameters(rsaPara);
             using (StringWriter sw = new StringWriter())
             {
                 sw.Write(rsa.ToXmlString(true));
                 rsaKey = sw.ToString();
             }
         }
         return rsaKey;
     }

     /// <summary>
     /// XML公钥转成Pem公钥
     /// </summary>
     /// <param name="xmlPublicKey"></param>
     /// <returns></returns>
     public static string PublicKeyXmlToPem(string xmlPublicKey)
     {
         RSAParameters rsaParam;
         using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
         {
             rsa.FromXmlString(xmlPublicKey);
             rsaParam = rsa.ExportParameters(false);
         }
         RsaKeyParameters param = new RsaKeyParameters(false, new BigInteger(1, rsaParam.Modulus), new BigInteger(1, rsaParam.Exponent));

         string pemPublicKeyStr = null;
         using (var ms = new MemoryStream())
         {
             using (var sw = new StreamWriter(ms))
             {
                 var pemWriter = new Org.BouncyCastle.OpenSsl.PemWriter(sw);
                 pemWriter.WriteObject(param);
                 sw.Flush();

                 byte[] buffer = new byte[ms.Length];
                 ms.Position = 0;
                 ms.Read(buffer, 0, (int)ms.Length);
                 pemPublicKeyStr = Encoding.UTF8.GetString(buffer);
             }
         }

         return pemPublicKeyStr;
     }
     #endregion 公钥
 }
/// <summary>
/// 解密
/// </summary>
/// <param name="privateKey">私钥 “-----BEGIN RSA PRIVATE KEY-----”开头 “-----END RSA PRIVATE KEY-----”结尾</param>
/// <param name="text">使用publickey_ver指定版本的公钥进行非对称加密后base64加密的内容</param>
/// <returns></returns>
public string Decrypt(string privateKey, string text)
{
    var rsa = new RSACryptoServiceProvider();
    var bytes = Convert.FromBase64String(text);
    rsa.FromXmlString(RSAKeyConvert.PrivateKeyPemToXml(privateKey));
    var result = rsa.Decrypt(bytes, false);
    return Encoding.UTF8.GetString(result);
}

 


/// <summary>
/// 缓存工具类
/// </summary>
public class CacheHelper
{
    /// <summary>
    /// 获取数据缓存
    /// </summary>
    /// <param name="CacheKey">对象的键值</param>
    public static object GetCache(string CacheKey)
    {
        Cache objCache = HttpRuntime.Cache;
        return objCache[CacheKey];
    }

    /// <summary>
    /// 设置数据缓存
    /// </summary>
    /// <param name="CacheKey">对象的键值</param>
    /// <param name="obj">缓存的对象</param>
    public static void SetCache(string CacheKey, object obj)
    {
        Cache objCache = HttpRuntime.Cache;
        objCache.Insert(CacheKey, obj);
    }

    /// <summary>
    /// 设置数据缓存
    /// </summary>
    /// <param name="CacheKey">对象的键值</param>
    /// <param name="obj">缓存的对象</param>
    /// <param name="Timeout"></param>
    public static void SetCache(string CacheKey, object obj, TimeSpan Timeout)
    {
        Cache objCache = HttpRuntime.Cache;
        objCache.Insert(CacheKey, obj, null, DateTime.MaxValue, Timeout, CacheItemPriority.NotRemovable, null);
    }

    /// <summary>
    /// 设置数据缓存
    /// </summary>
    /// <param name="CacheKey">对象的键值</param>
    /// <param name="obj">缓存的对象</param>
    /// <param name="expire"></param>
    public static void SetCache(string CacheKey, object obj, int expire)
    {
        Cache objCache = HttpRuntime.Cache;
        //表示永不过期
        if (expire == 0)
        {
            objCache.Insert(CacheKey, obj, null, DateTime.MaxValue, TimeSpan.Zero, CacheItemPriority.High, null);
        }
        else
        {
            objCache.Insert(CacheKey, obj, null, DateTime.Now.AddSeconds(expire), Cache.NoSlidingExpiration, CacheItemPriority.High, null);
        }
    }

    /// <summary>
    /// 设置数据缓存
    /// </summary>
    /// <param name="CacheKey">对象的键值</param>
    /// <param name="obj">缓存的对象</param>
    /// <param name="absoluteExpiration"></param>
    /// <param name="slidingExpiration"></param>
    public static void SetCache(string CacheKey, object obj, DateTime absoluteExpiration, TimeSpan slidingExpiration)
    {
        Cache objCache = HttpRuntime.Cache;
        objCache.Insert(CacheKey, obj, null, absoluteExpiration, slidingExpiration);
    }

    /// <summary>
    /// 移除指定数据缓存
    /// </summary>
    /// <param name="CacheKey">对象的键值</param>
    public static void RemoveCache(string CacheKey)
    {
        Cache _cache = HttpRuntime.Cache;
        _cache.Remove(CacheKey);
    }

    /// <summary>
    /// 移除全部缓存
    /// </summary>
    public static void RemoveAllCache()
    {
        Cache _cache = HttpRuntime.Cache;
        IDictionaryEnumerator CacheEnum = _cache.GetEnumerator();
        while (CacheEnum.MoveNext())
        {
            _cache.Remove(CacheEnum.Key.ToString());
        }
    }

    /// <summary>
    /// 获取所有缓存
    /// </summary>
    /// <returns></returns>
    public static List<DictionaryEntry> GetAllCache()
    {
        List<DictionaryEntry> list = new List<DictionaryEntry>();
        Cache _cache = HttpRuntime.Cache;
        IDictionaryEnumerator CacheEnum = _cache.GetEnumerator();
        while (CacheEnum.MoveNext())
        {
            list.Add((DictionaryEntry)CacheEnum.Current);
            //cacheItem = Server.HtmlEncode(CacheEnum.Current.ToString());
            //Response.Write(cacheItem);
        }
        return list;
    }
}
 /// <summary>
 /// 时间类
 /// </summary>
 public static class TimeHelper
 {
     /// <summary>
     /// 
     /// </summary>
     private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

     /// <summary>
     /// 将时间转为10位和13位时间戳
     /// </summary>
     /// <param name="dt">时间</param>
     /// <param name="bflag">为真时获取10位时间戳,为假时获取13位时间戳.bool bflag = true</param>
     /// <returns></returns>
     public static long GetDateTimeToUnixTime(DateTime dt, bool bflag = true)
     {
         var utcTime = dt.ToUniversalTime();
         var elapsedTime = utcTime - UnixEpoch;
         if (bflag)
         {
             return (long)elapsedTime.TotalSeconds;
         }
         else
         {
             return (long)elapsedTime.TotalMilliseconds;
         }
     }

     /// <summary>
     /// 将10位和13位时间戳转为时间
     /// </summary>
     /// <param name="unixTime">10位或13位时间戳</param>
     /// <returns></returns>
     public static DateTime GetUnixTimeToDateTime(string unixTime)
     {
         DateTime utcTime;
         long lTime = long.Parse(unixTime);
         if (unixTime.Length == 10)//判断是10位
         {
             utcTime = UnixEpoch.AddSeconds(lTime);
         }
         else if (unixTime.Length == 13)//判断是13位
         {
             utcTime = UnixEpoch.AddMilliseconds(lTime);
         }
         else
         {
             utcTime = UnixEpoch;
         }
         return utcTime.ToLocalTime(); ;

     }
 }

 

posted @ 2025-07-22 16:29  曲琦  阅读(9)  评论(0)    收藏  举报