CryptoUtility是一个封装了Ingrian客户端组件的DLL,使.NET程序可以更方便的调用Ingrian来做加解密。下面让我们来看看如何使用这个DLL。
首先我们创建一个.NET项目,是Console,是Windows或是Web的都可以,这里我们以一个Console程序为例。创建好后我们将CryptoUtility.dll这个程序集引用到我们的Console程序中来,如图:
接下来我们来看一段代码:
1: using System;
2: using Newegg.CryptoUtility;
3:
4: namespace CryptoUtilityDemo
5: {
6: class Program
7: {
8: static void Main(string[] args)
9: {
10: Console.WriteLine("Write something:");
11: string something = Console.ReadLine();
12:
13: using (ICrypto crypto = new CryptoSession())
14: {
15: string encryptedText = crypto.Encrypt(something);
16:
17: Console.WriteLine("Encrypted text is: {0}", encryptedText);
18:
19: string decryptedText = crypto.Decrypt(encryptedText);
20:
21: Console.WriteLine("Decrypted text is: {0}", decryptedText);
22: }
23:
24: Console.ReadKey();
25: }
26: }
27: }
这段代码演示的是一个很简单的场景,让用户输入一段文字,然后创建一个CryptoSession对象来加密这段文字,之后再解密加密后的文字,再将CryptoSession对象Dispose掉。正如你看到的,CryptoUtility组件的使用是非常简单的。不过光有这段代码程序还跑不起来,这是因为Ingrian需要一个帐号连接到它的服务器上,并且我们还要提供一个key name才能够进行加密或解密等操作。CryptoSession的默认构造函数会自动从App.config或Web.config中读取这些信息,所以我们可以添加一个App.config或Web.config来指定这些信息,如下:
1: <?xml version="1.0" encoding="utf-8" ?>
2: <configuration>
3: <appSettings>
4: <add key="ingrian.userName" value="sampleUser"/>
5: <add key="ingrian.password" value="samplePassword"/>
6: </appSettings>
7: </configuration>
上面配置中被划掉的部分就是连接Ingrian服务器所需的用户名和密码了,可以看到这里我们并没有指定key name,这是因为如果我们不指定的话CryptoUtility会自动帮我们找出合适的key用来加解密,这也是一般我们提倡的做法。也许你会问,“那么在解密的时候CryptoUtility怎么知道我该用哪个key解密呢?”,答案是CryptoUtility足够聪明,它确实能够知道该用什么key来解密,我们在使用它时就不用关心这个问题了。
另外虽然没有在上面的代码片段中体现出,但是无论是在CryptoSession Open时,还是在加做解密动作时,都有可能会有异常抛出,例如连接不上Ingrian服务器就会抛出CryptoConnectionException,在加解密时出错就会抛出CryptoException等。如何根据需要在你的代码中捕获这些异常就要看你的了。下面给出一段异常处理的代码片段:
1: private static void HandleExceptionCase()
2: {
3: ICrypto crypto = new CryptoSession();
4:
5: try
6: {
7: crypto.Open();
8:
9: string encryptedText = crypto.Encrypt("123");
10: string decryptedText = crypto.Decrypt(encryptedText);
11:
12: //TODO
13: }
14: catch (CryptoConnectionException)
15: {
16: //Handle connection problems.
17: }
18: catch (CryptoKeyException)
19: {
20: //Handle key problems.
21: }
22: catch (CryptoException)
23: {
24: //Handle other problems.
25: }
26: finally
27: {
28: crypto.Close();
29: }
30: }
可以看出对于CryptoSession对象的异常处理方式和SqlConnection之类的对象是一样的。也就是,平时不捕捉异常时也要养成使用C#关键字using的好习惯。但如果由于性能原因需要保留CryptoSession对象的话千万别忘了在用完之后将其Close(或Dispose)掉,这一点与SqlConnection之类对象的注意事项是一样的。
好了,以上就是CryptoUtility的基本使用方法,相信它已经足够应付绝大部分的应用场景了。在高阶篇中我会讲到一些CryptoUtility组件的高级使用方法,当这种简单的使用方法不能满足你的需求时就可以去看看了。