<wbr id="ede8e"></wbr><bdo id="ede8e"><var id="ede8e"><optgroup id="ede8e"></optgroup></var></bdo>
    1. <sub id="ede8e"></sub>
    2. <sub id="ede8e"></sub>
    3. 18禁无遮挡啪啪无码网站,真人无码作爱免费视频,2018年亚洲欧美在线v,国产成人午夜一区二区三区 ,亚洲精品毛片一区二区,国产在线亚州精品内射,精品无码国产污污污免费,国内少妇人妻偷人精品
      首頁 > 文章中心 > 正文

      OLE字段加密功能

      前言:本站為你精心整理了OLE字段加密功能范文,希望能為你的創作提供參考價值,我們的客服老師可以幫助你提供個性化的參考范文,歡迎咨詢。

      OLE字段加密功能

      摘要:在VisubalBasic6.0中,利用微軟的ADO技術,討論了如何把OLE字段加密存儲到ACCESS數據庫中,以及如何從ACCESS中獲取OLE字段并解密的實現方法。

      關鍵詞:ADO;OLE字段;數據加密;VisubalBasic

      0前言

      在開發MIS或OA類的軟件時,經常需要將外部圖片或各類文件保存在數據庫中,目前的關系數據庫大都有一個大二進制字段,可以保存該類數據。將圖片及文件以二進制方式存儲在數據庫中,可以考慮以下兩種方法:一是使用ADO的Stream對象的LoadFromFile方法以及SaveToFile方法實現;二是使用ADO的Recordset.Field對象的GetChunk以及AppendChunk方法實現。鑒于數據的安全性,需要將保存在OLE字段的數據加密。

      1實現步驟

      一個通用的方法是可以先將外部文件或圖片加密,然后再保存到OLE字段中,解密時反向操作即可,缺點是效率不高。對于使用ADO的Stream對象或ADO的Recordset.Field對象的GetChunk、AppendChunk保存數據的方法,由于在操作中使用了數組,可以直接將加密、解密算法在內存中直接操作,所以在效率及安全方面都比前者的方法要好。

      2AppendChunk及Getchunk方法簡介

      2.1AppendChunk方法

      語法:Object.AppendChunkData;對象Data是變體型,包含追加到對象中的數據。使用Field或Parameter對象的AppendChunk方法可將長二進制或字符數據填寫到對象中。在系統內存有限的情況下,可以使用AppendChunk方法對長整型值進行部分而非全部的操作。

      在Field對象上的第一個AppendChunk調用將數據寫入字段,覆蓋任何現有的數據,隨后的AppendChunk調用則添加到現有數據。如果將數據追加到一個字段,然后設置或讀取當前記錄中另一個字段的值,ADO則認為已將數據追加到第一個字段。如果在第一個字段上再次調用AppendChunk方法,那么ADO將調用解釋為新的AppendChunk操作并覆蓋現有數據。訪問其他Recordset對象(并非第一個Recordset對象的復制品)中的字段將不會破壞AppendChunk操作。

      2.2Getchunk方法

      語法:variable=field.GetChunk(Size);使用Field對象的GetChunk方法來檢索其中的部分或全部長二進制或字符數據。在系統內存有限的情況下,可使用GetChunk方法操作部分而非全部Long值。

      GetChunk調用返回的數據將被分配給Variable。如果Size大于剩余的數據,GetChunk方法僅返回剩余的數據而不用空格填充Variable。如果該字段為空,GetChunk方法將返回Null值。每個后續的GetChunk調用將從上一次GetChunk調用停止處開始檢索數據。

      3ADOStream簡介

      顧名思義,ADOStream以流的方式來操作文件或記錄。通過Open方法來打開Stream對象來操作二進制或文本數據的流,通過Read或Write來讀寫流。用SaveToFile和LoadFromFile方法保存和恢復文件中的數據。

      4關鍵代碼分析

      4.1使用AppendChunk將文件保存到OLE字段:

      PublicSubCopyFiletoField(fldAsADODB.Field,sfName)

      DimioSizeAsLong

      DimiAsLong,ifSizeAsLong,iKeyasByte

      iKey=2''''密鑰

      DimA1()AsByte,A2()AsByte,A3()AsByte''''定義字節數組存放文件內容

      ifSize=FileLen(sfName)

      OpensfNameForBinaryAccessReadAs#1

      ReDimA2(ifSize)''''放大數組

      ReDimA3(ifSize)

      DimjAsLong

      DimlLenAsLong

      lLen=UBound(A3)

      Get#1,,A3()

      Forj=0TolLen-1

      A2(j)=A3(j)XoriKey''''這里用簡單的異或算法來加密

      Next

      fld.AppendChunkA2''''寫入OLE字段

      Close#1

      EndSub

      4.2使用GetChunk將OLE字段保存為文件:

      PublicSubCopyFieldToFile(sfNameAsString,fldAsADODB.Field)

      OnErrorResumeNext

      ……

      OpensfNameForBinaryAccessWriteLockWriteAs#1

      ioSize=fld.ActualSize

      iChunks=ioSize/iSize''''分塊數目

      iRestSize=ioSizeModiSize''''余下的部分

      A1()=fld.GetChunk(iRestSize)

      A2=A1

      lLen=UBound(A1)

      Forj=0TolLen-1

      A2(j)=A1(j)XoriKey''''再次異或計算就還原為原來的文件了

      Next

      Put#1,,A2()

      EndIf

      ……

      Nexti

      Close#1

      EndSub

      4.3以流的方式保存文件到數據庫中

      PublicSubSaveFileToDB(fAsString,fldAsString)

      DimiStmAsADODB.Stream

      DimiReAsADODB.Recordset

      DimiConcStrAsString

      SetiStm=NewADODB.Stream

      DimiFileSizeAsLong

      DimA1()AsByte,A2()AsByte

      WithiStm

      .Type=adTypeBinary''''二進制模式

      .Open

      .LoadFromFilef

      iFileSize=.Size

      .Position=0

      A1=.Read''''''''讀取流到字節數組

      EndWith

      iStm.Position=0

      A2=A1

      DimiAsLong

      iFileSize=UBound(A1)

      Fori=0ToiFileSize-1

      A2(i)=A1(i)Xor2

      Next

      iStm.WriteA2

      ''''數據庫連接字符串

      iConc=cnnStr

      ''''打開保存文件的表SetiRe=NewADODB.Recordset

      iStm.Position=0

      WithiRe

      .Open“tbWord”,iConc,adOpenKeyset,adLockOptimistic

      .Fields(fld)=iStm.Read

      .Update

      EndWith

      ''''完成后關閉對象

      iRe.Close

      iStm.Close

      EndSub

      4以流的方式從數據庫讀取數據生成文件

      PublicFunctionReadFileFromDB(fAsString,fldAsString)AsString

      ……

      SetiRe=NewADODB.Recordset

      iRe.Open“tbWord”,iConc,adOpenKeyset,adLockReadOnly

      ''''保存到文件

      SetiStm=NewADODB.Stream

      WithiStm

      .Mode=adModeReadWrite

      .Type=adTypeBinary

      .Open

      .WriteiRe(fld)

      .Position=0

      A1=iRe(fld)

      A2=A1

      DimiAsLong

      iFileSize=UBound(A1)

      Fori=0ToiFileSize

      A2(i)=A1(i)Xor2

      Next

      .WriteA2

      .Position=0

      .SaveToFilef,adSaveCreateOverWrite''''生成文件

      EndWith

      iRe.Close

      iStm.Close

      EndFunction

      5結束語

      ADO的Stream對象和Recordset.Field對象的GetChunk、AppendChunk方法是操作數據庫OLE字段常用的兩種方法。GetChunk、AppendChunk方法相對來說要通用一些,在一些低版本的ADO中,Stream可能得不到很好的支持。限于篇幅,文中的代碼略有刪減。

      參考文獻

      [1]魏新俊,郭力平,MicrosoftAccess2.0/7.0[M].北京:清華大學出版社,1997.

      [2]陳虹頤,何春.VB6.0中利用ADO對象實現數據庫編程[J].甘肅科技,2007,23(4).

      文檔上傳者
      主站蜘蛛池模板: 国产精品一线天粉嫩av| 好吊视频专区一区二区三区 | 国产精品视频不卡一区二区| 国产一区二区三区色老头| 中文国产日韩欧美二视频| 亚洲国产精品久久电影欧美| 国产成人亚洲综合91精品| 国产精品不卡一二三区| 人妻在线无码一区二区三区| 久久人妻国产精品| 丰满少妇内射一区| 国产精品一二二区视在线 | 精品一区二区三区日韩版| 欧美日韩国产综合草草| 蜜臀98精品国产免费观看| 欧美牲交a欧美牲交aⅴ一| 久久夜夜免费视频| 黑人巨大AV在线播放无码| 午夜通通国产精品福利| 亚洲一区二区精品极品| 午夜福利片1000无码免费| 亚洲熟伦熟女新五十熟妇| 亚洲综合国产激情另类一区| 国产午夜福利视频第三区| 欧美成人无码a区视频在线观看| 国产一区二区精品久久凹凸| 99久久亚洲综合精品成人网| 国产又色又爽又黄的视频在线| 国产国产乱老熟女视频网站97| 丰满的熟妇岳中文字幕| 亚洲国产欧美一区二区好看电影| 欧美大胆老熟妇乱子伦视频| 少妇高潮水多太爽了动态图| 日韩精品国产中文字幕| 99精品人妻少妇一区| 国产亚洲精品综合一区二区 | 乱中年女人伦av三区| 99精品国产综合久久久久五月天| 久久亚洲AV成人网站玖玖| 国产精品一区二区三区专区| 久久综合色一综合色88|