博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c#MD5加密解密
阅读量:6831 次
发布时间:2019-06-26

本文共 4302 字,大约阅读时间需要 14 分钟。

MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest开发出来,经MD2、MD3和MD4发展而来。

是让大容量信息在用签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。不管是MD2、MD4还是MD5,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要。虽然这些算法的结构或多或少有些相似,但MD2的设计与MD4和MD5完全不同,那是因为MD2是为8位机器做过设计优化的,而MD4和MD5却是面向32位的电脑。

1.新建一个窗体应用程序

有三种方式来加密,上两种注释的是不需要秘钥加密的,下一种是是需要秘钥和向量的;

代码如下:

 

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Globalization;using System.IO;using System.Linq;using System.Security.Cryptography;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace AES加密解密{    public partial class MD5_DES_加密解密 : Form    {        public MD5_DES_加密解密()        {            InitializeComponent();        }        private void MD5_DES_加密解密_Load(object sender, EventArgs e)        {        }        ///         /// 32位MD5加密        ///         ///         ///         /*  private void button1_Click(object sender, EventArgs e)          {//这两种方式都可以              /*  byte[] result = Encoding.Default.GetBytes(this.textBox1.Text.Trim());    //textBox1为输入密码的文本框                MD5 md5 = new MD5CryptoServiceProvider();                byte[] output = md5.ComputeHash(result);                this.richTextBox1.Text = BitConverter.ToString(output).Replace("-", "");  //richTextBox1为输出加密文本的文本框           */        /*  if (richTextBox1.Text!=null)         {             richTextBox1.Text = "";             string str = textBox1.Text;             MD5 md = MD5.Create();             byte[] bytes = md.ComputeHash(System.Text.Encoding.UTF8.GetBytes(str));             foreach (byte b in bytes)             {                 richTextBox1.Text += b.ToString();             }         }     }*/        private void button1_Click(object sender, EventArgs e)        {
//加密-此种方法要输入秘钥键值 richTextBox1.Text = Encode(textBox1.Text, textBox2.Text, textBox3.Text); } private void button2_Click(object sender, EventArgs e) {
//解密-此种方法要输入秘钥键值 richTextBox1.Text = Decode(textBox4.Text, textBox2.Text, textBox3.Text); } //加密 public static string Encode(string data, string Key_64, string Iv_64) { string KEY_64 = Key_64;// "VavicApp"; string IV_64 = Iv_64;// "VavicApp";//64位的键值和IV值要为8位 try { byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64); byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64); DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider(); int i = cryptoProvider.KeySize; MemoryStream ms = new MemoryStream(); CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write); StreamWriter sw = new StreamWriter(cst); sw.Write(data); sw.Flush(); cst.FlushFinalBlock(); sw.Flush(); return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length); } catch (Exception x) { return x.Message; } } //解密 public static string Decode(string data, string Key_64, string Iv_64) { string KEY_64 = Key_64;// "VavicApp";密钥 string IV_64 = Iv_64;// "VavicApp"; 向量IV必须是 8 字节长度的十六进制数。 try { byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64); byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64); byte[] byEnc; byEnc = Convert.FromBase64String(data); //把需要解密的字符串转为8位无符号数组 DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider(); MemoryStream ms = new MemoryStream(byEnc); CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read); StreamReader sr = new StreamReader(cst); return sr.ReadToEnd(); } catch (Exception x) { return x.Message; } } }}

2.实验效果

 

转载于:https://www.cnblogs.com/kalezhangtao/p/9085698.html

你可能感兴趣的文章
2016 “Better Software East/DevOps East/Agile Dev East”三个会议上的发言
查看>>
五大理由告诉你,再不看Kubernetes真的晚了
查看>>
编译安装php&&apahce以及pecl使用
查看>>
Amazon Aurora新增“回溯”特性,让DB集群可以回退到特定时间点
查看>>
pcl之FPFH配准
查看>>
微软投资混合连接,发布本地数据网关
查看>>
用PVS在.NET内核中发现的缺陷
查看>>
微软推出VS Code新特性,为TypeScript和JavaScript用户提供AI辅助开发功能
查看>>
开始使用MongoDB之前应该知道的14件事
查看>>
TensorFlow模型的签名推荐与快速上线\n
查看>>
【腾讯优测干货分享】从压测工具谈并发、压力、吞吐量
查看>>
推荐几款好用的书签收藏夹插件-让我们可以稍后阅读
查看>>
JavaScript函数(arguments,this)的理解
查看>>
supervisor安装概述
查看>>
JQ版图片的鼠标放上效果
查看>>
avalon2.1.16发布
查看>>
编程中的那些套路——关于观察者模式
查看>>
Laravel学习笔记之Model Observer模型观察者
查看>>
css3 checked属性写导航目录
查看>>
引用传递和值传递(pass by value vs pass by reference)
查看>>