c#加密解密源码,md5、des、rsa
从网上找来的代码,顺手改改,用起来更方便。
配置文件
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Xml.Serialization; namespace Encoder
{
[Serializable]
public class Cfg
{
public string Pub = "";
public string Pri = ""; public void Creat()
{
RSAKey keys = Encoder.CreateRSAKey();
Pub = keys.PrivateKey;
Pri = keys.PublicKey;
} public void Save()
{
try
{
string fileName = "cfg.txt";//文件名称与路径
using (Stream fStream = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
XmlSerializer xmlFormat = new XmlSerializer(typeof(Cfg));//创建XML序列化器,需要指定对象的类型
xmlFormat.Serialize(fStream, this);
fStream.Close();
}
}
catch (Exception ex)
{
throw ex;
}
} public bool Read()
{
try
{
string fileName = "cfg.txt";//文件名称与路径
using (Stream fStream = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
XmlSerializer xmlFormat = new XmlSerializer(typeof(Cfg));//创建XML序列化器,需要指定对象的类型
Cfg c = (Cfg)xmlFormat.Deserialize(fStream);
this.Pub = c.Pub;
this.Pri = c.Pri;
fStream.Close();
}
}
catch (Exception ex)
{
//throw ex;
}
if (Pub != "" && Pri != "")
return true;
return false; } }
}
生成密钥
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms; namespace Encoder
{
public partial class CreateRSAKeysForm : Form
{
public CreateRSAKeysForm()
{
InitializeComponent();
} private void CreateRSAKeysForm_Load(object sender, EventArgs e)
{
Cfg c = new Cfg();
c.Read();
txtPrivateKey.Text = c.Pri;
txtPublishKey.Text = c.Pub;
} private void button1_Click(object sender, EventArgs e)
{
RSAKey keys = Encoder.CreateRSAKey();
this.txtPrivateKey.Text = keys.PrivateKey;
this.txtPublishKey.Text = keys.PublicKey;
} private void button2_Click(object sender, EventArgs e)
{
if (txtPrivateKey.Text == "")
{
MessageBox.Show("先生成密钥。");
return;
}
Cfg c = new Cfg();
c.Pri = txtPrivateKey.Text;
c.Pub = txtPublishKey.Text;
try
{
c.Save();
MessageBox.Show("保存成功。");
}
catch (Exception ex)
{
MessageBox.Show( "文件保存失败:"+ex.Message);
}
} private void button3_Click(object sender, EventArgs e)
{
Cfg c = new Cfg();
c.Read();
txtPrivateKey.Text=c.Pri;
txtPublishKey.Text=c.Pub;
}
}
}
加密解密算法,我没动哦
/**
* Author:张浩华
*/ using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
using System.IO;
namespace Encoder
{
public class Encoder
{
#region DES 加(解)密。(对称加密) /// <summary>
/// DES 加密(对称加密)。使用密钥将明文加密成密文
/// </summary>
/// <param name="code">明文</param>
/// <param name="sKey">密钥</param>
/// <returns>密文</returns>
public static string DESEncrypt(string code, string sKey)
{
/* 创建一个DES加密服务提供者 */
DESCryptoServiceProvider des = new DESCryptoServiceProvider(); /* 将要加密的内容转换成一个Byte数组 */
byte[] inputByteArray = Encoding.Default.GetBytes(code); /* 设置密钥和初始化向量 */
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey); /* 创建一个内存流对象 */
MemoryStream ms = new MemoryStream(); /* 创建一个加密流对象 */
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write); /* 将要加密的文本写到加密流中 */
cs.Write(inputByteArray, 0, inputByteArray.Length); /* 更新缓冲 */
cs.FlushFinalBlock(); /* 获取加密过的文本 */
StringBuilder ret = new StringBuilder();
foreach (byte b in ms.ToArray())
{
ret.AppendFormat("{0:X2}", b);
}
/* 释放资源 */
cs.Close();
ms.Close(); /* 返回结果 */
return ret.ToString();
} /// <summary>
/// DES 解密(对称加密)。使用密钥将密文解码成明文
/// </summary>
/// <param name="code">密文</param>
/// <param name="sKey">密钥</param>
/// <returns>明文</returns>
public static string DESDecrypt(string code, string sKey)
{
/* 创建一个DES加密服务提供者 */
DESCryptoServiceProvider des = new DESCryptoServiceProvider(); /* 将要解密的内容转换成一个Byte数组 */
byte[] inputByteArray = new byte[code.Length / 2]; for (int x = 0; x < code.Length / 2; x++)
{
int i = (Convert.ToInt32(code.Substring(x * 2, 2), 16));
inputByteArray[x] = (byte)i;
} /* 设置密钥和初始化向量 */
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey); /* 创建一个内存流对象 */
MemoryStream ms = new MemoryStream(); /* 创建一个加密流对象 */
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write); /* 将要解密的文本写到加密流中 */
cs.Write(inputByteArray, 0, inputByteArray.Length); /* 更新缓冲 */
cs.FlushFinalBlock(); /* 返回结果 */
return System.Text.Encoding.Default.GetString(ms.ToArray());
} #endregion #region RSA 加(解)密。(不对称加密)
/// <summary>
/// 创建一对 RSA 密钥(公钥&私钥)。
/// </summary>
/// <returns></returns>
public static RSAKey CreateRSAKey()
{
RSAKey rsaKey = new RSAKey(); //声明一个RSAKey对象 /* 创建一个RSA加密服务提供者 */
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsaKey.PrivateKey = rsa.ToXmlString(true); //创建私钥
rsaKey.PublicKey = rsa.ToXmlString(false); //创建公钥 return rsaKey; //返回结果
} /// <summary>
/// RSA 加密(不对称加密)。使用公钥将明文加密成密文
/// </summary>
/// <param name="code">明文</param>
/// <param name="key">公钥</param>
/// <returns>密文</returns>
public static string RSAEncrypt(string code, string key)
{
/* 将文本转换成byte数组 */
byte[] source = Encoding.Default.GetBytes(code);
byte[] ciphertext; //密文byte数组 /* 创建一个RSA加密服务提供者 */
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(key); //设置公钥
ciphertext = rsa.Encrypt(source, false); //加密,得到byte数组 /* 对字符数组进行转码 */
StringBuilder sb = new StringBuilder();
foreach (byte b in ciphertext)
{
sb.AppendFormat("{0:X2}", b);
}
return sb.ToString(); //返回结果
} /// <summary>
/// RSA 解密(不对称加密)。使用私钥将密文解密成明文
/// </summary>
/// <param name="code">密文</param>
/// <param name="key">私钥</param>
/// <returns>明文</returns>
public static string RSADecrypt(string code, string key)
{
/* 将文本转换成byte数组 */
byte[] ciphertext = new byte[code.Length / 2];
for (int x = 0; x < code.Length / 2; x++)
{
int i = (Convert.ToInt32(code.Substring(x * 2, 2), 16));
ciphertext[x] = (byte)i;
}
byte[] source; //原文byte数组 /* 创建一个RSA加密服务提供者 */
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(key); //设置私钥
source = rsa.Decrypt(ciphertext, false); //解密,得到byte数组 return Encoding.Default.GetString(source); //返回结果
} #endregion #region MD5 加密(散列码 Hash 加密)
/// <summary>
/// MD5 加密(散列码 Hash 加密)
/// </summary>
/// <param name="code">明文</param>
/// <returns>密文</returns>
public static string MD5Encrypt(string code)
{
/* 获取原文内容的byte数组 */
byte[] sourceCode = Encoding.Default.GetBytes(code);
byte[] targetCode; //声明用于获取目标内容的byte数组 /* 创建一个MD5加密服务提供者 */
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
targetCode = md5.ComputeHash(sourceCode); //执行加密 /* 对字符数组进行转码 */
StringBuilder sb = new StringBuilder();
foreach (byte b in targetCode)
{
sb.AppendFormat("{0:X2}", b);
} return sb.ToString();
}
#endregion
} /// <summary>
/// RSA 密钥。公钥&私钥
/// </summary>
public class RSAKey
{
public string PrivateKey { get; set; }
public string PublicKey { get; set; }
} }
版本说明
=====================================================
v0.2 2016年6月18日11:52:47
by 李工 qq 1222698
1、增加rsa的密钥生成,保存,读取
2、调整明文和密文的框位置。
3、增加关于,版本说明
4、有net3.5改成net2.0
5、感谢原作者的慷慨源代码
=====================================================
v0.1 原作者:张浩华
下载地址:http://www.cnblogs.com/zhhh/archive/2013/04/13/3018437.html
本版本下载:---------点这里哦----------
未实现功能:aes加密,base64加密
c#加密解密源码,md5、des、rsa的更多相关文章
- AES在线加密解密-附AES128,192,256,CBC,CFB,ECB,OFB,PCBC各种加密解密源码
一.AES在线加密解密:AES 128/192/256位CBC/CFB/ECB/OFB/PCBC在线加密解密|在线工具|在线助手|在线生成|在线制作 http://www.it399.com/aes ...
- des加密解密源码 C# key值问题
公司协议安全需求.需要对传输内容做des.md5加密. 因为是新人.刚交给我这个任务的时候有点眩晕.就开始在网上找各种des加密的内容.因为不懂以为需要把原理也搞明白,最后误了时间.把自己也搞糊涂了. ...
- php代码加密|PHP源码加密——实现方法
Encipher - PHP代码加密 | PHP源码加密下载地址:https://github.com/uniqid/encipher 该加密程序是用PHP代码写的,加密后代码无需任何附加扩展,无需安 ...
- NET实现RSA AES DES 字符串 加密解密以及SHA1 MD5加密
本文列举了 数据加密算法(Data Encryption Algorithm,DEA) 密码学中的高级加密标准(Advanced EncryptionStandard,AES)RSA公钥加密算法 ...
- 学习笔记: MD5/DES/RSA三类加密,SSL协议解析
1. 不对称可逆加密的 的2种用法 (1)保证信息不被篡改 (2) 保证信息只能被我看到 2. CA证书的基本原理 流程如下: 百度公司 向CA机构报备 持有者姓名, 有效期, 要发布的公钥 , 扩 ...
- hihttps教你在Wireshark中提取旁路https解密源码
大家好,我是hihttps,专注SSL web安全研究,今天本文就是教大家怎样从wireshark源码中,提取旁路https解密的源码,非常值得学习和商业应用. 一.旁路https解密条件 众所周知, ...
- java 加密工具类(MD5、RSA、AES等加密方式)
1.加密工具类encryption MD5加密 import org.apache.commons.codec.digest.DigestUtils; /** * MD5加密组件 * * @autho ...
- .Net(c#)加密解密之Aes和Des
.Net(c#)加密解密工具类: /// <summary> /// .Net加密解密帮助类 /// </summary> public class NetCryptoHelp ...
- openssl之aes加密(源码分析 AES_encrypt 与 AES_cbc_encrypt ,加密模式)
首先要了解AES加密是什么,以及几种加密模式的区别.之后才是编程.具体的编程案例,在下面的链接. openssl之aes加密(AES_cbc_encrypt 与 AES_encrypt 的编程案例) ...
随机推荐
- 解决微信公众平台IP白名单
微信公众平台,作为自媒体的旗舰级产品,越来越多的人已经投入它的怀抱.正如它的广告词所说:再小的个体,也有品牌 好吧,闲话不多说,今天要说的是它的IP白名单机制. 我们现在安装的大部分的电信的家庭级别的 ...
- 用lua+redis实现一个简单的计数器功能 (一)
首先安装环境 依赖环境有 luajit http://luajit.org ngx_devel_kit https://github.com/simpl/ngx_devel_kit echo-ngin ...
- ptrdiff_t 和 size_t
size_t和ptrdiff_t常常用来指示数组长度. size_t常用于表示数组的大小,可以一般的将他看为 typedef unsigned int size_t,实质是一个无符号整形.包含在头文件 ...
- 备忘录模式(Memento)
备忘录模式(Memento) 主要目的是保存一个对象的某个状态,以便在适当的时候恢复对象,个人觉得叫备份模式更形象些,通俗的讲下:假设有原始类A,A中有各种属性,A可以决定需要备份的属性,备忘录类B是 ...
- 项目实战7—Mysql实现企业级数据库主从复制架构实战
Mysql实现企业级数据库主从复制架构实战 环境背景:公司规模已经形成,用户数据已成为公司的核心命脉,一次老王一不小心把数据库文件删除,通过mysqldump备份策略恢复用了两个小时,在这两小时中,公 ...
- 利用spring,实现package下的类扫描
项目中需要用到包扫描的情况是很多的,一般是在项目初始化的时候,根据一些条件来对某个package下的类进行特殊处理.现在想实现的功能是,在一个filter或interceptor初始化的时候,扫描指定 ...
- 通过邮箱发送html报表
前言 需求是发送邮件时, 可以将报表正文贴到邮件里, 可以正常复制选中报表内容. 目前的做法是简单粗暴的转成了一张图片, 这样效果显然是很糟糕的. 今天看到邮箱里可以预览Word, Excel, F1 ...
- Qwt安装(转)
======= 安装 ======= Qwt使用qmake编译所有的组件和示例. qmake是Qt发布中的一部分. qmake读取工程文件,工程文件包含了如何工程选项和如何编译特定工程的规则.一个工程 ...
- C++ queue deque
queue queue 队,一种先进先出的数据结构,c++ stl里也叫容器适配器,它是以deque 或list为基础的一种数据结构 queue的相关操作 queue<int deque< ...
- 【Win 10 应用开发】MIDI 音乐合成——乐理篇
针对 MIDI 音乐的 API ,其实在 Win 8.1 的时候就出现.在UWP中采用了新的驱动模式,MIDI 消息传递更加高效. 首先得说明的是,UWP 的 MIDI 相关 API 不是针对 MID ...