XmlIni(5.7版 For Delphi 2010) 可以像Iniㄧ樣簡單使用, 卻又多了一堆超級功能 |
|
powerhowardchen
初階會員 發表:15 回覆:28 積分:28 註冊:2004-04-19 發送簡訊給我 |
各位大大您好, 這是 XmlIni 的更新版本. 本版開始支援Delphi2010以上,正在改寫RSA與AES加密功能,預計是先改為OpenSSL(非對稱式金鑰)與3DES(對稱式金鑰)的方式,目的是為了能相容其他程式語言,但是將會保留舊有的加密功能支援。 原本發表的舊版的 XmlIni 文章: (XmlIni(5版) 可以像Iniㄧ樣簡單使用, 卻又多了一堆超級功能) ================================================================================ 同時進行,但是程式是分開的。 ▼▼▼ Delphi 14 (RAD Studio 2010): 修正程式 TXmlIni: 2.為了避免字串轉碼失真,故將LoadFromString()與SaveToString()的輸出入字串改為 1.將所有的WideString改為string。 function XmlT_Base64ToStr(Base64: string): string; function Base64DecodeAnsiString(const Input: AnsiString): AnsiString; function Base64EncodeString(const Input: string; function Base64DecodeString(const Input: string; 更換Base64程式;以往的Base64程式有處理效率慢與程式龐大的缺點,且程式較為混亂 ================================================================================ 版本更新 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 ================================================================================ 版本更新 2005.02.02 加入新功能 TXmlIni: 1.加入所有 TIniFile 所支援的函式, 使 XmlIni 可以以 TIniFile 方式使用 TXmlIniKey: 1.DataType 屬性增加多種資料型態, 以符合原 Ini 檔案格式, 擴充後資料形態內含有 Text, Integer, Float, Bool, DateTime, Date, Time, Binary 2.加入 AsFloat, AsDate, AsTime 屬性, 以符合原 Ini 檔案格式 ================================================================================ 版本更新 2004.09.10 加入新功能 TXmlIni: 1.加入 LoadFromRegistry, SaveToRegistry 函式, 提供對 XmlIni 對 Registry 的存取功能 2.加入 LoadFromIni, SaveToIni 函式, 提供對 XmlIni 對 Ini 檔案的存取功能 3.加入 LoadFromShareMem, SaveToShareMem 函式, 使 XmlIni 的資料可以在多個執行程式間交換資料 4.加入 RaiseException 屬性, 使得錯誤訊息可以定義為"忽略"或是"往外傳遞" 5.將 AutoSave 屬性的預設值, 由 True 改為 False 6.加入 Mutex 互斥能力, 使多個執行程式同時存取下, 能夠避免衝突 TXmlIniSection: 1.加入 LoadFromRegistry, SaveToRegistry 函式, 提供對 XmlIni 對 Registry 的存取功能 2.加入 LoadFromIni, SaveToIni 函式, 提供對 XmlIni 對 Ini 檔案的存取功能 3.加入 RaiseException 屬性, 使得錯誤訊息可以定義為"忽略"或是"往外傳遞" TXmlIniKey: 1.將 BinaryMode 屬性修改為 DataType, 使程式能容易識別資料型態, 資料形態內含有 Text, Integer, Bool, DateTime, Binary 2.加入 RaiseException 屬性, 使得錯誤訊息可以定義為"忽略"或是"往外傳遞" ================================================================================ 版本更新 2004.07.05 加入新功能 TXmlIni: 1.加入 Equals 函式, 提供比對 TXmlIniSection 是否相異 2.加入 Append 函式, 提供加入 TXmlIniSection 的能力 3.加入 CopyFrom 函式, 提供複製 TXmlIniSection 的能力 ( CopyFrom = Clear Append ) 4.加入 XmlEncoding 屬性, 使儲存檔案時, 可以指定使用特定的編碼方式, 目前支援 xietUTF_8, xietUTF_16, xietBIG5, xietGB2312 等格式 TXmlIniSection: 1.修改 Create 建構式, 使 TXmlIniSection 能獨立使用 2.加入 Equals 函式, 提供比對 TXmlIniSection 是否相異 3.加入 Append 函式, 提供加入 TXmlIniSection 的能力 4.加入 CopyFrom 函式, 提供複製 TXmlIniSection 的能力 ( CopyFrom = Clear Append ) 5.加入 LoadFromStream, SaveToStream, LoadFromString, SaveToString, LoadFromBase64String, SaveToBase64String, LoadFromFile, SaveToFile 函式, 類似於 TXmlIni 的相同名稱函式, 其儲存檔案的檔案格式與 TXmlIni 相同; 使用參數 SectionName 可以指定欲讀取來源檔案特定的 Section, 或是寫入為目的檔案特定的 Section 6.加入 XmlEncoding 屬性, 使儲存檔案時, 可以指定使用特定的編碼方式, 目前支援 xietUTF_8, xietUTF_16, xietBIG5, xietGB2312 等格式 TXmlIniKey: 1.修改 Create 建構式, 使 TXmlIniKey 能獨立使用 2.加入 BinaryMode 屬性, 使程式容易識別資料是二進制還是文字 3.加入 AsDateTime 屬性, 能以 TDateTime 方式讀取鍵值 4.加入 ValueLoadFromFile 與 ValueSaveToFile 函式, 可以將鍵值自檔案讀取或是存入檔案 修正程式 1.原本使用 取代 '\n' 字元, 以及使用 取代 '\r' 字元, 將會增加資料長度的問題, 現已經取消該置換功能 2.於TXmlIniKey中, 加強二進制Binary資料存取能力, 修正部分Binary之記憶體管理問題 ================================================================================ 初版 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. 具自動存檔能力 由於本程式採用高度容錯的角度撰寫, 所以使用上很簡單, 但是若是有一些資料操作的錯誤, 將會不易察覺. 程式內建資源回收, 會將空項目自動清除. 編輯記錄
powerhowardchen 重新編輯於 2010-02-21 01:44:17, 註解 無‧
powerhowardchen 重新編輯於 2010-02-21 01:45:35, 註解 [code delphi]功能怪怪的,依然會把html tag顯示出來,所以不再使用[code]ej/ s/6‧ powerhowardchen 重新編輯於 2010-02-21 01:45:57, 註解 [code delphi]功能怪怪的,依然會把html tag顯示出來,所以不再使用[code]功能‧ |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |