XmlIni(5版) 可以像Iniㄧ樣簡單使用, 卻又多了一堆超級功能 |
|
powerhowardchen
初階會員 發表:15 回覆:28 積分:28 註冊:2004-04-19 發送簡訊給我 |
各位大大您好, 這是 XmlIni 的更新版本. 原本發表的舊版的 XmlIni 文章:
(XmlIni(4版) 可以像Iniㄧ樣簡單使用, 卻又可以存Binary資料)
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=64653 這次主要是增加了 AES對稱式方式加密 與 RSA非對稱式方式加密,
讓 XmlIni 可以在傳遞資料時更有保障. 關於 XmlIni 的創造起因, 請參考下面說明.
我目前想不出來還要加哪些功能, 希望各位能多給點意見. PS.
看到了 "circusmonkey" 大大在 Delphi K.Top 的回覆
(http://delphi.ktop.com.tw/topic.php?TOPIC_ID=64653),
我後來去測開一個 573KB 的 Ini, 需時約 37秒(Pentium4 2.4G),
這是修改後的極限, 不能再快了, 這是由於我是在做轉檔,
不是僅僅讀某個元素然後離開, 所以, 盡力了, 這是極限, 對不起
"circusmonkey" 大大, 也謝謝指教. ================================================================================
版本更新 2005.09.19 加入新功能 TXmlIni:
1.加入加密模式 EncryptMode 屬性, 有以下選項
xiemAuto: 自動判斷
xiemPlain: 明文
xiemAES: AES密文
xiemRSA: RSA密文
2.加入 AES 加密能力, 使 XmlIni 檔案可以以對稱式方式加密
處理流程:
A.於寫入 XmlIni 檔案時
1) 如果 EncryptMode=xiemAuto 且 Trim(Password) <> '',
或是 EncryptMode=xiemAES, 則為啟動 AES 檔案加密模式
2) 設定為壓縮模式 Compressed := True;
3) 以 AES 128 加密儲存
B.於讀取 XmlIni 檔案時
1) 若是被判定為已經過 AES 加密的檔案, 則為啟動 AES 檔案解密模式,
否則尋原本檔案讀取方式處理
2) 設定為壓縮模式 Compressed := True;
3) 以 AES 128 解密讀取
應用需求:
該加密解密程序需要 Password, Password 可以為16字元長度內的文字.
版權:
該加密程式是取自部分的 "ElAES.pas" (Advanced Encryption Standard (AES),
Copyright (c) 1998-2001 EldoS, Alexander Ionov), 由 Delphi K. Top
所取得 (http://delphi.ktop.com.tw/topic.php?TOPIC_ID=28295),
由站長大大 領航天使 所發布, 感謝站長.
3.加入 RSA 搭配 AES 加密能力, 使 XmlIni 檔案可以以非對稱式方式加密
處理流程:
A.於寫入 XmlIni 檔案時
1) 如果 EncryptMode=xiemAuto 且 Trim(PublicKey) <> '',
或是 EncryptMode=xiemRSA, 則為啟動 RSA 檔案加密模式
2) 設定為壓縮模式 Compressed := True;
3) 先產生亂數的 暫時密碼, 然後以該 暫時密碼 用 AES 128 加密儲存
4) 將該亂數密碼以 RSA 加密儲存於檔頭
B.於讀取 XmlIni 檔案時
1) 若是被判定為已經過 RSA 加密的檔案, 則為啟動 RSA 檔案解密模式,
否則尋原本檔案讀取方式處理
2) 設定為壓縮模式 Compressed := True;
3) 以 PrivateKey 用 RSA 解密, 得到暫時密碼
3) 以 暫時密碼 用 AES 128 解密讀取
應用需求:
該加密程序需要 PublicKey, PublicKey 必須經由 GenerateNewKey 產生.
該解密程序需要 PrivateKey, PrivateKey 亦必須經由 GenerateNewKey 產生.
由於該組程式略顯笨重, 如果為了讓XmlIni.pas可以獨立運作,
不想要攜帶 "FG*.pas" 等程式時, 且沒有需要使用 RSA 加密的功能時,
可以將 {$DEFINE RSA_ENCRYPT_ENABLED} 給 Remark 註記起來,
於程式 Compiler 時將不會再連結 FG*.pas 等程式
版權:
該加密程式是 uses "FGInt.pas"、"FGIntRSA.pas"、
"FGIntPrimeGeneration.pas" 系列程式 (copyright 2000, Walied Othman),
請參考該程式內版權說明 修正程式 1.對於 TXmlIniKey 在資料型態(DataType)為 DateTime, Date, Time 的處理,
改為XML(Soap)標準格式(ISO8601規範),
"yyyy-mm-ddThh:nn:ss.zzz TimeZoneBias"(eg. 2005-09-17T17:32:21.456 08:00),
但是仍然保留原時間文字的讀取相容能力
2.修改 DataType 的判斷程序, 增加 xidtUnknow TXmlIniDataType,
原本作業為"當 Key 的值被輸入時自動分析DataType",
改為"當 DataType 的值被讀取時才分析DataType", 加速資料存入速度
3.調整讀取 Ini 檔案時的程序, 讓讀取 Ini 時速度增快,
所需時間約為 4版 (2005.02.02版) 的 1/2
================================================================================ (諸多更版說明略過... 請參考壓縮檔內說明) ================================================================================
初版 XmlIni 是為了解決以下問題而產生出來的,
問題有
1. 要能像Ini檔一樣好用, 如可以用Section與Key的分類能力
2. 要能跨平台, 像Ini只能用在Windows, 其他如Unix或是Java就不好用了
3. 要能存大量資料, Ini有資料量限制
4. 要能存二進制資料, 這樣就可以夾帶各種檔案了 所以, 以Xml為基礎, 我規劃了ㄧ個具ini基本能力的Xml檔案格式, 並寫了該檔案的應用程式庫"XmlIni.pas". 該程式內有一個物件TXmlIni, 不需經過Vcl註冊, 像Iniㄧ樣的叫用即可. TXmlIni支援以下功能(特徵):
1. 具有壓縮能力(使用ZLib)
2. 儲存成其他程式語言看得懂得xml(在非壓縮的情況下)
3. 具Stream串流載入與輸出能力
4. 具字串載入與輸出能力
5. 具Base64能力(當使用壓縮時, 則輸出字串將強迫為Base64格式)
6. 具自動存檔能力 由於本程式採用高度容錯的角度撰寫, 所以使用上很簡單, 但是若是有一些資料操作的錯誤, 將會不易察覺. 程式內建資源回收, 會將空項目自動清除. ==================================================
Howard Chen.
Delphi, Java 我的神.....
.NET 垃圾筒在哪裡?...
|
powerhowardchen
初階會員 發表:15 回覆:28 積分:28 註冊:2004-04-19 發送簡訊給我 |
不好意思, 補傳畫面截圖
附帶說明一下:
用XmlIni寫程式非常簡單, 程式碼如下. uses XmlIni; var
XI: TXmlIni;
begin
XI := TXmlIni.Create('C:\TestFile.xi');
try
if XI['SectionA']['Hello'] = '你好' then
XI['SectionA']['Response'] := '天氣真好, 我也很好'
else
XI['SectionA']['Response'] := '沒禮貌!';
XI['SectionB']['Simple'] := '好簡單!';
XI['SectionB']['Easy'] := '好容易!';
XI['SectionC']['Free'] := '好輕鬆!';
XI['SectionC']['Fast'] := '好快速!';
XI.SaveToFile;
finally
XI.Free;
end;
end; 要讓程式簡單上手, 是我撰寫元件的宗旨之ㄧ! ==================================================
Howard Chen.
Delphi, Java 我的神.....
.NET 垃圾筒在哪裡?...
|
alex0628
一般會員 發表:13 回覆:24 積分:7 註冊:2002-04-15 發送簡訊給我 |
|
SENFO
一般會員 發表:13 回覆:22 積分:7 註冊:2006-07-10 發送簡訊給我 |
|
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |