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

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

 
powerhowardchen
初階會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-02-21 01:42:12 IP:118.165.xxx.xxx 訂閱
各位大大您好, 這是 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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-02-22 01:05:11 IP:114.37.xxx.xxx 訂閱
感謝分享 ^^
系統時間:2024-04-29 4:06:13
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!