方今在对一个共处的系统举办C#改建,该系统早先是用PHP做的,后台的指挥者登入用的是MD5加密算法。在PHP中,要对贰个字符串举办MD5加密相当的轻巧,豆蔻梢头行代码就可以:

为了网站的安全,对密码加密,连接字符串加密时非常重大的,今后就来介绍三种常用的加密方法:

MD5百度康健

  MD5即Message-Digest
Algorithm
5(音信-摘要算法5卡塔尔,用于确认保障音讯传输完整风姿洒脱致。是Computer布满采纳的杂凑算法之后生可畏(又译摘要算法、哈希算法卡塔尔,主流编程语言分布原来就有MD5完毕。将数据(如汉字)运算为另豆蔻梢头一定长度值,是杂凑算法的底工原理,MD5的前身有MD2、MD3和MD4

md5("Something you want to encrypt.")

 MD5:(不可逆的加密)

简介

  入行没多长期,听见外人吹捧MD5加密不能破解。作为当下新手的本人乍生机勃勃听,这么些这么叼的?今后出道一年多了,开掘原来MD5正是单排代码的事情,借使相当不足再加大器晚成行呗。

  直接调用md5()方法,然后将要进行MD5加密的字符串传进去,就可以获得重临的hash
code。在C#中应该也有相应的算法吧!对吧?作者第意气风发尝试了上面包车型客车代码,结果拿到的hash
code和PHP不相符。

咱俩得以使用C#自带的类MD5CryptoServiceProvider去落到实处

.NET早期MD5加密

  早先时期的MD5加密的主意,真的独有豆蔻年华段代码。不相信请看如下代码:

   
 会员登陆 1

  System.Web.Security下边包车型大巴静态类FormAuthentication下中的HashPasswordForStoringInConfigFile方法加密能够对字符串实行想要的算法加密,假如要用的话,间接豆蔻梢头段代码就能够。可是作为有强迫证的技术员依然写个点子相比较。但是,注意到方法方面包车型的士Obsolete类的疏解,发掘该办法已经不应时宜,过时并非无法运用而已,假如想大概点的话,那生机勃勃段代码还是能够接收的。

public static string MD5(string stringToHash)
{
    return FormsAuthentication.HashPasswordForStoringInConfigFile(stringToHash, "md5");
}

 MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

.NET今后的加密方法

  刚开始阶段的MD5加密方法,已经过时。随着要求更是大,安全性更是高,微软推出了MD5类。

   
 会员登陆 2

盛产的MD5类中,改MD5CryptoServiceProvider世襲MD5类。该形式重借使因此将字符串调换到操作系统当前的近些日子ANSI
代码页的编码的字节连串比特数组。在经过MD5CryptoServiceProvider中的ComputeHash方法计算比特数组的哈希值,最终加总结过后的数组进行字符串重新整合,也就构成当前的MD5字符串

  计算下,第大器晚成种艺术比较容易实用,可是过时了,缺少安全性;第二种方法安全性较高,还以进字符串的拓宽壹回依旧每每加密,拓宽性更加强(究竟推出的新点子卡塔 尔(英语:State of Qatar)。不是说好的三种方式的啊?怎么就总括了?其实思考C#言语进行加密运算的时候,作为开拓职员当数据库一批加密后的字符串怎么做?所以数据库当然也足以实行MD5加密了,为了越来越好的方便管理程序。此前在同盟社看见数据库自定义函数能够直接用MD5改动登入密码,改进该函数,发现/*
Definition is encrypted.
*/该函数被加密。之后本人查究了半小时,才将百度到的MD5函数进行加密。如下图所示。

   会员登陆 3

中级注释掉的为加密或绑定,那样就足以团结写个函数而不给人家使用了O(∩_∩)O哈哈~。

  所以,大家只好借用C#的MD5CryptoServiceProvider对象本身写代码实行转移。

string
加密后的密码=BitConverter.ToString(md5.ComputeHash(Encoding.Default.GetBytes(原密码))).Replace(“-“,””);

SQLMD5加密

  通过上面包车型地铁数据库的加密,自身定义了个艺术,主如果由此数据库函数重回的值  会员登陆 4

  以上正是MD5学习的二种方式,记录下团结的心得。。。。。。。

 

  1.
实例化MD5CryptoServiceProvider对象

或者

  2. 将字符串转变来byte数组

 public string Encrypt1(string password)

  3.
使用MD5CryptoServiceProvider目的的ComputeHash()方法将byte数组实行加密,重回调换后的byte数组

{ //获取byte数组

  4. 在讲byte数组转变来字符串此前,还索要对其开展遍历并做如下调换:

Byte[] clearBytes = new UnicodeEncoding().GetBytes(password);

myByte.ToString("x2").ToLower()

 //获取hash值

  然后,你能力博得和PHP中相像的MD5 hash
code。为何在.NET中要如此劳苦,只怕那也是怎么那么多的开拓职员还是热衷于PHP开辟的说辞之风姿浪漫,每一门编制程序语言都有它本人的魔力,也都有它存在的意义!

 Byte[] hashedBytes =
((HashAlgorithm)CryptoConfig.CreateFromName(“MD5”)).ComputeHash(clearBytes);

  基于上边的商酌,完整的代码如下:

//获取加密后的新闻

public static string MD5ForPHP(string stringToHash)
{
    var md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
    byte[] emailBytes = Encoding.UTF8.GetBytes(stringToHash.ToLower());
    byte[] hashedEmailBytes = md5.ComputeHash(emailBytes);
    StringBuilder sb = new StringBuilder();
    foreach (var b in hashedEmailBytes)
    {
        sb.Append(b.ToString("x2").ToLower());
    }
    return sb.ToString();
}

return BitConverter.ToString(hashedBytes);

  只怕,你也可以把上边的章程写成多少个C#扩展方法,只需求改良章程署名就能够。

}

public static string MD5ForPHP(this String, string stringToHash)
{
    // Your code here.
}

拍卖后的md5加密方法

  PHP程序和C#程序在不菲地点都会波及到格式之间的转变,假若运维PHP的服务器是UNIX类型的,则还有恐怕会设有日期格式之间的改造。上面包车型客车八个办法体现了怎么将UNIX时间转移成C#
DateTime以致怎么着将C# DateTime转换成UNIX时间。

 

public static DateTime UnixTimeStampToDateTime(long unixTimeStamp)
{
    // Unix timestamp is seconds past epoch
    DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
    return dtDateTime.AddSeconds(unixTimeStamp);
}

public static long DateTimeToUnixTimeStamp(DateTime datetime)
{
    TimeSpan span = (datetime - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc));
    return (long)span.TotalSeconds;
}

会员登陆 5会员登陆 6View Code

 

 public string GetMd5(string str)//MD5 32位加密
        {

            string cl = DateTime.Now.Month + str + DateTime.Now.Day;//将在加密的字符串加上前缀与后缀后再加密;
           
            string pwd = “”;
            MD5 md5 = MD5.Create();//实例化多个md5对像
            // 加密后是叁个字节类型的数组,这里要介怀编码UTF8/Unicode等的选择
            byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
            s.Reverse();    //翻转生成的MD5码
            // 通过接收循环,将字节类型的数组转变为字符串,此字符串是常规字符格式化所得
            for (int i = 3; i < s.Length – 1; i++) //只取MD5码的一片段;恶意访谈者不能知晓取的是哪三个人。
            {
                // 将获取的字符串使用十九进制类型格式。格式后的字符是小写的假名,假诺使用大写(X卡塔 尔(英语:State of Qatar)则格式后的字符是大写字符
                pwd = pwd + (s[i] < 198 ? s[i] + 28 : s[i]).ToString(“X”); // 进一层对转移的MD5码做一些退换。
            }
            return pwd;
        }

 

DES:(可逆的加密)

加密

string key=”加密钥匙”;

public string Encrypt(string encryptString)

{

byte[] keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 8));

byte[] keyIV = keyBytes;

 byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);

 DESCryptoServiceProvider provider = new DESCryptoServiceProvider();

MemoryStream mStream = new MemoryStream();

 CryptoStream cStream = new CryptoStream(mStream,
provider.CreateEncryptor (keyBytes,keyIV), CryptoStreamMode.Write);

cStream.Write(inputByteArray, 0, inputByteArray.Length);

cStream.FlushFinalBlock();

return Convert.ToBase64String(mStream.ToArray());

}

 解密:

 public string Decrypt(string decryptString)

 {

byte[] keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 8));

byte[] keyIV = keyBytes;

byte[] inputByteArray = Convert.FromBase64String(decryptString);

DESCryptoServiceProvider provider = new DESCryptoServiceProvider();

MemoryStream mStream = new MemoryStream();

 CryptoStream cStream = new CryptoStream(mStream,
provider.CreateDecryptor(keyBytes, keyIV), CryptoStreamMode.Write);

cStream.Write(inputByteArray, 0, inputByteArray.Length);

cStream.FlushFinalBlock();

return Encoding.UTF8.GetString(mStream.ToArray());

 }

网络的加密方法非常多,最棒组合自身改善的,要不等种加密算法,外人相符也会知道…

相关文章