



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、的字段的加密功能的实现 摘 要:在visubal basic6.0中,利用微软的ado技术,讨论了如何把ole字段加密存储到access数据库中,以及如何从access中获取ole字段并解密的实现方法。 关键词:ado;ole字段;数据加密;visubal basic 0 前言 在开发mis或oa类的软件时,经常需要将外部图片或各类文件保存在数据库中,目前的关系数据库大都有一个大二进制字段,可以保存该类数据。将图片及文件以二进制方式存储在数据库中,可以考虑以下两种方法:一是使用ado的stream 对象的loadfromfile方法以及saveto
2、file方法实现;二是使用ado的 recordset.field 对象的 getchunk 以及 appendchunk 方法实现。鉴于数据的安全性,需要将保存在ole字段的数据加密。 1 实现步骤 一个通用的方法是可以先将外部文件或图片加密,然后再保存到ole字段中,解密时反向操作即可,缺点是效率不高。对于使用ado的stream对象或ado的 recordset.field 对象的 getchunk、 appendchunk 保存数据的方法,由于在操作中使用了数组,可以直接将加密、解密算法在内存中直接操作,所以在效率及安全方面都比前者的方法要好。 2 appendchunk及getchu
3、nk方法简介 2.1 appendchunk方法 语法 :object.appendchunk data; 对象data是变体型,包含追加到对象中的数据。使用 field 或 parameter 对象的 appendchunk 方法可将长二进制或字符数据填写到对象中。在系统内存有限的情况下,可以使用 appendchunk 方法对长整型值进行部分而非全部的操作。 在 field 对象上的第一个 appendchunk 调用将数据写入字段,覆盖任何现有的数据,随后的 appendchunk 调用则添加到现有数据。如果将数据追加到一个字段,然后设置或读取当前记录中另一个字段的值,ado 则认为已将
4、数据追加到第一个字段。如果在第一个字段上再次调用 appendchunk 方法,那么 ado 将调用解释为新的 appendchunk 操作并覆盖现有数据。访问其他recordset 对象(并非第一个 recordset 对象的复制品)中的字段将不会破坏 appendchunk 操作。 2.2 getchunk方法 语法:variable = field.getchunk( size ) ;使用 field 对象的 getchunk 方法来检索其中的部分或全部长二进制或字符数据。在系统内存有限的情况下,可使用 getchunk 方法操作部分而非全部 long 值。 getchunk 调用返回的
5、数据将被分配给 variable。如果 size 大于剩余的数据,getchunk 方法仅返回剩余的数据而不用空格填充 variable。如果该字段为空,getchunk 方法将返回 null 值。每个后续的 getchunk 调用将从上一次 getchunk 调用停止处开始检索数据。 3 ado stream简介 顾名思义,ado stream以流的方式来操作文件或记录。通过open 方法来打开 stream 对象来操作二进制或文本数据的流,通过read或write来读写流。用 savetofile 和 loadfromfile 方法保存和恢复文件中的数据。 4 关键代码分析 4.1 使用a
6、ppendchunk将文件保存到ole字段: public sub copyfiletofield(fld as adodb.field, sfname) dim iosize as long dim i as long, ifsize as long,ikey as byte ikey = 2'密钥 dim a1() as byte, a2() as byte, a3() as byte '定义字节数组存放文件内容 ifsize = filelen(sfname) open sfname for binary access read as #1 redim a2(ifsize
7、) '放大数组 redim a3(ifsize) dim j as long dim llen as long llen = ubound(a3) get #1, , a3() for j = 0 to llen-1 a2(j) = a3(j) xor ikey'这里用简单的异或算法来加密 next fld.appendchunk a2'写入ole字段 close #1 end sub 4.2 使用getchunk将ole字段保存为文件: public sub copyfieldtofile(sfname as string, fld as adodb.field) o
8、n error resume next open sfname for binary access write lock write as #1 iosize = fld.actualsize ichunks = iosize / isize '分块数目 irestsize = iosize mod isize '余下的部分 a1() = fld.getchunk(irestsize) a2 = a1 llen = ubound(a1) for j = 0 to llen-1 a2(j) = a1(j) xor ikey '再次异或计算就还原为原来的文件了 next p
9、ut #1, , a2() end if next i close #1 end sub 4.3 以流的方式保存文件到数据库中 public sub savefiletodb(f as string, fld as string) dim istm as adodb.stream dim ire as adodb.recordset dim iconcstr as string set istm = new adodb.stream dim ifilesize as long dim a1() as byte,a2() as byte with istm .type = adtypebinar
10、y'二进制模式 .open .loadfromfile f ifilesize = .size .position = 0 a1 = .read ''读取流到字节数组 end with istm.position = 0 a2 = a1 dim i as long ifilesize = ubound(a1) for i = 0 to ifilesize-1 a2(i) = a1(i) xor 2 next istm.write a2 '数据库连接字符串 iconc = cnnstr '打开保存文件的表 set ire = new adodb.recor
11、dset istm.position = 0 with ire .open “tbword”, iconc, adopenkeyset, adlockoptimistic .fields(fld) = istm.read .update end with '完成后关闭对象 ire.close istm.close end sub 4 以流的方式从数据库读取数据生成文件 public function readfilefromdb(f as string, fld as string) as string set ire = new adodb.recordset ire.open “t
12、bword”, iconc, adopenkeyset, adlockreadonly '保存到文件 set istm = new adodb.stream with istm .mode = admodereadwrite .type = adtypebinary .open .write ire(fld) .position = 0 a1 = ire(fld) a2 = a1 dim i as long ifilesize = ubound(a1) for i = 0 to ifilesize a2(i) = a1(i) xor 2 next .write a2 .position = 0 .savetofile f, adsavecreateoverwrite'生成文件 end with ire.close istm.close end function 5 结束语 ado的stream对象和 recordset.field 对象的 getchunk、 appendchunk 方法是操作数据库ole字段常用的两种方法。getchunk、
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高校实验室安全基础
- 护肤品新品课件
- 2024年CFA考试新变化试题及答案
- 山东省诸城第一中学春考部2024-2025学年高三上学期10月月考数学试题(原卷版)
- 英语 第四册(五年制高职)5课件 Unit5 Quality Assurance
- 武威一中2024-2025学年下学期高一年级开学检测地理试卷
- 太阳花绘画课件
- 江西省抚州市2024-2025学年高一上学期期末地理试题
- 2024年特许金融分析师考试重难点及答案
- 反复练习的重要性:CFA试题及答案
- 2025年成考思修模拟试题及答案
- 2025年医保知识考试题库及答案(医保数据安全)试卷
- 2024年安康市旬阳市市直教育单位遴选教师考试真题
- 2025年北京平谷区高三一模高考数学模拟试卷(含答案详解)
- TCHSA 081-2024 接受双膦酸盐治疗患者拔牙围手术期处理专家共识
- 2025年陕西航空职业技术学院单招职业适应性考试题库汇编
- 学校安全管理工作总结
- 活动策划执行合同协议书
- 2025年时政题库及答案(100题)
- 2025年钟山职业技术学院单招职业技能测试题库带答案
- 2025年湖北科技职业学院单招职业技能测试题库参考答案
评论
0/150
提交评论