现在的位置: 首页 > 综合 > 正文

白话数字签名(3)——Web程序中的数字签名

2011年11月17日 ⁄ 综合 ⁄ 共 10880字 ⁄ 字号 评论关闭

摘要

阅读本文并探索
    - 如何突破Web程序无状态性这个让人抓狂的障碍实现自动显示签名结果和批量签名功能。
    - 如何将签名功能封装到一个实现了IHttpHandler接口的类库中,使Client端的代码尽可能的简单。
    - 使用数字签名API函数需要注意的几个问题。

本文介绍在Web程序中使用数字签名所遇到的特殊困难和解决方法,并给出一个超简单但相当实用的DEMO。

DEMO程序的效果

让我们先来看看实现之后的效果。

让Client端代码尽可能的简单

我们将数字签名操作的复杂性全部封装到一个命名空间为mylib.util.lnca的类库中,类库只暴露一个名为Signer的类。
Signer的Client (本例中的Default.aspx)的职责只有
    - 构造一个含有待签名的数据的Dictionary作为Signer的输入,然后调用Signer.do_sign()函数进行数字签名。
    - 在页面上放置一个专门用于取得并显示签名结果的按钮,并将这个按钮的ClientID传递给Signer,这样Signer在完成签名后就可以自动触发这个按钮。在将程序发布给最终用户时,要把这个按钮的top属性设为-10000,这样最终用户就看不到这个按钮了。

Default.aspx 的设计视图的截图

Default.aspx 的源代码如下

Default.aspx
Default.aspx.cs

由于Signer是一个HTTP 处理程序,所以需要在Web.config中添加一行对Signer.ashx的注册:

Web.config

有关HTTP处理程序的创建和应用,可以看《实战 HTTP 处理程序(HTTP Handler)系列》

由于我们把复杂性都放在了Signer.cs中,Signer.cs的代码有些长,我们会在后面讨论它的几个要点。

Signer.cs

抱歉!评论已关闭.