common(getip,加密,图片转化)

using Ctrip.SOA.Comm;
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using System.Web.Security;
using System.Windows.Media.Imaging;

namespace Ctrip.Domestic.Adapter.Utility
{
public class Common
{
/// <summary>
/// SOA 1.0的调用方式
/// </summary>
/// <typeparam name="T"></typeparam>
/// <typeparam name="TR"></typeparam>
/// <param name="req"></param>
/// <returns></returns>
public static TR InvokeSOA<T, TR>(T req)
where T : class
where TR : class
{
if (req == null)
{
return null;
}

var request = XMLSerializer.Serialize(req, typeof(T), Encoding.UTF8);
var response = WSAgent.Request(request, 30000);
return XMLSerializer.DeSerialize(response, typeof(TR)) as TR;
}

public static string GetWebClientIp()
{
string userIP = "";

try
{
if (System.Web.HttpContext.Current == null
|| System.Web.HttpContext.Current.Request == null
|| System.Web.HttpContext.Current.Request.ServerVariables == null)
{
return "";
}

string CustomerIP = "";

//CDN加速后取到的IP simone 090805
CustomerIP = System.Web.HttpContext.Current.Request.Headers["Cdn-Src-Ip"];
if (!string.IsNullOrEmpty(CustomerIP))
{
return CustomerIP;
}

CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (!string.IsNullOrEmpty(CustomerIP))
return CustomerIP;

if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)
{
CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
}

if (CustomerIP == null)
{
CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}

if (string.Compare(CustomerIP, "unknown", true) == 0)
return System.Web.HttpContext.Current.Request.UserHostAddress;
return CustomerIP;
}
catch { }

return userIP;

}

/// <summary>
/// 生成PBKDF2加密算法的Salt
/// </summary>
/// <returns></returns>
public static byte[] GenerateEncryptCode()
{
byte[] salt = new byte[8];
using (RNGCryptoServiceProvider rngCsp = new RNGCryptoServiceProvider())
{
// Fill the array with a random value.
rngCsp.GetBytes(salt);
}

return salt;
}

/// <summary>
/// PBKDF2加密算法,用于直连用户验证
/// </summary>
/// <param name="password"></param>
/// <returns></returns>
public static string PBKDF2Encryption(string password, byte[] salt)
{
Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(password, salt, 1024); //1024次迭代
byte[] pbkdf2 = key.GetBytes(16);

//将盐和pbkdf2值拼接后返回
byte[] all = new byte[salt.Length + pbkdf2.Length];
Array.Copy(salt, 0, all, 0, salt.Length);
Array.Copy(pbkdf2, 0, all, salt.Length, pbkdf2.Length);

string strdk = Convert.ToBase64String(all);
return strdk;
}

/// <summary>
/// 判断是否为BMP/TIF图片
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static bool isBMPImage(string url)
{
if (url.EndsWith(".bmp", StringComparison.InvariantCultureIgnoreCase) ||
url.EndsWith(".tif", StringComparison.InvariantCultureIgnoreCase))
{
return true;
}
return false;
}

/// <summary>
/// 转换图片为JPEG格式
/// </summary>
/// <param name="bytes"></param>
/// <returns></returns>
public static byte[] convertBMPtoJPEG(byte[] bytes)
{
using (MemoryStream output = new MemoryStream())
{
using (MemoryStream input = new MemoryStream(bytes))
{
BitmapImage BitImage = new BitmapImage();
BitImage.BeginInit();
BitImage.StreamSource = input;
BitImage.EndInit();
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(BitImage));
encoder.Save(output);
};
return output.ToArray();
};
}

/// <summary>
/// MD5加密算法
/// </summary>
/// <param name="strInput">需要加密的字符串</param>
/// <param name="bit">加密后的输出长度, 16或32</param>
/// <returns></returns>
public static string MD5GenerateHash(string strInput, int bit = 32)
{
if (bit == 16)
{
return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strInput, "MD5").ToLower().Substring(8, 16);
}
else
{
return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strInput, "MD5").ToLower();
}
}

/// <summary>
/// 获取当前时间戳
/// </summary>
/// <returns></returns>
public static string GetTimeStamp()
{
TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
return Convert.ToInt64(ts.TotalSeconds).ToString();
}

/// <summary>
/// 获取时间戳
/// </summary>
/// <returns></returns>
public static long GetTimeStamp(DateTime dateTime)
{
TimeSpan ts = dateTime - TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
return (long)ts.TotalMilliseconds;
}

/// <summary>
/// 将c# DateTime时间格式转换为Unix时间戳格式
/// </summary>
/// <param name="time">时间</param>
/// <returns>double</returns>
public static long ConvertDateTimeInt(System.DateTime time)
{
double intResult = 0;
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
intResult = (time - startTime).TotalMilliseconds;
return (long)intResult;
}

/// <summary>
/// 返回小写的
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string MD5(string str)
{
//System.Web.Configuration.FormsAuthPasswordFormat.MD5
return FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").ToLower();
}
}
}

posted @ 2016-04-20 14:02  点点-滴滴  阅读(209)  评论(0)    收藏  举报