小白C#窗体系列-09.SHA系列加密

SHA系列加密,SHA512安全是安全,但位数太长了,很少有人用它加密密码,下面我就简单介绍一下SHA和一些变种加密(SHA512也会用进去的)

程序跟国际化接轨,都是用的UTF-8编码格式

(如果有比我还菜的鸟写出相同的加密方式得到的密文不同,如果要质疑的话,先把编码看一下,不同编码产生密文是不同的)

提供另一种思路(下期会讲):在多重加密的过程中反复变化编码。。。自己想象去吧~

这个是SHA-1的加密写法,和MD5一样的

也许有人会问,那个for循环怎么没了?我这边用的是官方提供的方法,for循环那个一般只有在对内部字节进行变形或者刚学才用的

如果你不知道我说的是什么的话,,,,看一下这个日记,有详解:http://user.qzone.qq.com/1054186320/blog/1407540646

这个是本期练手软件:http://pan.baidu.com/s/1sjjWqpZ

public string GetSHAOne(string input)//SHA-1加密

{

//创

SHA1 shaOne = SHA1.Create();

//变

byte[] shaOneBuffer = shaOne.ComputeHash(Encoding.UTF8.GetBytes(input));

//关

shaOne.Clear();

return BitConverter.ToString(shaOneBuffer).Replace("-", "").ToLower();//另一种简单的方法

}

那SHA256怎么用呢?。。。简单,把SHA1换成SHA256就行了,代码如下:

public string GetSHAX(string input)

{

//创

SHA256 shaX = SHA256.Create();

//变

byte[] shaXBuffer = shaX.ComputeHash(Encoding.UTF8.GetBytes(input));

//关

shaX.Clear();

return BitConverter.ToString(shaXBuffer).Replace("-", "").ToLower();//另一种简单的方法

}

好了,下面重点介绍一下我最新加密成果:DNTDBT加密(dnt大变态)

其实也不是我自己创出的加密了,就是把一下常用的加密我自己“人性化”的加上自己的思路,小小的变化一下,然后再重铸了一下

也可以称为:SHA系列综合变异 【用到了SHA512(目前最安全的加密)】~编码格式为 UTF-8

先谈一下思路:明文——>SHA512——>Base64——>BTMD5——>BYSHA——>SHA512——>Base64——>BYSHA(40位)【这个叫加密顺序还是有一些玄机的,具体自己揣测哦~】

建议站长用这种最复杂的加密方式来录入密码~我把代码简单优化一下,你可以再优化(优化角度:从节省资源开始)

我这边主要是给小白看的不能优化过头,不然他们肯定看不懂

代码贴一下:

public string DNTDBT(string input)

{

//创

SHA512 shaX = SHA512.Create();

//变+关

string newInput = GetBYSHA(GetBTMD5(GetBase64(shaX.ComputeHash(Encoding.UTF8.GetBytes(input)))));

string strShax = GetBase64(shaX.ComputeHash(Encoding.UTF8.GetBytes(newInput)));

shaX.Clear();//释放一系列加密所占的资源

return GetBYSHA(strShax);

}

是不是感觉很简单呢?咳咳,,下面才是真正的海量代码,上面只是一个方法调用多个方法而已~~

//MD5小变异

public string GetSXMD5(string input)

{

//创

MD5 md5 = MD5.Create();

//转

byte[] md5buffer = md5.ComputeHash(Encoding.UTF8.GetBytes(input));

StringBuilder sbMd5 = new StringBuilder();

for (int i = md5buffer.Length - 1; i >= 0; i--)

{

sbMd5.Append(md5buffer[i].ToString("x2"));

}

//关

md5.Clear();

return sbMd5.ToString();

}

//SHA-1加密

public string GetSHAOne(string input)

{

//创

SHA1 shaOne = SHA1.Create();

//变

byte[] shaOneBuffer = shaOne.ComputeHash(Encoding.UTF8.GetBytes(input));

//关

shaOne.Clear();

return BitConverter.ToString(shaOneBuffer).Replace("-", "").ToLower();//另一种简单的方法(也可以用上面遍历来做)

}

//MD5再变异--一段处理后再变成MD5(保证位数一定)

public string GetBTMD5(string input)

{

//创

MD5 md5 = MD5.Create();

//变

byte[] md5Buffer = md5.ComputeHash(Encoding.UTF8.GetBytes(input));

////变异开始

StringBuilder sb = new StringBuilder();

for (int i = md5Buffer.Length - 1; i >= 0; i--)

{

sb.Append(((int.Parse(md5Buffer[i].ToString())) - 1).ToString("x2"));

}

//关

md5.Clear();

//重新加固

return GetSXMD5(sb.ToString());

}

//Base64加密(之所以选他是因为他的地址中有各种特殊符号,多重破解很艰难的)

public string GetBase64(byte[] inputBuffer)

{

return Convert.ToBase64String(inputBuffer);

}

//SHA-1小变异

public string GetBYSHA(string input)

{

//创

SHA1 shaOne = SHA1.Create();

//变

byte[] shaOneBuffer = shaOne.ComputeHash(Encoding.UTF8.GetBytes(input));

string newinput = GetBase64(shaOneBuffer);

byte[] shaNewBuffer = shaOne.ComputeHash(Encoding.UTF8.GetBytes(newinput));

//关

shaOne.Clear();

return BitConverter.ToString(shaNewBuffer).Replace("-", "").ToLower();

}

咳咳,看到这说明你有还没有被吓到,或者说你直接一目千行了,好吧,逆天有个习惯,讲个技术点就喜欢发个大绝招,我也编了个软件给你们参考

源码如下:http://pan.baidu.com/s/1c0o03QS

如果你Base64加密不太懂的话,就看这篇文章:http://user.qzone.qq.com/1054186320/blog/1409210604

如果你MD5系列还是不太懂的话,就看这篇文章:http://user.qzone.qq.com/1054186320/blog/1407540646

如果你图标布局之类的不会的话,就看这篇文章:http://user.qzone.qq.com/1054186320/blog/1396659636 
如果你C#学的还是有点那个啥的话,送你点资源:http://user.qzone.qq.com/1054186320/blog/1404357056

淡淡的飘过~下次会弄个更复杂的加密~先闪~~~

本期推荐:  CodeSmith Generator 7.0.2                                                                               下一期:打造万能图片转换器

时间: 2024-07-29 15:06:40

小白C#窗体系列-09.SHA系列加密的相关文章

小白C#窗体系列-08小议Base64+MD5加密

啥是Base64呢?怎么说呢,这个加密比较常用,想想迅雷的下载地址,想想QQ旋风和快车.他们就是用的这个Base64来加密地址,现在网上很多地址解析器,原理就是反Base64.        Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码.它将需要编码的数据拆分成字节数组.以3个字节为一组.按顺序排列24 位数据,再把这24位数据分成4组,即每组6位.再在每组的的最高位前补两个0凑足一个字节.这样就把一个3字节为一组的数据重新编码成了4个字节.当所要编码的数据的字节

小白C#窗体系列-02.二维码生成器

今天是情人节,咳,男人们带着他们的男朋友们,女人带着她们的女朋友们愉快的逛着街.逆天也就不随大众了,就继续出C#小白系列的教程了~~~ 实在没空去录教程了,就看看文档吧,大家都知道的,录教程是比较花时间的,我不想草草了事,那是对大家和我自己的不负责,视频可以以后再录,不过软件和源码以及文档得先弄好,毕竟逆天不喜欢失信与自己~~ 废话不说了,开始我们的教程吧~ 软件下载(.NET 4.0 框架)http://pan.baidu.com/s/1i3BUVNv[源码看下面] 一.设计图纸: 二.代码分

小白C#窗体系列-01.简易浏览器

最近重伤,今天正好放假,就抽个空出C#第一集,开发完毕... 如果你看不到这篇文章,那过一天就可以看见了. 软件下载(.NET 4.0 框架)http://pan.baidu.com/s/1c03X7vM[源码看下面] 一.设计图纸: 二.代码分析 1.后退键. 前进键.停止键.刷新键:这几个功能本来我是准备用个数组来存储,可以前进后退的,后来啃他自带方法的时候发现微软提供了方法,也就偷个懒了后退按钮 this.webBrowser1.GoBack(); 前进按钮 this.webBrowser

C#程序集系列09,程序集签名

在"C#程序集系列08,设置程序集版本"中体验了为程序集设置版本,但对于程序集的安全性来说,还远远不够.本篇体验程序集的签名. □ 程序集的签名 →F盘as文件夹下有多个文件→在程序集所在文件夹创建密匙→打印密匙密匙是一堆乱码,这是经过加密了.→在密匙的基础上创建公匙Public Key→打印公匙Public Key注意:这里的public token是public key经过哈希算法而获得的.当程序集被引用,该程序集对外是以public token形式存在的. →现在重新编译&quo

算法系列3——SHA

SHA是一种数据加密算法,该算法经过加密专家多年来的发展和改进已日益完善,现在已成为公认的最安全的散列算法之一,并被广泛使用.该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短.位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程.散列函数值可以说时对明文的一种"指纹"或是"摘要"所以对散列值的数字签名就可以视为对此明文的数字签名. 单向散列函数一般

Java 加解密技术系列之 SHA

序 上一篇文章中介绍了基本的单向加密算法 - - MD5,也大致的说了说它实现的原理.这篇文章继续之前提到的单向加密,主要讲的是 SHA,同 MD5 一样,SHA 同样也是一个系列,它包括 SHA-1,SHA-224,SHA-256,SHA-384,和 SHA-512 等几种算法.其中,SHA-1,SHA-224 和 SHA-256 适用于长度不超过 2^64 二进制位的消息.SHA-384 和 SHA-512 适用于长度不超过 2^128 二进制位的消息. 背景 开始正文之前,简单的说一下背景

3.Java 加解密技术系列之 SHA

Java 加解密技术系列之 SHA 序 背景 正文 SHA-1 与 MD5 的比较 代码实现 结束语 序 上一篇文章中介绍了基本的单向加密算法 — — MD5,也大致的说了说它实现的原理.这篇文章继续之前提到的单向加密,主要讲的是 SHA,同 MD5 一样,SHA 同样也是一个系列,它包括 SHA-1,SHA-224,SHA-256,SHA-384,和 SHA-512 等几种算法.其中,SHA-1,SHA-224 和 SHA-256 适用于长度不超过 2^64 二进制位的消息.SHA-384 和

Java 集合系列 09 HashMap详细介绍(源码解析)和使用示例

此页面为WP8"Surface Pro 3"应用的发布页面. "Surface Pro 3"是一款收集Surface Pro 3的玩机技巧的WP8程序,更好的帮助Surface用户理解并使用它. 此页面主要记录开发进度.APP发布等情况. -------------------相关进度--------------------- 目前进度:UI相关资源前期准备中,各相关开放平台的AppID申请中... Java 集合系列 09 HashMap详细介绍(源码解析)和使用

线程系列09,线程的等待、通知,以及手动控制线程数量

当一个线程直到收到另一个线程的通知才执行相关的动作,这时候,就可以考虑使用"事件等待句柄(Event Wait Handles)".使用"事件等待句柄"主要用到3个类: AutoResetEvent, ManualResetEvent以及CountdownEvent(.NET 4.0以后才有).本篇包括: ※ 一个线程等待另一个线程的通知※ 2个线程互相通知等待※ 一个线程等待队列中的多个任务通知※ 手动控制线程的数量 □ 一个线程等待另一个线程的通知 最简单的情景