線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:5320
推到 Plurk!
推到 Facebook!

XmlIni(5版) 可以像Iniㄧ樣簡單使用, 卻又多了一堆超級功能

 
powerhowardchen
初階會員


發表:15
回覆:28
積分:28
註冊:2004-04-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-19 01:56:59 IP:61.70.xxx.xxx 未訂閱
各位大大您好, 這是 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 垃圾筒在哪裡?...
附加檔案:78562_XmlIniEditor5.zip
powerhowardchen
初階會員


發表:15
回覆:28
積分:28
註冊:2004-04-19

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-19 02:24:08 IP:61.70.xxx.xxx 未訂閱
不好意思, 補傳畫面截圖 附帶說明一下: 用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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-10-26 18:10:51 IP:211.21.xxx.xxx 未訂閱
我在Compile 內附的Sample的時候出現了以下的錯誤 : [Error] XmlIni.pas(50): Method 'GetSize' not found in base class [Fatal Error] XmlIni.pas(330): Could not compile used unit 'FGIntPrimeGeneration.pas' 請問要怎麼處理呢?
SENFO
一般會員


發表:13
回覆:22
積分:7
註冊:2006-07-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-05-14 10:18:42 IP:61.219.xxx.xxx 訂閱
 可否煩請大大改成BCB版的,感謝
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-05-11 18:57:54 IP:203.75.xxx.xxx 未訂閱
這東西真棒!

感謝分享唷!

系統時間:2024-04-29 6:21:35
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!