首页
关于
Search
1
Fastadmin 美化后台样式
310,891 阅读
2
关于破解移动宽带光猫 型号: GS3101 超级管理员密码
26,918 阅读
3
给Thinkphp3用上composer
19,964 阅读
4
Wallpaper完美壁纸修复天气bug(无需申请API)
19,748 阅读
5
PECL无法安装时手动编译安装PHP扩展
19,606 阅读
Linux
Mysql
PHP
Nginx
归档
Android
Python
IOS
浴室沉思
C++
CCF CSP认证
Windows
C#
前端
登录
Search
标签搜索
php
git
Windows
wkhtmltopdf
短信
defense
API
Google Photos
python
wkhtmltoimage
网页快照
linux
ssr
https
mail
sms
小程序
封装
ComoBox
拼多多
Guooo
累计撰写
126
篇文章
累计收到
81
条评论
首页
栏目
Linux
Mysql
PHP
Nginx
归档
Android
Python
IOS
浴室沉思
C++
CCF CSP认证
Windows
C#
前端
页面
关于
搜索到
6
篇与
的结果
2018-03-23
C#手动绑定ComboBox数据
一般手动添加ComboBox数据有很多种方法,可以直接添加Item,也可以通过数据绑定Value和Display。直接添加Item无法设置下拉框的值,所以我使用绑定ComboBox数据源的Datatble方式直接通过二维数组String自动转换绑定到ComboBox // 调用方法 string[][] Sort_arr = new string[2][]; Sort_arr[0] = new string[] {"0","1","2" }; Sort_arr[1] = new string[] { "综合排序" , "销量排序", "新品排序" }; StrArrToCbx(Sort_arr,CbxSort);// 传入数组和实例化的ComboBox即可自动完成绑定绑定方法 public void StrArrToCbx(string[][] strArr,ComboBox combo,string str1="id",string str2="name") { DataTable dt_inner = new DataTable(); dt_inner.Columns.Add(new DataColumn(str1)); dt_inner.Columns.Add(new DataColumn(str2)); if (strArr.Length > 0) { for (int d = 0; d < strArr[0].Length; d++) { DataRow dr_inner = dt_inner.NewRow(); dr_inner[str1] = strArr[0][d]; dr_inner[str2] = strArr[1][d]; dt_inner.Rows.Add(dr_inner); } } combo.DataSource = dt_inner; combo.ValueMember = str1; combo.DisplayMember = str2; combo.SelectedIndex = 0; //return dt_inner; }
2018年03月23日
2,151 阅读
0 评论
0 点赞
2018-01-11
C#和Excel
头一次知道Excl在一个企业/个人的报表管理里面这么重要以前做东西,公司要求导出成 txt 或者 csv 格式就可以了,他们说导出成Excl需要电脑安装Office,而且速度很慢,比较麻烦,不推荐。当时由于赶进度,我信了,后来在网上搜了一下才发现,谬误源于流言。很多人说Excl操作速度很慢,但其实只是指用官方库的一种方法,常用的Excl操作方法有三种。这里借鉴一下1. OleDb: 这种方式是把整个Excel文件当做一个数据源来进行数据的读取操作。 优点:实现方式简单,读取速度快; 缺点:读取Excel数据的过程不太灵活,对内存的占用比较高,当数据量变的很大时,容易由于内存空间不足导致内存溢出异常。(不过貌似对于今天电脑的硬件配置来说,内存问题不大) 2. Com组件 这种方式是通过Com组件 Microsoft.Office.Interop.Excel.dll实现Excel文件的操作。 优点:读取Excel数据非常灵活,可以实现Excel具有的各种数据处理功能; 缺点:对数据的访问时基于单元格方式实现的,所以读写数据较慢,特别是当数据量较大时,访问效率问题更为突出。另一点是要求本机安装了Microsoft Office组件。 3. NPOI 这种方式是通过NPOI库实现Excel文件操作,可以在没有安装微软Office的情况下使用。 优点:读取Excel数据速度较快,操作方式灵活; 缺点:试了再说!其中oleDb我没有用过,不评价。大家常说的操作速度慢,指的是使用官方的 COM组件。优点并在我看来并不是很重要,缺点很明显:慢!需要安装Office、CPU和内存占用也比较高(解析时I5CPU占用20%左右)。我只是简单地读取20多行数据,就大概耗费了10s左右。排除是第一次初始化耗时的原因,读取第二次耗时大约5s,也就是每秒4、5条左右此时整个程序内存占用100M左右当时我就傻了,这要是 10W 条数据,不就凉凉了?赶紧。。怎么办,多线程,写算法,数据优化?噼里啪啦写了个双线程读取,速度提了一倍,然后。。。emmm,哈!开心,10W条数据只需要一个多小时就可以读完啦!!!食屎咩你此路不通,换个解决办法。网上搜了一下,发现了NPOI这个第三方库,不需要安装Office我先跑去NPOI官网下载了他家的压缩包v2.2.1版本,里面分 .Net 2.0和.Net 4.0 各有5个dll文件,我也没管那么多,全部引用到项目里。一顿操作后。。。看了眼结果丢雷楼谋速度翻了30多倍!!还是单线程然后我又试了下第二次读取...第三次...果然是第三方酷所以我就说,为什么我当初在网上找了很久都没有找到微软COM的dll现在老板给的任务超额完成了把速度一天翻两倍假装自己在忙着优化就可以多轻松几天了也不用写多线程了所以我现在为什么还要找微软的dll?呸
2018年01月11日
1,621 阅读
0 评论
0 点赞
2018-01-09
C#的网络编程
获取指定Url的所有Cookie(包含HttpOnly的) /// <summary> /// WinInet.dll wrapper /// 获取所有的Cookie(包括HttpOnly) /// </summary> internal static class CookieReader { private const int INTERNET_COOKIE_HTTPONLY = 0x00002000; [DllImport("wininet.dll", SetLastError = true)] private static extern bool InternetGetCookieEx( string url, string cookieName, StringBuilder cookieData, ref int size, int flags, IntPtr pReserved); public static string GetCookie(string url) { int size = 512; StringBuilder sb = new StringBuilder(size); if (!InternetGetCookieEx(url, null, sb, ref size, INTERNET_COOKIE_HTTPONLY, IntPtr.Zero)) { if (size < 0) { return null; } sb = new StringBuilder(size); if (!InternetGetCookieEx(url, null, sb, ref size, INTERNET_COOKIE_HTTPONLY, IntPtr.Zero)) { return null; } } return sb.ToString(); } }发送Get请求发送Get请求(不带Cookie) /// <summary> /// 通过GET方式发送数据(不带Cookie) /// </summary> /// <param name="Url">url</param> public string SendDataByGET(string Url) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url/* + (postDataStr == "" ? "" : "?") + postDataStr*/); string retString = ""; try { request.Method = "GET"; //request.ContentType = "text/html;charset=UTF-8"; request.ContentType = "application/x-www-form-urlencoded"; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream myResponseStream = response.GetResponseStream(); StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); retString = myStreamReader.ReadToEnd(); myStreamReader.Close(); myResponseStream.Close(); } catch (Exception) { MessageBox.Show("网络请求异常!"); } return retString; }发送Get请求(带Cookie) /// <summary> /// 通过GET方式发送数据(带Cookie) /// </summary> /// <param name="Url">url</param> /// <param name="postDataStr">GET数据</param> /// <param name="cookie">Cookie容器</param> /// <returns>返回的内容</returns> public string SendDataByGET(string Url,/* string postDataStr, */ref CookieContainer cookie) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url/* + (postDataStr == "" ? "" : "?") + postDataStr*/); try { if (cookie.Count == 0) { request.CookieContainer = new CookieContainer(); cookie = request.CookieContainer; } else { request.CookieContainer = cookie; } } catch (Exception ex) { MessageBox.Show("请先获取Cookie!"); MessageBox.Show(ex.Message); return ""; } string retString = ""; try { request.Method = "GET"; //request.ContentType = "text/html;charset=UTF-8"; request.ContentType = "application/x-www-form-urlencoded"; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream myResponseStream = response.GetResponseStream(); StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); retString = myStreamReader.ReadToEnd(); myStreamReader.Close(); myResponseStream.Close(); } catch (Exception) { MessageBox.Show("网络请求异常!"); } return retString; } 通过Post方式发送请求通过Post方式发送请求(不带Cookie) /// <summary> /// 通过Post方式发送数据 /// </summary> /// <param name="Url">url</param> /// <param name="PostData">Post数据,如string.Format("userid={0}&password={1}", "guest", "123456")</param> /// <param name="UTF8">是否使用UTF8编码</param> /// <returns>返回的内容</returns> public string SendDataByPost(string Url, string PostData, bool UTF8 = false) { byte[] data; if (UTF8) { data = Encoding.UTF8.GetBytes(PostData); } else { data = Encoding.Default.GetBytes(PostData); } HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); request.Method = "POST"; //request.KeepAlive = true; request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8"; request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"; request.ContentLength = data.Length; Stream newStream = request.GetRequestStream(); // Send the data. newStream.Write(data, 0, data.Length); newStream.Close(); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream myResponseStream = response.GetResponseStream(); StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); string retString = myStreamReader.ReadToEnd(); myStreamReader.Close(); myResponseStream.Close(); return retString; }通过Post方式发送请求(带Cookie) /// <summary> /// 通过Post方式发送数据(带Cookie) /// </summary> /// <param name="Url">url</param> /// <param name="PostData">Post数据,如string.Format("userid={0}&password={1}", "guest", "123456")</param> /// <param name="cookie">Cookie容器</param> /// <returns>返回的内容</returns> public string SendDataByPost(string Url, string PostData, ref CookieContainer cookie) { byte[] data = Encoding.Default.GetBytes(PostData); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); if (cookie.Count == 0) { request.CookieContainer = new CookieContainer(); cookie = request.CookieContainer; } else { request.CookieContainer = cookie; } string retString = ""; try { request.Method = "POST"; //request.KeepAlive = true; request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8"; request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"; request.ContentLength = data.Length; Stream newStream = request.GetRequestStream(); // Send the data. newStream.Write(data, 0, data.Length); newStream.Close(); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream myResponseStream = response.GetResponseStream(); StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); retString = myStreamReader.ReadToEnd(); myStreamReader.Close(); myResponseStream.Close(); } catch (Exception) { MessageBox.Show("网络请求异常!"); } return retString; }
2018年01月09日
1,928 阅读
0 评论
0 点赞
2017-12-20
Winform中一些常用方法
持续更新吧向DataSet中添加多个DataTable// 新建一个DataSet DataSet ds = new DataSet(); // 获取第一个DataTable中的数据 DataTable dt_info = GetUserInfo(); dt_info.TableName = "info"; // 给表重命名 ds.Tables.Add(dt_info.Copy()); // 获取第二个DataTable中的数据 DataTable dt_Perm = GetUserPerm(); dt_Perm.TableName = "perm"; // 给表重命名 ds.Tables.Add(dt_Perm.Copy()); // 得到的DataSet return ds;关于这个有一个链接讲的特别好,可以看一下清空DataGridViewC# DataGridView控件绑定数据后清空数据在清除DataGridview的数据时:1.DataSource为NULL(DataGridView.DataSource= null;)这样会将DataGridView的列也删掉。2.用DataGridview.Rows.Clear(); 提示“不能清除此列表”!!!!!以上都不是想要的结果。想要满足保持原有的列,就是重新绑定之前的DataTable,然后清除DataTable中的数据,如下:DataTable dt = (DataTable)dataGridView1.DataSource; dt.Rows.Clear(); dataGridView1.DataSource = dt; 问题解决。下拉框绑定数据(DataTable)可以用其属性中的Value、Index等保存数据// 下拉框绑定 DataTable dt_group = GetUserGroup(); if (dt_group.Rows.Count > 0) { ComboBox.DisplayMember = "Name"; // 要展示的字段 ComboBox.ValueMember = "id"; // 对应的值字段,一般为id ComboBox.DataSource = dt_group; // 数据源 //ComboBox.SelectedIndex = -1; // 设置所选项,-1为不选中 //ComboBox.Items.Clear(); // 清空ComboBox }查询DataTable中的字段DataTable中自带了Select方法,返回值为DataRow比如我想查询dt中name列为guo的那一行,用这种方法dt.Select("name='guo'");其中name为字段,等号后面是要查询的值,需要用单引号括起来。提取字符串中的数字int num = System.Text.RegularExpressions.Regex.Replace(str, @"[^0-9]+", "");控制台 // 控制台打印DataSet public void PrintDataSet(DataSet ds) { for(int j = 0; j < ds.Tables.Count; j++) { Console.WriteLine("第 "+ j + " 张表 " + ds.Tables[j].TableName +" :"); for (int q = 0; q < ds.Tables[j].Rows.Count; q++) { for (int i = 0; i < ds.Tables[j].Columns.Count; i++) { Console.Write(ds.Tables[j].Rows[q][i].ToString() + " "); } Console.WriteLine(); } } }设置TextBox只能输入数字要达到这个效果的方法有很多,都可以亲自试一下// 这种方法需要创建TextBox的 **KeyPress** 方法,如果不是数字会有声音提示,且不会输入到TextBox中 private void TextBox_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == 0x20) e.KeyChar = (char)0; //禁止空格键 if ((e.KeyChar == 0x2D) && (((TextBox)sender).Text.Length == 0)) return; //处理负数 if (e.KeyChar > 0x20) { try { double.Parse(((TextBox)sender).Text + e.KeyChar.ToString()); } catch { e.KeyChar = (char)0; //处理非法字符 } } }或者也可以禁止输入空格private void TextBox_KeyPress(object sender, KeyPressEventArgs e) { if (" ".IndexOf(e.KeyChar) != -1) { e.Handled = true; } }
2017年12月20日
1,519 阅读
0 评论
0 点赞
2017-12-14
C#的一个Mysql助手类
一个在C#中使用Mysql的通用DBHelper,以后可能还会用到不过首先需要下载Mysql.Data.dll这个官方库找不到的话可以直接在这里下载下载地址备用下载地址注意需要改一下命名空间(namespace)代码:using System; using System.Collections.Generic; using System.Data; using System.Windows.Forms; using MySql.Data.MySqlClient; namespace DataBase { class DBHelper { // 数据库配置 // 编码设置utf8,防止中文乱码 private static string _constr = "server=localhost;uid=root;pwd=password;database=database;Charset=utf8"; // 数据库连接 private MySqlConnection conn; // 返回数据库连接 private MySqlConnection GetConnection() { conn = new MySqlConnection(_constr); return conn; } // 初始化连接并打开 public bool Init() { try { conn = GetConnection(); conn.Open(); return true; } catch (Exception e) { //记录日志,退出 MessageBox.Show(e.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } } // 返回一个适配器 public MySqlDataAdapter DataAdp(string strSQL) { MySqlDataAdapter dap = new MySqlDataAdapter(strSQL, conn); return dap; } // 执行查询语句 // 返回DataSet public DataSet Query(string strSQL,string TableName = null) { DataSet ds = new DataSet(); try { MySqlDataAdapter dap = new MySqlDataAdapter(strSQL, conn); if(TableName != null) dap.Fill(ds,TableName); else dap.Fill(ds); //MySqlCommandBuilder sqlCommandBuilder = new MySqlCommandBuilder(dap); } catch (Exception e) { //记录日志,并返回空 MessageBox.Show(strSQL + "\n" + e.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); return null; } return ds; } // 执行单条增删改语句 // 返回受影响的行数 public int Execute(string strSQL) { MySqlCommand cmd = new MySqlCommand(strSQL, conn); try { int rows = cmd.ExecuteNonQuery(); return rows; } catch (Exception e) { MessageBox.Show(e.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); return 0; } } // 通过事务执行增删改语句 // 返回受影响的行数 // 发生回滚返回-1 public int ExecuteTransaction(List<string> strSQLs) { MySqlCommand cmd = new MySqlCommand("", conn); int rows = 0; MySqlTransaction tran = conn.BeginTransaction(); cmd.Transaction = tran; try { foreach (var n in strSQLs) { cmd.CommandText = n; rows += cmd.ExecuteNonQuery(); } tran.Commit(); return rows; } catch (Exception e) { MessageBox.Show(e.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); tran.Rollback(); return -1; } } // 关闭连接 public void close() { conn.Close(); } } }
2017年12月14日
1,858 阅读
0 评论
0 点赞
2017-12-14
C#的一个常用加密方式类
注意需要改一下命名空间(namespace)using System; using System.IO; using System.Text; using System.Globalization; using System.Collections.Generic; using System.Security.Cryptography; namespace WebForm { /// <summary> /// 密码加密解密操作相关类 /// </summary> internal static class PassWordHelper { #region MD5 加密 /// <summary> /// MD5加密 /// </summary> public static string Md532(this string source) { if (string.IsNullOrEmpty(source)) return null; var encoding = Encoding.UTF8; MD5 md5 = MD5.Create(); return HashAlgorithmBase(md5, source, encoding); } /// <summary> /// 加盐MD5加密 /// </summary> public static string Md532Salt(this string source, string salt) { return string.IsNullOrEmpty(salt) ? source.Md532() : (source + "『" + salt + "』").Md532(); } #endregion #region SHA 加密 /// <summary> /// SHA1 加密 /// </summary> public static string Sha1(this string source) { if (string.IsNullOrEmpty(source)) return null; var encoding = Encoding.UTF8; SHA1 sha1 = new SHA1CryptoServiceProvider(); return HashAlgorithmBase(sha1, source, encoding); } /// <summary> /// SHA256 加密 /// </summary> public static string Sha256(this string source) { if (string.IsNullOrEmpty(source)) return null; var encoding = Encoding.UTF8; SHA256 sha256 = new SHA256Managed(); return HashAlgorithmBase(sha256, source, encoding); } /// <summary> /// SHA512 加密 /// </summary> public static string Sha512(this string source) { if (string.IsNullOrEmpty(source)) return null; var encoding = Encoding.UTF8; SHA512 sha512 = new SHA512Managed(); return HashAlgorithmBase(sha512, source, encoding); } #endregion #region HMAC 加密 /// <summary> /// HmacSha1 加密 /// </summary> public static string HmacSha1(this string source, string keyVal) { if (string.IsNullOrEmpty(source)) return null; var encoding = Encoding.UTF8; byte[] keyStr = encoding.GetBytes(keyVal); HMACSHA1 hmacSha1 = new HMACSHA1(keyStr); return HashAlgorithmBase(hmacSha1, source, encoding); } /// <summary> /// HmacSha256 加密 /// </summary> public static string HmacSha256(this string source, string keyVal) { if (string.IsNullOrEmpty(source)) return null; var encoding = Encoding.UTF8; byte[] keyStr = encoding.GetBytes(keyVal); HMACSHA256 hmacSha256 = new HMACSHA256(keyStr); return HashAlgorithmBase(hmacSha256, source, encoding); } /// <summary> /// HmacSha384 加密 /// </summary> public static string HmacSha384(this string source, string keyVal) { if (string.IsNullOrEmpty(source)) return null; var encoding = Encoding.UTF8; byte[] keyStr = encoding.GetBytes(keyVal); HMACSHA384 hmacSha384 = new HMACSHA384(keyStr); return HashAlgorithmBase(hmacSha384, source, encoding); } /// <summary> /// HmacSha512 加密 /// </summary> public static string HmacSha512(this string source, string keyVal) { if (string.IsNullOrEmpty(source)) return null; var encoding = Encoding.UTF8; byte[] keyStr = encoding.GetBytes(keyVal); HMACSHA512 hmacSha512 = new HMACSHA512(keyStr); return HashAlgorithmBase(hmacSha512, source, encoding); } /// <summary> /// HmacMd5 加密 /// </summary> public static string HmacMd5(this string source, string keyVal) { if (string.IsNullOrEmpty(source)) return null; var encoding = Encoding.UTF8; byte[] keyStr = encoding.GetBytes(keyVal); HMACMD5 hmacMd5 = new HMACMD5(keyStr); return HashAlgorithmBase(hmacMd5, source, encoding); } /// <summary> /// HmacRipeMd160 加密 /// </summary> public static string HmacRipeMd160(this string source, string keyVal) { if (string.IsNullOrEmpty(source)) return null; var encoding = Encoding.UTF8; byte[] keyStr = encoding.GetBytes(keyVal); HMACRIPEMD160 hmacRipeMd160 = new HMACRIPEMD160(keyStr); return HashAlgorithmBase(hmacRipeMd160, source, encoding); } #endregion #region AES 加密解密 /// <summary> /// AES加密 /// </summary> /// <param name="source">待加密字段</param> /// <param name="keyVal">密钥值</param> /// <param name="ivVal">加密辅助向量</param> /// <returns></returns> public static string AesStr(this string source, string keyVal, string ivVal) { var encoding = Encoding.UTF8; byte[] btKey = keyVal.FormatByte(encoding); byte[] btIv = ivVal.FormatByte(encoding); byte[] byteArray = encoding.GetBytes(source); string encrypt; Rijndael aes = Rijndael.Create(); using (MemoryStream mStream = new MemoryStream()) { using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateEncryptor(btKey, btIv), CryptoStreamMode.Write)) { cStream.Write(byteArray, 0, byteArray.Length); cStream.FlushFinalBlock(); encrypt = Convert.ToBase64String(mStream.ToArray()); } } aes.Clear(); return encrypt; } /// <summary> /// AES解密 /// </summary> /// <param name="source">待加密字段</param> /// <param name="keyVal">密钥值</param> /// <param name="ivVal">加密辅助向量</param> /// <returns></returns> public static string UnAesStr(this string source, string keyVal, string ivVal) { var encoding = Encoding.UTF8; byte[] btKey = keyVal.FormatByte(encoding); byte[] btIv = ivVal.FormatByte(encoding); byte[] byteArray = Convert.FromBase64String(source); string decrypt; Rijndael aes = Rijndael.Create(); using (MemoryStream mStream = new MemoryStream()) { using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateDecryptor(btKey, btIv), CryptoStreamMode.Write)) { cStream.Write(byteArray, 0, byteArray.Length); cStream.FlushFinalBlock(); decrypt = encoding.GetString(mStream.ToArray()); } } aes.Clear(); return decrypt; } /// <summary> /// AES Byte类型 加密 /// </summary> /// <param name="data">待加密明文</param> /// <param name="keyVal">密钥值</param> /// <param name="ivVal">加密辅助向量</param> /// <returns></returns> public static byte[] AesByte(this byte[] data, string keyVal, string ivVal) { byte[] bKey = new byte[32]; Array.Copy(Encoding.UTF8.GetBytes(keyVal.PadRight(bKey.Length)), bKey, bKey.Length); byte[] bVector = new byte[16]; Array.Copy(Encoding.UTF8.GetBytes(ivVal.PadRight(bVector.Length)), bVector, bVector.Length); byte[] cryptograph; Rijndael aes = Rijndael.Create(); try { using (MemoryStream mStream = new MemoryStream()) { using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateEncryptor(bKey, bVector), CryptoStreamMode.Write)) { cStream.Write(data, 0, data.Length); cStream.FlushFinalBlock(); cryptograph = mStream.ToArray(); } } } catch { cryptograph = null; } return cryptograph; } /// <summary> /// AES Byte类型 解密 /// </summary> /// <param name="data">待解密明文</param> /// <param name="keyVal">密钥值</param> /// <param name="ivVal">加密辅助向量</param> /// <returns></returns> public static byte[] UnAesByte(this byte[] data, string keyVal, string ivVal) { byte[] bKey = new byte[32]; Array.Copy(Encoding.UTF8.GetBytes(keyVal.PadRight(bKey.Length)), bKey, bKey.Length); byte[] bVector = new byte[16]; Array.Copy(Encoding.UTF8.GetBytes(ivVal.PadRight(bVector.Length)), bVector, bVector.Length); byte[] original; Rijndael aes = Rijndael.Create(); try { using (MemoryStream mStream = new MemoryStream(data)) { using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateDecryptor(bKey, bVector), CryptoStreamMode.Read)) { using (MemoryStream originalMemory = new MemoryStream()) { byte[] buffer = new byte[1024]; int readBytes; while ((readBytes = cStream.Read(buffer, 0, buffer.Length)) > 0) { originalMemory.Write(buffer, 0, readBytes); } original = originalMemory.ToArray(); } } } } catch { original = null; } return original; } #endregion #region RSA 加密解密 //密钥对,请配合密钥生成工具使用『 [url]http://download.csdn.net/detail/downiis6/9464639[/url] 』 private const string PublicRsaKey = @"pubKey"; private const string PrivateRsaKey = @"priKey"; /// <summary> /// RSA 加密 /// </summary> public static string Rsa(this string source) { RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); rsa.FromXmlString(PublicRsaKey); var cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(source), true); return Convert.ToBase64String(cipherbytes); } /// <summary> /// RSA解密 /// </summary> public static string UnRsa(this string source) { RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); rsa.FromXmlString(PrivateRsaKey); var cipherbytes = rsa.Decrypt(Convert.FromBase64String(source), true); return Encoding.UTF8.GetString(cipherbytes); } #endregion #region DES 加密解密 /// <summary> /// DES 加密 /// </summary> public static string Des(this string source, string keyVal, string ivVal) { try { byte[] data = Encoding.UTF8.GetBytes(source); var des = new DESCryptoServiceProvider { Key = Encoding.ASCII.GetBytes(keyVal.Length > 8 ? keyVal.Substring(0, 8) : keyVal), IV = Encoding.ASCII.GetBytes(ivVal.Length > 8 ? ivVal.Substring(0, 8) : ivVal) }; var desencrypt = des.CreateEncryptor(); byte[] result = desencrypt.TransformFinalBlock(data, 0, data.Length); return BitConverter.ToString(result); } catch { return "转换出错!"; } } /// <summary> /// DES 解密 /// </summary> public static string UnDes(this string source, string keyVal, string ivVal) { try { string[] sInput = source.Split("-".ToCharArray()); byte[] data = new byte[sInput.Length]; for (int i = 0; i < sInput.Length; i++) { data[i] = byte.Parse(sInput[i], NumberStyles.HexNumber); } var des = new DESCryptoServiceProvider { Key = Encoding.ASCII.GetBytes(keyVal.Length > 8 ? keyVal.Substring(0, 8) : keyVal), IV = Encoding.ASCII.GetBytes(ivVal.Length > 8 ? ivVal.Substring(0, 8) : ivVal) }; var desencrypt = des.CreateDecryptor(); byte[] result = desencrypt.TransformFinalBlock(data, 0, data.Length); return Encoding.UTF8.GetString(result); } catch { return "解密出错!"; } } #endregion #region TripleDES 加密解密 /// <summary> /// DES3 加密 /// </summary> public static string Des3(this string source, string keyVal) { try { TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider { Key = keyVal.FormatByte(Encoding.UTF8), Mode = CipherMode.ECB, Padding = PaddingMode.PKCS7 }; using (MemoryStream ms = new MemoryStream()) { byte[] btArray = Encoding.UTF8.GetBytes(source); try { using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write)) { cs.Write(btArray, 0, btArray.Length); cs.FlushFinalBlock(); } return ms.ToArray().Bytes2Str(); } catch { return source; } } } catch { return "TripleDES加密出现错误"; } } /// <summary> /// DES3 解密 /// </summary> public static string UnDes3(this string source, string keyVal) { try { byte[] byArray = source.Str2Bytes(); TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider { Key = keyVal.FormatByte(Encoding.UTF8), Mode = CipherMode.ECB, Padding = PaddingMode.PKCS7 }; using (MemoryStream ms = new MemoryStream()) { using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write)) { cs.Write(byArray, 0, byArray.Length); cs.FlushFinalBlock(); cs.Close(); ms.Close(); return Encoding.UTF8.GetString(ms.ToArray()); } } } catch { return "TripleDES解密出现错误"; } } #endregion #region BASE64 加密解密 /// <summary> /// BASE64 加密 /// </summary> /// <param name="source">待加密字段</param> /// <returns></returns> public static string Base64(this string source) { var btArray = Encoding.UTF8.GetBytes(source); return Convert.ToBase64String(btArray, 0, btArray.Length); } /// <summary> /// BASE64 解密 /// </summary> /// <param name="source">待解密字段</param> /// <returns></returns> public static string UnBase64(this string source) { var btArray = Convert.FromBase64String(source); return Encoding.UTF8.GetString(btArray); } #endregion #region 内部方法 /// <summary> /// 转成数组 /// </summary> private static byte[] Str2Bytes(this string source) { source = source.Replace(" ", ""); byte[] buffer = new byte[source.Length / 2]; for (int i = 0; i < source.Length; i += 2) buffer[i / 2] = Convert.ToByte(source.Substring(i, 2), 16); return buffer; } /// <summary> /// 转换成字符串 /// </summary> private static string Bytes2Str(this IEnumerable<byte> source, string formatStr = "{0:X2}") { StringBuilder pwd = new StringBuilder(); foreach (byte btStr in source) { pwd.AppendFormat(formatStr, btStr); } return pwd.ToString(); } private static byte[] FormatByte(this string strVal, Encoding encoding) { return encoding.GetBytes(strVal.Base64().Substring(0, 16).ToUpper()); } /// <summary> /// HashAlgorithm 加密统一方法 /// </summary> public static string HashAlgorithmBase(HashAlgorithm hashAlgorithmObj, string source, Encoding encoding) { byte[] btStr = encoding.GetBytes(source); byte[] hashStr = hashAlgorithmObj.ComputeHash(btStr); return hashStr.Bytes2Str(); } #endregion } }
2017年12月14日
1,553 阅读
0 评论
0 点赞