MD5加密

将字符串进行加密,无法解密。网上的解密方式也都是在库里找,找不到也没有。

 1 protected void Page_Load(object sender, EventArgs e)
2 {
3 string s = "123";
4 Response.Write(getMd5(s));
5 }
6 public string getMd5(string str)
7 {
8 MD5 md5 = MD5.Create();//MD5抽象类无法实例化 实例化该方法
9 byte[] buffer = Encoding.Default.GetBytes(str); //将字符串转换为字节数组
10 byte[] mdbuffer = md5.ComputeHash(buffer); //调用ComputeHash方法把数组传进去
11 //将字节数组中每个元素ToString();
12 StringBuilder result = new StringBuilder();
13 for (int i = 0; i < mdbuffer.Length; i++)
14 {
15 result.Append(mdbuffer[i].ToString("x2")); //ToString得到十进制字符串 ToString("x")十六进制字符串 ToString("x2")对齐
16 }
17 return result.ToString();
18 }

进制

表示某一位置上的数运算时是逢X进一位。二进制就是逢二进一, 十进制是逢十进一,十六进制是逢十六进一,以此类推.

so:二进制001010101只有0和1计算机中的数据都是二进制表示,四进制以0、1、2、3四个数字表示任何实数。十进制0~9数字组成,十六进制0~9以及ABCEDF组成(表示十进制数)10~15

ToString的特殊方法

时间:now.ToString("yyyy-MM-dd hh:mm:ss") 年-月-日 时:分:秒 具体可以自定单独写f y m d t 意义不同前者都可实现

字符型转换:int.ToString("n"); 640,000.00; int.ToString("C"); ¥640,000.00; .ToString("x");16进制

Directory类

用来操作文件夹的

 1 Directory.CreateDirectory("d:/ccc/cc"); //创建文件夹
2
3 Directory.Delete("d:/ccc",true); //true删除非空文件夹
4
5 Directory.Move(@"d:/ccc", @"d:/cccc"); //剪切操作 源目录没了 必须同一卷轴d盘
6
7 string[] s = Directory.GetFiles(@"D:\项目\Web\Images\shiji"); //获得文件夹目录下所有文件全路径
8
9 string[] s = Directory.GetFiles(@"D:\项目\Web\Images\shiji","*.jpg"); //获得文件夹目录下指定后缀名文件全路径
10
11 string[] s = Directory.GetDirectories(@"D:\项目\Web\Images"); //获得文件夹目录下的文件夹的全路径
12
13 Directory.Exists(@"D:\项目\Web\Images") //是否存在某文件夹

进程

我们可以把计算机中每一个运行的应用程序当作是一个进程

 1 ///获得当前程序中正在运行的进程
2 Process[] pros = Process.GetProcesses();
3 foreach (var item in pros)
4 {
    //item.Kill(); //关闭所有进程.
    //item.ProcessName; //进程名
5 Console.Write(item.ToString());
6 }
7 //通过进程打开一些程序
8 Process.Start("calc"); //打开计算器
9 Process.Start("notepad"); //打开记事本
10 //打开指定文件
11 ProcessStartInfo pro = new ProcessStartInfo(@"d:\11.txt");
12 Process pr = new Process();
13 pr.StartInfo = pro;
14 pr.Start();

线程

每一个进程是由多个线程组成的。

单线程:让程序做多件事时,会引发卡死 假死状态。

多线程:让一个程序同时处理多个事情,后台运行程序,提高程序的运行效率。

前台线程:只有所有的前台线程都关闭才能完成程序关闭。(winform多窗口时)

后台线程:只要所有的前台线程结束,后台线程自动结束。

 1 //实例化Thread类,并传入一个指向线程所要运行的方法。(这时线程已经产生,但还没有运行)
2 //调用Thread类的Start方法,标记线程可以被CPU执行了,但具体执行事件由CPU决定。
3 Thread th = new Thread(Test); //创建一个线程去执行这个方法。
4 th.IsBackground = true; //将线程设置为后台线程,前台关闭后 线程结束。
5 th.Start(); //标记准备就绪,可以随意被执行,具体什么时候执行由CPU决定。
6 //在.net下是不允许跨线程访问的。
7 //有时候需要手动释放线程 关闭时 判断线程是否关闭
8 if (th != null)
9 {
10 th.Abort(); //结束这个线程 不能再Start()
11 }
12 Thread.Sleep(3000); //睡眠3秒后执行
13 //线程执行带参数方法
14 Thread.Start("123"); object类型参数 在start后括号写参数

多用于大量数据时,多分一个线程去搜索数据,然后存储到缓存里,页面再用异步获取缓存中的数据。

GDI+

是一种绘图装置接口,可以用来绘制图片。

画直线

Graphics g = this.CreateGraphics(); //创建GDI对象
Pen pen = new Pen(Brushes.Yellow); //创建画笔
Point p1 = new Point(30, 50); //创建两个点
Point p2 = new Point(250, 250);
g.DrawLine(pen, p1, p2);

画验证码

 1 /// <summary>
2 /// 字符
3 /// </summary>
4 /// <param name="len">几位</param>
5 /// <returns></returns>
6 public static string validation(int cd)
7 {
8 var ran = new Random();
9 int num, tem;
10 string rtuStr = "";
11 for (int i = 0; i < cd; i++)
12 {
13 num = ran.Next();
14 if (i % 2 == 1)
15 tem = num % 10 + '0'; //数字
16 else
17 tem = num % 26 + 'A'; //字母
18 rtuStr += Convert.ToChar(tem).ToString();
19 }
20 //写入cookie
21 HttpCookie cookie = new HttpCookie("check");
22 cookie.Value = rtuStr.ToLower();
23 HttpContext.Current.Response.Cookies.Add(cookie);
24 return rtuStr;
25 }
26
27 /// <summary>
28 /// 生成图像
29 /// </summary>
30 /// <param name="check">字符</param>
31 public static byte[] drawImg(string check)
32 {
33 Bitmap img = new Bitmap(90, 34);
34 var ht = Graphics.FromImage(img);
35 ht.Clear(Color.White);
36 ht.DrawLine(new Pen(Color.SpringGreen), 1, 1, 90, 34);
37 Font font = new Font("微软雅黑", 20, FontStyle.Bold);
38 var jianbian = new LinearGradientBrush(new Rectangle(0, 0, img.Width, img.Height), Color.Teal, Color.Snow, 2f, true);
39 ht.DrawString(check, font, jianbian, 0, 0);
40 ht.DrawRectangle(new Pen(Color.Aqua), 0, 0, img.Width - 1, img.Height - 1);
41 MemoryStream ms = new MemoryStream();
42 img.Save(ms, ImageFormat.Jpeg);
43 ht.Dispose();
44 img.Dispose();
45 return ms.ToArray();
46 }

mvc中调用

1 public ActionResult ShowValidate()
2 {
3 var check = Common.Validate.validation(4);
4 byte[] buffer = Common.Validate.drawImg(check);
5 return File(buffer, "image/jpeg");
6 }

前台

<img src="/Login/ShowValidate" id="img" onclick="changeCode()" class="validateImg">

if (validateCode.toLowerCase() == getCode()) {
return true;
} function changeCode() {
$("#img").attr("src", $("#img").attr("src") + "?");
} function getCode() {
var cookies = document.cookie.split(";");
for (var i = 0; i < cookies.length; i++) {
var validate = cookies[i].split("=");
if (validate[0].replace(/(^\s*)|(\s*$)/g, "") == "check") {
return validate[1].replace(/(^\s*)|(\s*$)/g,"");
}
}
}

XML文件

可扩展标记性语言,用来保存轻量级数据。

XML的标签是成对出现的、并且是区分大小写的。

XML文档必须包含根节点,且只有一个。

创建XML文件

 1 //创建XML对象
2 XmlDocument doc = new XmlDocument();
3 //创建文档描述信息
4 XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null);
5 doc.AppendChild(dec);
6
7 //创建根节点
8 XmlElement books = doc.CreateElement("Books");
9 doc.AppendChild(books);
10
11 //创建子节点
12 XmlElement book1 = doc.CreateElement("Book");
13 books.AppendChild(book1); //将子节点添加到books
14
15 //给book1子节点追加子节点
16 XmlElement name1 = doc.CreateElement("Name");
17 name1.InnerText = "c#"; //赋值 文本值
18 book1.AppendChild(name1);
19
20 XmlElement price1 = doc.CreateElement("Price");
21 price1.InnerXml = "<b>10.0</b>"; //赋值 html标签
22 book1.AppendChild(price1);
23
24 XmlElement items = doc.CreateElement("Items");
25 //给节点增加属性
26 items.SetAttribute("Name", "c#");
27 items.SetAttribute("Price", "10.0");
28 book1.AppendChild(items);
29
30 doc.Save("Books.xml"); //保存
31
32 //创建后
33 <?xml version="1.0" encoding="utf-8"?>
34 <Books>
35 <Book>
36 <Name>c#</Name>
37 <Price>
38 <b>10.0</b>
39 </Price>
40 <Items Name="c#" Price="10.0" />
41 </Book>
42 </Books>

向已有XML文件中追加

1 XmlDocument doc = new XmlDocument();
2 if (File.Exists("Books.xml"))
3 {
4 doc.Load("Books.xml"); //加载 xml
5 XmlElement books = doc.DocumentElement; //得到根节点
6 //再建立元素进行追加
7 }

获取XML文件

 1 XmlDocument doc = new XmlDocument();
2 doc.Load("Books.xml");
3
4 XmlElement books = doc.DocumentElement;
5 XmlNodeList xnl = books.ChildNodes; //得到所有节点
6
7 foreach (XmlNode v in xnl) //遍历得到所有节点值
8 {
9 Console.WriteLine(v.InnerText);
10 }
11
12 XmlNodeList xnl1 = doc.SelectNodes("Books/Book/Items"); //查找节点列表
13 foreach (XmlNode node in xnl1)
14 {
15 Console.WriteLine(node.Attributes["Name"].Value); //得到name属性的值
16 Console.WriteLine(node.Attributes["Price"].Value); //得到price属性的值
17 }

删除XML文件

1 XmlDocument doc = new XmlDocument();
2 doc.Load("Books.xml");
3
4 XmlNode xnl = doc.SelectSingleNode("Books/Book"); //查找单一节点
5 xnl.RemoveAll(); //删除全部
6 doc.Save("Books.xml");
7 Console.ReadKey();

LinqToXml

 1 //兼容传统方法创建
2 XDocument xDoc = new XDocument();
3 //xDoc.Declaration = new XDeclaration() 默认UTF-8 第一行不需要单独建
4 XElement xRoot = new XElement("root", "值"); //定义元素
5
6 XElement xRoot1 = new XElement("root1"); //定义元素2
7 xRoot1.Value = "值1";
8
9 XAttribute xattr = new XAttribute("Id", "1"); //定义属性
10
11 xDoc.Add(xRoot); //统一使用add添加
12 xRoot.Add(xattr);
13
14 xDoc.Save(@"d:\linqtoxml.xml");
15
16 //真正的linq语法
17 //F# 函数式编程语言
18 new XDocument(
19 new XElement("root",
20 new XAttribute("id", "001"),
21 "值")
22 ).Save(@"d:\2.xml");
23 //链式编程,流水线生产 f1().f2().f3()...
24
25 //查找xml
26 XDocument xdoc = new XDocument(new XElement("root"));//根节点
27 xdoc.Root.Add(new XElement("person",
28 new XAttribute("id", "1"),
29 new XAttribute("name", "zhangsan"),
30 new XAttribute("sex", "1")
31 )); //添加子节点
32 xdoc.Root.Add(new XElement("person",
33 new XAttribute("id", "2"),
34 new XAttribute("name", "lisi"),
35 new XAttribute("sex", "2")
36 ));
37 xdoc.Save(@"d:\2.xml");
38
39 <?xml version="1.0" encoding="utf-8"?>
40 <root>
41 <person id="1" name="zhangsan" sex="1" />
42 <person id="2" name="lisi" sex="2" />
43 </root>
44
45 //开始查找、修改、删除
46
47 XDocument xdoc = XDocument.Load(@"d:\2.xml"); //加载xml
48 foreach (XElement xlt in xdoc.Root.Elements()) //Root根节点 Elements 元素集合
49 {
50 if (xlt.Name.LocalName == "person") //Name节点名 LocalName不带命名空间的节点名
51 {
52 if (xlt.Attribute("id").Value == "1") //判断属性值为1时
53 {
54 Response.Write(xlt.Attribute("name").Value); //输出name
55 xlt.Attribute("name").Value = "newname"; //修改name
56 xlt.Remove(); //删除此节点
57 xdoc.Save(@"d:2.xml");
58 }
59 }
60 }
61
62 //Linq查询语法
63 //Descendants()所有子节点 可加某节点下所有节点
64 var query = from s in xdoc.Descendants() //从集合里找
65 where s.Name.LocalName == "person"
66 select s;
67 foreach (XElement xlt in query)
68 {
69 Response.Write(xlt.Value);
70 }
71
72 //Linq方法语法(lambda表达式)
73 foreach (XElement xlt in xdoc.Descendants().Where(s =>
74 {
75 if (s.Name.LocalName == "name")
76 {
77 return true;
78 }
79 return false;
80 }))
81 {
82 Response.Write(xlt.Value);
83 }

委托
使用delegate定义委托,将一个方法作为参数传给另一个方法。
委托所指向的函数必须返回值与参数相同

  1 /// <summary>
2 /// 委托语法
3 /// </summary>
4 class Program
5 {
6 public delegate void delSayhi(string name); //定义委托
7 static void Main(string[] args)
8 {
9 delSayhi del = new delSayhi(sayHiChinese); //实例化委托调用具体方法
10 del("san"); //执行
11
12 delSayhi del1 = sayHiChinese; //直接赋值方式
13 del1("si");
14
15 //匿名函数
16 delSayhi del2 = delegate(string name) { Console.WriteLine(name + ",思密达"); };
17 del2("韩国");
18
19 //lambda表达式 ()没参数也要写 => { //方法体 } 没参数可以e=> Console.WriteLine(""); 如果只有一句话不用{} 返回的return可以省略
20 delSayhi del3 = (string name) => { Console.WriteLine(name + ",萨瓦迪卡"); };
21 del2("泰国");
22
23 sayHi("david", sayHiEnglish); //调用自定义方法 参数要调用的方法
24 Console.ReadKey();
25 }
26
27 public static void sayHi(string name, delSayhi del) //定义方法 类型委托
28 {
29 del(name);
30 }
31
32 public static void sayHiChinese(string name)
33 {
34 Console.WriteLine("你好, 我叫" + name);
35 }
36 public static void sayHiEnglish(string name)
37 {
38 Console.WriteLine("hello, my name is {0}, nice to meet you!", name);
39 }
40 }
41
42
43
44 /// <summary>
45 /// 求任意数组最大值
46 /// </summary>
47 class Program
48 {
49 public delegate int delCompre(object o1, object o2); //定义比较委托
50 static void Main(string[] args)
51 {
52 //比较int
53 object[] objs = new object[] { 1, 2, 3, 4, 5, 32, 1, 243, };
54 var max = getMax(objs, getIntMax); //传入比较int方法
55 Console.WriteLine(max);
56
57 var max2 = getMax(objs, delegate(object o1, object o2)
58 {
59 return int.Parse(o1.ToString()) - int.Parse(o2.ToString());
60 }); //匿名函数 与比较int一样
61 Console.WriteLine(max2);
62
63 //比较string
64 object[] strs = new object[] { "abc", "efd", "asdf", "sd", "asdff" };
65 var maxstrs = getMax(strs, delegate(object o1, object o2)
66 {
67 return o1.ToString().Length - o2.ToString().Length;
68 }); //匿名函数
69 Console.WriteLine(maxstrs);
70
71 var maxstrs2 = getMax(strs, (object o1, object o2) =>
72 {
73 return o1.ToString().Length - o2.ToString().Length;
74 }); //lambda 表达式
75 Console.WriteLine(maxstrs2);
76
77 Console.ReadKey();
78 }
79
80 public static int getIntMax(object o1, object o2) //比较int方法
81 {
82 int n1 = int.Parse(o1.ToString());
83 int n2 = int.Parse(o2.ToString());
84 return n1 - n2;
85 }
86 /// <summary>
87 /// 取一个任意数组的最大值
88 /// </summary>
89 /// <param name="objs">数组</param>
90 /// <param name="del">委托</param>
91 /// <returns></returns>
92 public static object getMax(object[] objs, delCompre del)
93 {
94 object max = objs[0];
95 for (int i = 0; i < objs.Length; i++)
96 {
97 //if (max < objs[i]) object 无法确定是什么类型 所以不能用<
98 if (del(max, objs[i]) < 0) //如果委托值小于0 成立 传入如何比较即可
99 {
100 max = objs[i];
101 }
102 }
103 return max;
104 }
105 }
106
107
108 /// <summary>
109 /// 泛型<T>委托
110 /// </summary>
111 class Program
112 {
113 public delegate int delCompre<T>(T t1, T t2); //定义泛型委托
114 static void Main(string[] args)
115 {
116 //int
117 int[] nums = { 1, 2, 3, 4, 5 };
118 int max = getMax<int>(nums, (int t1, int t2) => { return t1 - t2; });
119 Console.WriteLine(max);
120
121 //string
122 string[] strs = { "asd", "sdf", "zxcvv", "123", "qwe" };
123 string maxStr = getMax(strs, (string s1, string s2) => { return s1.Length - s2.Length; });
124 Console.WriteLine(maxStr);
125
126 Console.ReadKey();
127 }
128
129 public static T getMax<T>(T[] objs, delCompre<T> del)
130 {
131 T max = objs[0];
132 for (int i = 0; i < objs.Length; i++)
133 {
134 if (del(max, objs[i]) < 0)
135 {
136 max = objs[i];
137 }
138 }
139 return max;
140 }
141 }

多播委托
注册多个方法,调用时将这些方法依次执行一遍。

1 public delegate void my1();
2
3 my1 my = Fun1();
4 my+= Fun2(); //+=实现多播委托
5
6 public static void Fun1(){
7 }
8 public static void Fun2(){
9 }

4、C#进阶:MD5加密、进程、线程、GDI+、XML、委托的更多相关文章

  1. Python进阶----线程基础,开启线程的方式(类和函数),线程VS进程,线程的方法,守护线程,详解互斥锁,递归锁,信号量

    Python进阶----线程基础,开启线程的方式(类和函数),线程VS进程,线程的方法,守护线程,详解互斥锁,递归锁,信号量 一丶线程的理论知识 什么是线程:    1.线程是一堆指令,是操作系统调度 ...

  2. python进阶-------进程线程(二)

    Python中的进程线程(二) 一.python中的"锁" 1.GIL锁(全局解释锁) 含义: Python中的线程是操作系统的原生线程,Python虚拟机使用一个全局解释器锁(G ...

  3. python进阶------进程线程(一)

    Python中的进程线程 一.进程线程的概念 1.1进程: 进程就是一个程序在一个数据集上的一次动态执行过程.进程一般由程序.数据集.进程控制块三部分组成.我们编写的程序用来描述进程要完成哪些功能以及 ...

  4. Java进阶(四十四)线程与进程的特征及区别

    线程与进程的特征及区别 定义及特征 进程   指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令.数据和堆栈等组成的,是一个能独立运行的活动实体. 进程的特征: 1.动态性:进程的实质是 ...

  5. pyhon——进程线程、与协程基础概述

    一直以来写博客都是实用主义者,只写用法,没信心写原理,但是每一次写作业的过程都有一种掘地三尺的感觉,终于,写博客困难症重症患者经历了漫长的思想斗争,还是决定把从网上淘到的各种杂货和自己的总结放在一起, ...

  6. Jmeter Md5加密操作之-------BeanShell PreProcessor

    背景: 有一些登录会做一些md5校验,通过jmeter的BeanShell可以解决MD5加密情况. 1.首先需要一个解码的jar包,commons-codec-1.10.jar(网上很多),下载后,放 ...

  7. Jmeter(十九) Md5加密操作之-------BeanShell PreProcessor(转载)

    转载自 http://www.cnblogs.com/yangxia-test 背景: 有一些登录会做一些md5校验,通过jmeter的BeanShell可以解决MD5加密情况. 1.首先需要一个解码 ...

  8. jmeter用BeanShell调用jar包对HTTP请求中的参数进行MD5加密

    前提: eclipse.JDK.Jmeter 说明: 本文分为两部分进行配置说明 第一部分:编写JavaMD5加密脚本 第二部分:使用Jmeter的BeanShell进行验证 ************ ...

  9. Java实现MD5加密及解密的代码实例分享

    链接:http://www.jb51.net/article/86027.htm Java实现MD5加密及解密的代码实例分享 作者:厦门大学陈黎栋 字体:[增加 减小] 类型:转载 时间:2016-0 ...

随机推荐

  1. C++程序设计(关于函数中数组传递的一点心得)

    题目: 10个学生考完期末考试评卷完成后,老师需要划出及格线,要求如下: (1) 及格线是10的倍数: (2) 保证至少有60%的学生及格: (3) 如果所有的学生都高于60分,则及格线为60分:   ...

  2. winform打开子窗体后,在子窗体中刷新父窗体,或者关闭子窗体刷新父窗体

    winform打开子窗体后,在子窗体中刷新父窗体,或者关闭子窗体刷新父窗体,搜集了几个方法,列举如下: 一 . 所有权法 父窗体,名称为“fuForm”,在父窗体中有个公共刷新方法,也就是窗体数据初始 ...

  3. mybatis实战教程(mybatis in action)之一:开发环境搭建

    mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包.这些软件工具均可以到各自的官方网站上下载. 首先建立一 ...

  4. Windows2003 IIS6.0支持32位和64位两种模式的设置方法

    IIS 6.0 可支持 32 位和 64 位两种模式.但是,IIS 6.0 不支持在 64 位版本的 Windows 上同时运行这两种模式.ASP.NET 1.1 只在 32 位模式下运行.而 ASP ...

  5. vue.js 2.0开发(3)

    组件化 Vue.component('todo-items',{ }); 定义组件,首先是标签的名字todo-items,然后里面还要配置一些选项,首先是我们的模板template,里面需要填入的内容 ...

  6. react-native疑难

    {"message":"TransformError: E:\\study\\react_native-workspace\\AwesomeProject\\node_m ...

  7. Python mysql 操作小类,供大家用用

    import binascii import os import linecache import time #add pyDes path #sys.path.append("/data1 ...

  8. Solaris 自动挂载

    修改文件:vim /etc/vfstab添加命令:/dev/dsk/c2t0d0p0:1             -               /media/PARTITION1    pcfs   ...

  9. Error 2103 “Unhandled Error in Silverlight Application“ 解决办法

    当调试SilverLight项目时,如果出现如下错误: 当调试页面时出现如下错误: 解决办法为:打开工程属性,在Startup object:处选择相应的启动应用程序.

  10. UDP/TCP

    转载地址http://blog.csdn.net/wwmusic/article/details/8875748 Socket  是一套建立在TCP/IP协议上的接口不是一个协议 应用层:  HTTP ...