MD5、拼音检索和邮件发送

 

MD5算法

 

MD5算法是一种散列(hash)算法(摘要算法,指纹算法),不是一种加密算法(易错)

l  为了防止用户偷懒,算两次MD5值,或者加上一个固定的字符串

MD5算法理论上是不可逆的,因此攻击的唯一办法就是碰撞。两个不同的内容生成相同的MD5值,这就叫碰撞。

l  (*)MD5的其他应用:第三方支付用MD5对金额、订单号等进行散列计算,来保证数据是对方发出的。如鹏网项目会讲。

l(*)和MD5类似的还有SHA等算法。

l  注意:对于字符串计算MD5时,根据字符串保存的编码不同最终计算出的MD5值也不同,所以要求使用统一的编码。

Excel中的电话号码问题,看起来像数字的字符串以半角单引号开头就没问题了

Workbook;工作簿-----》包含的叫页(工作表):Sheet------》行:Row-------》单元格:Cell。

l  DBNull和null的区别:如果值为null,直接写null的话用SqlParameter提交到服务器上是报错的(未提供值),需要写DBNull.Value:new SqlParameter(“Id”, model.Id==null?(object)DBNull.Value:model.Id)。三元运算符冒号两边的值类型相同或者有继承关系。

l//int i=(j==null?10:(int)j);

(*) int i = j ?? 10;// null 合并运算符,等价于上面的

 

MD5算法是什么?

它可以讲字符串或者一个文件流变成一个长度为32的字符串

特点: 加密不可逆

MD5存在的意义:

写法:用C#实现MD5

1.将字符串用MD5算法处理

    准备一个字符串

    将字符串变成一个字符数组

    创建MD5对象,调用其ComputeHash方法

    得到一个16个字节的字节数组

    使用SB拼接,将每个字节用ToString("x2")处理

代码:

  ---------------------将一个字符串用MD5处理-------------------------

    string str="abc";

    //字节数组

    //如果是字符串是英文,用Encoding.UTF8,如果是中文就用Encoding.GetEncoding("gb2312")

    bytes[] bs = Encoding.UTF8.GetBytes(str);

    //准备MD5对象

        MD5 md5 = MD5.Create();

    //计算指定字节数组的哈希值

    bs=md5.ComputeHash(bs);

    StringBuilder sb = new StringBuilder();

因为对于字节如果用十进制表示为0-255,用二进制表示为0000000-11111111,十六进制为000000-FFFFFF,为了统一处理,这里做了统一,用十六进制

    for(int i=0;i<bs.Length;i++)

    {

       sb.Append(bs[i].ToString("x2"));

    }

    Console.WriteLine(sb.ToString());

    Console.ReadKey();

  ----------------------将一个文件用MD5算法处理-----------------------

    MD5 md5=MD5.Create();

    string path=@"文件路径";

    //准备好byte数组

    byte[]bs;

    using(FileStream file= new FileStream(path,FileMode.Open,FileAccess.Read))

    {

       bs = md5.ComputeHash(file);

    }

    //后面的代码和上面处理字符串的代码一样用

    for(int i=0;i<bs.length;i++)

    {

       sb.Append(bs[i].ToString("x2"));

    }

    Console.WriteLine(sb.ToString());

    Console.ReadKey();

拼音检索

        在做人员统计时,有时候会遇到多音字,需要提供姓名的全拼,并将其列入数据库

        拼音在进行检索的时候,有些字并不知道如何读

        微软提供的一个压缩包:vsintlpack1.zip,解压后你会发现里面有很多msi类型的文件,找到CHSPinYinConv.msi

        安装后,在安装目录下有两个帮助文档,里面只有一个命名空间,空间下面有一个类,类里面有很多方法

而我们想要的是:给定一个汉字,获得一个拼音,里面有个属性:Pinyins,他是一个只读的字符串集合,如何使用?

        1,在安装目录下有两个文件(ChnCHarInfo.dll,ChnCharInfo.XML)

        2,创建一个控制台应用程序,新建一个文件夹dll,把那两个文件放进来并添加引用

        3,代码:

using Microsoft.International.Converters.PinYinConverter;

 

        class Program

        {

                static void Main(string[] args)

                {

                        //使用,ChineseChar方法要一个字符

                        ChineseChar cc=new ChineseChar('行'); 

                        for(i=0;i<cc.PinYins.Count;i++)

                        {

                                if (cc.Pinyins[i] != null)

                            {

                                           string temp = Regex.Replace(cc.Pinyins[i], @"\d+", "");

                                         if (temp.Length > 0)

                                         {

                                                //打印出拼音

                                              console.writeline(cc.PinYins[i]);

                                                 }

                            }

                        }

                        console.readkey();

                        //注意:拼音中是带有声调的,声音不需要,而且会有部分多余的空项存在

                        //这样利用正则表达式将声调和空项排除,得到每个字的不同的读法,选择你的名字对应的拼音

                        //将其列入数据库,就可以用拼音检索的方式得到相应的数据

                }

        }

adapter:

        //4.执行一个sql语句,并把结果集放入本地的DataTable中.这里数据已

        //经放到本地,断开数据库连接,还是可以访问到数据的.

        public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters)

        {

            using (SqlConnection conn = new SqlConnection(ConnectionString))

            {

                using (SqlDataAdapter da = new SqlDataAdapter(sql, conn))

                {

                //adaper有四个方法增删改查,在往sql语句中添加参数时,根据情况调用这四个方法即可

                    da.SelectCommand.Parameters.AddRange(parameters);

                    DataTable dt = new DataTable();

                    //Fill方法其实执行的是da.SelectCommand中的sql语句,这里可以写conn.open也可以不写,如果不写,da会自动连接数据库

                    da.Fill(dt);

                    return dt;

                }

            }

        }

邮件发送

  • 操作邮件用的类:MailMessage()  MailAddress
  • 发送服务器用的类:SmtpClient(); NetworkCredential()
  • 带HTML的内容:AlternateView()有一个静态方法
  • 邮件的HTML中加图片:<img src='cid:meinv'
  • LinkedResource lr = new  LinkedResource  ("1.jpg","image/gif");
  • lr.ContentId="meinv";
  • htmlbody.LinkedResources.Add(lr);
  • 添加附件:Attachment()

 

 

posted @ 2013-11-06 21:56  Regan  阅读(722)  评论(0编辑  收藏  举报