2008年10月24日星期五

Ingrian手记——CryptoUtility使用说明(高阶)

在特殊场景下可能你的程序不方便使用App.config或Web.config(比如你将这些配置信息都存在数据库中)。这时你就需要用到下面介绍的几个CryptoSession的构造函数了。

   1: CryptoSession(string userName, string password);
   2: CryptoSession(string userName, string password, string keyNamePrefix);
   3: CryptoSession(string userName, string password, string keyName, bool isKeyNamePrefix);

这三个构造函数做的事情与使用配置文件时一样,当你不能使用配置文件时就使用这几个构造函数吧。不过另外还有一个构造函数,如下:

   1: CryptoSession(IAccountProvider accountProvider, IKeyNameProvider keyNameProvider);

这个构造函数非常Powerful,如果你有极特殊复杂的帐号信息获取逻辑的话那么可实现IAccountProvider和IKeyNameProvider这两个接口来向CryptoSession提供帐号信息和key name,注意这里提供的key name必须是完整的,而不能仅仅是prefix。

讲过了上面几种不同的构造方案后我们再来看一下CryptoSession的Open方法和Close方法。

Open方法会创建一个与Ingrian服务器交互的上下文(Context),并且会通过我们提供的key name来获取到Ingrian服务器上的“key对象”。在任何加解密操作前这个上下文和“key对象”都应该是已经存在的,也就是,像SqlConnection一样,在操作前必须先调用一下Open方法。不过,在基础篇中我们所给出的代码片段中就没有调用Open方法,这是因为CryptoSession会自动判断,如果没有Open过的话它会自己先Open一下。

顾名思义,Close方法就是把这些资源都释放掉的一个方法,Close后可再Open。如果不调用Close方法便再一次调用Open的话,Open会自己调用一遍Close方法以释放原有的资源。可能你会想,为什么要这么做呢,这不是多余吗?其实不然,这就是另一个高阶使用技巧。当你Open一段时间后,可能会出现因为某些原因“key对象”或者当前这个上下文会失效或者丢失的情况,当你有这样的怀疑时,你可以捕获异常,在异常处理中再Open一次,这样原有的资源会被释放掉,新的,有效的上下文和“key对象”会被获得。

没有评论:

发表评论