Chinaunix首页 | 论坛 | 博客
  • 博客访问: 59928
  • 博文数量: 3
  • 博客积分: 1002
  • 博客等级: 准尉
  • 技术积分: 240
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-12 15:31
文章分类
文章存档

2008年(3)

我的朋友
最近访客

分类:

2008-06-06 17:07:16

最近闲着无聊,了解了一下Lotus Encryption,把自己的心得体会记录下来,以便日后查找,也可以方便有需要的人。

首先要声明一点:Lotus Encryption只能是在Notes Client下应用,想在Web下应用的人就不必往下看了。

Lotus/Notes Encryption分为两类,public encryption和secret encryption。下面分别予以介绍。

public encryption就是用Notes ID的密钥来进行加密,该种方式加密后就只能是指定的ID才能decrypt。

secret encryption就是用secret key来进行加密,secret key是在Notes ID中进行创建,创建好了之后还可以mail给其他人,这样只要有这个secret key的ID都

可以decrypt。(至于如何创建secret key请参考帮助,在help里面search“Creating secret encryption keys”即可有详细的操作guide)

下面开始介绍如何在Designer里面来实现这样的加密功能,首先确定Form里面哪些域需要加密,然后在“域属性--advanced--security options”选择"Enable encryption for this field",只要看到选择了加密的域的field delimiters显示为红色就表示设置已经ok。这是最基本的设置,很简单吧:-)
下面需要添加两个内置域"SecretEncryptionKeys"和"PublicEncryptionKeys","SecretEncryptionKeys"用来存放secret encryption方式加密该document的secret key name,"PublicEncryptionKeys"是存放pulic encryption方式加密的人名,用@Name([CN])格式存放就可以。至于要把encryption做成什么形式就看具体的需求了,比如在新建一个form的时候弹出一个框让用户选择"No Encryption","Secret Key Encryption","Public Key Encryption",然后根据用户的选择显示"SecretEncryptionKeys"或"PublicEncryptionKeys",或者同时使用public和secret encryption应该也是可以的(我没试),比如可以把"SecretEncryptionKeys"域做成一个checkbox然后做一个profile文件配置上所有已知的secret key name,以上讲的都是基本的原理,具体的根据你的应用需求来做就好了。

下面接着介绍下encrypt之后的文档所达到的效果,用不能decrypt的ID打开文档时会提示,并且不能看到加密的域也不能编辑文档。在文档属性的fields书签里面也是看不到加密的域的。

最后介绍一段解密已加密文档的代码(万一哪天加密的ID或者secret key被弄丢了这个就派得上用场啦),原理如下:先把已经加密的域解密,然后随便加密一个临时的域,并做保存操作,然后再用NotesDocument.removeitem方法把"$Seal","$SealData","SecretEncryptionKeys"和"PublicEncryptionKeys"当然还有就是那个刚加密的临时域,最后再保存一次即可。为什么要先加密个临时域保存一下呢?如果直接remove那几个内置域的话,被加密的域的值就会显示不出来,那你

这个解密操作也就失去意义啦。具体的那段解密代码如下:
  'Must have at least 1 field encrypted in order to call Encrypt method
  Dim temp As New NotesItem(doc,"tempjunk","temp")
  temp.IsEncrypted=True
  Call doc.encrypt
  Call doc.save(True, False)
  'This portion can now remove the fields relative to encrypting the
  'single token encrypted field.
  Call doc.removeitem("$Seal")
  Call doc.removeitem("$SealData")
  If doc.HasItem("SecretEncryptionKeys") Then
   Call doc.removeitem("SecretEncryptionKeys")
  End If
  If doc.HasItem("PublicEncryptionKeys") Then
   Call doc.removeitem("PublicEncryptionKeys")
  End If
  Call doc.removeitem("Encrypt")
  Call doc.removeItem("tempjunk")
  Call doc.save(True, False)

以上所讲内容只是涉及document的加密,Lotus里面还有db的加密,和邮件的加密等,以后有空再研究,或者哪位有这方面的资料也可以拿出来交流下。

参考资料:How to remove encryption from documents---
阅读(860) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:Lotus Encryption (续一)

给主人留下些什么吧!~~