当前位置:嗨网首页>书籍在线阅读

07-创建自定义类库

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

23.2.1 创建自定义类库

自定义类库的开发通常包括以下几个步骤。

(1)创建基于类库模板的项目,开发环境自动产生包含对命名空间定义的代码。

(2)在项目中添加类或结构等的定义。

(3)添加类或结构的方法、属性、事件和字段等。

(4)编译类库,一般生成DLL文件。

下面以一个加密解密的程序实例来说明类库的创建过程,该类库提供了基于MD5算法的加密解密方法和基于DES算法的加密和解密方法。

第一步,新建项目,选中项目类型为“类库”,在项目名称中输入Zzuli.Cryptsy,如下图所示。

422.png 第二步,在打开的代码编辑窗口中把命名空间改为Zzuli.Cryptsy,把类名和对应的文件名改为“EncodeDecode”,然后输入如下的程序代码。

01  /// <summary>
02  /// 使用给定密钥加密
03  /// </summary>
04  /// <param name="original">原始文字</param>
05  /// <param name="key">密钥</param>
06  /// <param name="encoding">字符编码方案</param>
07  /// <returns>密文</returns>
08  public static string Encrypt(string original, string key)
09  {
10           byte[] buff = System.Text.Encoding.UTF8GetBytes(original);
11           byte[] kb = System.Text.Encoding.UTF8GetBytes(key);
12           return Convert.ToBase64String(Encrypt(buff, kb));
13  }
14  /// <summary>
15  /// 使用给定密钥解密
16  /// </summary>
17  /// <param name="encrypted">密文</param>
18  /// <param name="key">密钥</param>
19  /// <param name="encoding">字符编码方案</param>
20  /// <returns>明文</returns>
21  public static string Decrypt(string encrypted, string key)
22  {
23           byte[] buff = Convert.FromBase64String(encrypted);
24           byte[] kb = System.TextEncoding.UTF8GetBytes(key);
25           return Encoding.UTF8.GetString(Decrypt(buff, kb));
26  }
27  /// <summary>
28  /// 生成MD5摘要
29  /// </summary>
30  /// <param name="original">数据源</param>
31  /// <returns>摘要</returns>
32  public static byte[] MakeMD5(byte[] original)
33  {
34           MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
35           byte[] keyhash = hashmd5.ComputeHash(original);
36           hashmd5 = null;
37           return keyhash;
38  }
39  /// <summary>
40  /// 使用给定密钥加密
41  /// </summary>
42  /// <param name="original">明文</param>
43  /// <param name="key">密钥</param>
44  /// <returns>密文</returns>
45  public static byte[] Encrypt(byte[] original, byte[] key)
46  {
47           TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
48           desKey = MakeMD5(key);
49           desMode = CipherModeECB;
50           return des.CreateEncryptor().TransformFinalBlock(original, 0, original.Length);
51  }
52  /// <summary>
53  /// 使用给定密钥解密数据
54  /// </summary>
55  /// <param name="encrypted">密文</param>
56  /// <param name="key">密钥</param>
57  /// <returns>明文</returns>
58  public static byte[] Decrypt(byte[] encrypted, byte[] key)
59  {
60          TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
61          desKey = MakeMD5(key);
62          desMode = CipherModeECB;
63          return des.CreateDecryptor().TransformFinalBlock(encrypted, 0, encryptedLength);
64  }
65  //默认密钥向量
66  private static byte[] Keys = { 0x17, 0x34, 0x59, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
67  
68  /// <summary>
69  /// 对称加密法加密函数
70  /// </summary>
71  /// <param name="encryptString">待加密的字符串</param>
72  /// <param name="encryptKey">加密密钥,要求为8位</param>
73  /// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
74  
75  public static string SymmetryEncrypt(string encryptString, string encryptKey)
76  {
77          try
78          {
79          byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
80          byte[] rgbIV = Keys;
81          byte[] inputByteArray = EncodingUTF8GetBytes(encryptString);
82          DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
83          MemoryStream mStream = new MemoryStream();
84          CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
85          cStream.Write(inputByteArray, 0, inputByteArrayLength);
86          cStream.FlushFinalBlock();
87          return Convert.ToBase64String(mStream.ToArray());
88          }
89          catch
90                  {
91                  return encryptString;
92                  }
93          }
94  
95  /// <summary>
96  /// 对称加密法解密函数
97  /// </summary>
98  /// <param name="decryptString">待解密的字符串</param>
99  /// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
100  /// <returns>解密成功返回解密后的字符串,失败返源串</returns>
101  
102  public static string SymmetryDecrypt(string decryptString, string decryptKey)
103  {
104          try
105          {
106          byte[] rgbKey = Encoding.UTF8GetBytes(decryptKey);
107          byte[] rgbIV = Keys;
108          byte[] inputByteArray = Convert.FromBase64String(decryptString);
109          DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
110          MemoryStream mStream = new MemoryStream();
111          CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
112          cStream.Write(inputByteArray, 0, inputByteArrayLength);
113          cStream.FlushFinalBlock();
114          return Encoding.UTF8.GetString(mStream.ToArray());
115          }
116          catch
117  {
118          return decryptString;
119          }
120  }

第三步,因为我们创建的是类库,它不能单独运行,要生成*DLL文件,我们只需要选择“生成”菜单下的“生成Cryptsy”,此时,在项目的输出目录下已经生成了“Cryptsydll”文件。