文档章节

c#MD5加密解密

o
 osc_qkqoqioc
发布于 2018/05/24 23:00
字数 682
阅读 9
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

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)
        {

        }

        /// <summary>

        /// 32位MD5加密

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>
        /*  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.实验效果

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
XLSX读写库--EPPlus

EPPlus 是使用Open Office XML格式(xlsx)读写Excel 2007 / 2010文件的.net开发库。 EPPlus 支持: 单元格范围 单元格样式(Border, Color, Fill, Font, Number, Alignments) Charts 图片 形状...

匿名
2013/02/01
1W
2
密码管理程序--pwgrep

为了管理我的密码,我写了一个小的 bash/awk 脚本用来管理一个密码数据库并使用 GnuPG 进行加密。使用 pwgrep 的好处是: 密码加密 密码版本化,不用担心丢失老密码 Since a versioning sys...

匿名
2013/03/11
1.3K
0
Password Manager Daemon

pwmd(Password Manager Daemon) 通过 Unix domain socket 提供服务,数据存储在加密的 XML 文件中,客户端必须提供密钥才能修改。支持多线程,可同时允许多个客户端同时连接。 特性 通过 ...

匿名
2013/03/12
441
0
文本编辑器--AutOrg

AutOrg的目标是成为一个文本编辑器,个人备忘记事本,本地的wiki,安全议程等等。对于用户界面,它得到的灵感来自基于文本的极简主义,还提供高级特性的发布、加密和信息共享。它使用Emacs org模式...

匿名
2012/10/24
2.5K
0
Gnome加密密钥管理--Seahorse

Seahorse是一个GNOME程序,用于管理加密密钥。本软件同时也集成了nautilus, gedit 工具及其它加密操作。 seahorse可以... 创建和管理 PGP keys 创建和管理 SSH keys 在密钥服务器发布及获取密...

开源好!
2012/11/08
1.2K
0

没有更多内容

加载失败,请刷新页面

加载更多

如何用Postman做接口自动化测试

目录 前言 什么是自动化测试 自动化测试有哪些分类 为什么需要自动化测试 Postman自动化测试演示 1.新建集合 2.新建接口 3.填写自动化测试脚本 4.录入所有接口 5.执行自动化测试 前言 什么是...

osc_71qxolcv
8分钟前
0
0
下载Crypto,CyCrypto,PyCryptodome 报错问题

python下载Crypto,CyCrypto,PyCryptodome,如有site-packages中存在crypto、pycrypto,在pip之前,需要pip3 uninstall crypto、pip3 uninstall pycrypto,否则无法安装成功。这里顺带说一下...

osc_pl4ni83h
10分钟前
0
0
HashMap JDK1.8实现原理

HashMap概述 HashMap存储的是key-value的键值对,允许key为null,也允许value为null。HashMap内部为数组+链表的结构,会根据key的hashCode值来确定数组的索引(确认放在哪个桶里),如果遇到索...

osc_cx8uhydz
11分钟前
0
0
快速打造属于你的接口自动化测试框架

1 接口测试 接口测试是对系统或组件之间的接口进行测试,主要是校验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系。 接口自动化相对于UI自动化来说,属于更底层的测试,这样带来的好...

osc_4eht81t7
12分钟前
0
0
MVC的Action上下文:ActionExecutingContext

就上图来看,大家注意了吗,ActionExecutingContext对象一共有3处引用。下面我来一一解析: 调用base.OnActionExecuting(filterContext)这个后,才会执行后续的ActionFilter,如果你确定只有一...

osc_4otxquc2
13分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部