字符串常用的加密有三种

1、MD5加密,这个常用于密码,单向加密,不可解密,有些在线解密的可以解大部份,用代码不能实现,如果不想让人解密,加密后随便截取一段就好了;

2、Base64位加密,通常加密后字符串尾会有两个 == ,可解密;

3、SHA加密,单向加密,安全性没MD5好。

以上不可解密都是相对的,这些加密算法都是跨平台的。

        using System.Web.Security;
using System.Security.Cryptography; /// <summary>
/// MD5函数
/// </summary>
/// <param name="val">原始字符串</param>
/// <returns>MD5结果</returns>
public static string MD5String(string val)
{
if (val.Trim().Equals(String.Empty) == true)
return String.Empty; byte[] b = Encoding.UTF8.GetBytes(val);
b = new MD5CryptoServiceProvider().ComputeHash(b);
string ret = String.Empty;
for (int i = 0; i < b.Length; i++)
ret += b[i].ToString("x").PadLeft(2, '0'); return ret;
} /// <summary>
/// SHA1字符串加密
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static string SHA1(string obj)
{
return FormsAuthentication.HashPasswordForStoringInConfigFile(obj, "SHA1");
} /// <summary>
/// SHA256字符串加密
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static string SHA256(string obj)
{
//return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(obj, "SHA256");
byte[] bytValue = System.Text.Encoding.UTF8.GetBytes(obj);
SHA256 sha256 = new SHA256Managed();
byte[] retVal = sha256.ComputeHash(bytValue);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < retVal.Length; i++)
{
sb.Append(retVal[i].ToString("x2"));
}
return sb.ToString();
} /// <summary>
/// Base64位加密
/// </summary>
/// <param name="val"></param>
/// <returns></returns>
public static string EncryptBase64(string val)
{
return Convert.ToBase64String(Encoding.UTF8.GetBytes(val));
} /// <summary>
/// Base64位解密
/// </summary>
/// <param name="val"></param>
/// <returns></returns>
public static string DecryptBase64(string val)
{
return Encoding.Default.GetString(Convert.FromBase64String(val));
} /// <summary>
/// BASE64位(MD5加密)[标准,非MD5加密再BASE64位加密]
/// </summary>
/// <param name="val">原始字符串</param>
/// <returns>MD5结果</returns>
public static string EncryptBase64AndMD5(string val)
{
if (val.Trim().Equals(String.Empty) == true)
return String.Empty; MD5CryptoServiceProvider MD5CSP = new MD5CryptoServiceProvider();
return Convert.ToBase64String(MD5CSP.ComputeHash(Encoding.UTF8.GetBytes(val)));
}

也可以定义一个KEY,自定义加密算法

        /// <summary>
/// DES加密字符串
/// </summary>
/// <param name="encryptString">待加密的字符串</param>
/// <param name="encryptKey">加密密钥,要求为8位</param>
/// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
public static string Encode(string encryptString, string encryptKey)
{
encryptKey = UtilsString.SubString(encryptKey, 8);
encryptKey = encryptKey.PadRight(8, ' ');
byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
byte[] rgbIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
return Convert.ToBase64String(mStream.ToArray());
} /// <summary>
/// DES解密字符串
/// </summary>
/// <param name="decryptString">待解密的字符串</param>
/// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
/// <returns>解密成功返回解密后的字符串,失败返源串</returns>
public static string Decode(string decryptString, string decryptKey)
{
decryptKey = UtilsString.SubString(decryptKey, 8);
decryptKey = decryptKey.PadRight(8, ' ');
byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);
byte[] rgbIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
byte[] inputByteArray = Convert.FromBase64String(decryptString);
DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider(); MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
return Encoding.UTF8.GetString(mStream.ToArray());
}

  

最新文章

  1. .Net 转战 Android 4.4 日常笔记(7)--apk的打包与反编译
  2. js创建,获取,检测cookie
  3. java学习点
  4. 山东省第七届ACM省赛------Reversed Words
  5. JavaWeb chapter10 JavaWeb开发模式
  6. Region的周长, 面积与紧凑程度
  7. 使用Karma 来进行 JavaScript 测试
  8. HDU 1796 容斥原理
  9. 只有图片拼接的html页面图片之间有白条的解决方法
  10. iOS8中用UIVisualEffectView实现高斯模糊视图(毛玻璃效果)
  11. HDU4801&#183;二阶魔方
  12. WIN7上搭建Windows Phone 8 开发环境——VMware Workstation下Win8 “无法安装Hyper-V, 某个虚拟机监控程序正在运行”问题解决的办法
  13. C++中的string类(2)
  14. Objective-C方法与函数的区别
  15. 第四章Android移植环境搭建
  16. CoCos2dx开发:中文乱码
  17. [日常] HTTP的缓存
  18. 集合框架的类和接口均在java.util包中。 任何对象加入集合类后,自动转变为Object类型,所以在取出的时候,需要进行强制类型转换。
  19. 50.EasyGank妹纸App
  20. windows7所有版本迅雷地址下载集合(含32位和64位) - imsoft.cnblogs

热门文章

  1. 三.jQuery源码解析之jQuery的框架图
  2. WCF传输大数据 --断点续传(upload、download)
  3. mongodb聚合 group
  4. Protocol入门
  5. Java下LDAP操作的资料
  6. Supervisor安装与配置
  7. OleVariant Variant
  8. np的归纳总结
  9. cluster DNS
  10. S——table