下載UniDAC最新版本
我們提供的服務(wù)有:網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、久治ssl等。為上千企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的久治網(wǎng)站制作公司
Universal Data Access Components (UniDAC)是一款通用數(shù)據(jù)庫訪問組件,提供了多個(gè)數(shù)據(jù)庫的直接訪問,如針對(duì)Windows的Delphi, C++Builder, Lazarus (以及 Free Pascal) , Mac OS X, iOS, Android, Linux和64和32位的FreeBSD等等。我們將長期的經(jīng)驗(yàn)集于這個(gè)小組件,提供統(tǒng)一的數(shù)據(jù)庫連接訪問(如oracle、微軟SQL等等)。這意味著您可以在您的項(xiàng)目之間輕松地切換不同的數(shù)據(jù)庫,以及創(chuàng)建跨數(shù)據(jù)庫應(yīng)用程序接口。
UniDAC擁有內(nèi)置的數(shù)據(jù)加密和解密算法。要啟用加密,應(yīng)將TCREncryptor組件附加到數(shù)據(jù)集,并指定加密字段。在表中插入或更新數(shù)據(jù)時(shí),將按照指定的方法在客戶端加密信息。同樣,當(dāng)從服務(wù)器讀取數(shù)據(jù)時(shí),組件會(huì)“即時(shí)”解密這些字段中的數(shù)據(jù)。
對(duì)于加密,您應(yīng)該指定數(shù)據(jù)加密算法(EncryptionAlgorithm屬性)和密碼(Password屬性)。根據(jù)指定的密碼生成密鑰,對(duì)數(shù)據(jù)進(jìn)行加密。也可以使用SetKey方法直接設(shè)置密鑰。
存儲(chǔ)加密數(shù)據(jù)時(shí),除了初始數(shù)據(jù)外,還可以存儲(chǔ)其他信息:GUID和散列。(方法在TCREncryptor.DataHeader屬性中指定)。
如果數(shù)據(jù)存儲(chǔ)時(shí)沒有附加信息,則無法確定數(shù)據(jù)是否加密。在這種情況下,只應(yīng)將加密的數(shù)據(jù)存儲(chǔ)在列中,否則,由于無法區(qū)分?jǐn)?shù)據(jù)的性質(zhì),會(huì)出現(xiàn)混淆。同樣,從信息保護(hù)的角度來看,類似的源數(shù)據(jù)將以加密的形式等價(jià),這是不好的。這種方法的優(yōu)點(diǎn)是初始數(shù)據(jù)的大小等于加密數(shù)據(jù)的大小。
為了避免這些問題,建議與數(shù)據(jù)一起存儲(chǔ)適當(dāng)?shù)腉UID,這對(duì)于指定記錄中的值是加密的,并且在讀取數(shù)據(jù)時(shí)必須對(duì)其進(jìn)行解密是必需的。這允許您避免混淆并將加密和解密的數(shù)據(jù)保存在同一列中,這在使用現(xiàn)有表時(shí)尤為重要。同樣,這樣做時(shí),在數(shù)據(jù)加密之前會(huì)生成一個(gè)隨機(jī)初始化向量,用于加密。這允許您接收相同初始數(shù)據(jù)的不同結(jié)果,從而顯著提高了安全性。
最可取的方法是存儲(chǔ)哈希數(shù)據(jù)以及GUID和加密信息,以確定數(shù)據(jù)的有效性并驗(yàn)證其完整性。這樣,如果在傳輸或數(shù)據(jù)存儲(chǔ)的任何階段試圖偽造數(shù)據(jù),在解密數(shù)據(jù)時(shí),都會(huì)產(chǎn)生相應(yīng)的錯(cuò)誤。為了計(jì)算散列,可以使用SHA1或MD5算法(HashAlgorithm屬性)。
后兩種方法的缺點(diǎn)是存儲(chǔ)輔助信息需要額外的內(nèi)存。
由于加密算法使用一定大小的緩沖區(qū),并且在存儲(chǔ)附加信息時(shí),需要使用附加內(nèi)存,因此TCREncryptor僅支持對(duì)字符串或二進(jìn)制字段(ftString、ftWideString、ftBytes、ftvarBytes、ftBlob、ftMemo、ftWideMemo)進(jìn)行加密。如果使用字符串字段加密,首先對(duì)數(shù)據(jù)進(jìn)行加密,然后將獲得的二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為十六進(jìn)制格式。在這種情況下,數(shù)據(jù)存儲(chǔ)需要兩倍的空間(一個(gè)字節(jié)=2個(gè)十六進(jìn)制字符)。
因此,為了能夠加密其他數(shù)據(jù)類型(如日期、數(shù)字等),需要在表中創(chuàng)建二進(jìn)制或blob類型的字段,然后在數(shù)據(jù)映射的幫助下將其轉(zhuǎn)換為客戶機(jī)端的所需類型。
需要注意的是,在服務(wù)器端不可能通過加密字段進(jìn)行搜索和排序。只有在使用Locate和LocaTex方法對(duì)數(shù)據(jù)進(jìn)行解密之后,才能在客戶端上對(duì)這些字段執(zhí)行數(shù)據(jù)搜索。排序是通過設(shè)置TMemDataSet.IndexFieldNames屬性來執(zhí)行的。
例如:
例如,表中存儲(chǔ)了一個(gè)企業(yè)的員工列表,其中包含以下數(shù)據(jù):全名、雇用日期、工資和照片。我們希望所有這些數(shù)據(jù)都以加密形式存儲(chǔ)。編寫用于創(chuàng)建表的腳本:
其他資訊 |