2011-09-21 71 views
2

我目前正在將一個項目(使用加密技術)從Delphi 6轉換爲XE。這個項目使用舊版的Delphi Encryption Compendium,它在XE中不起作用。所以我想我會從該組件設置交換到LockBox。有兩個版本的LockBox - 2和3.我在Delphi 6中使用LockBox2沒有問題。雖然我會在XE中使用LockBox3,但是我遇到的問題是使用時無法獲得相同的結果ExFile演示程序(來自LockBox2)。將TurboPower Lockbox 2轉換成LockBox 3

在該演示中,我選擇Blowfish算法將密碼設置爲'testkey',不帶引號,程序將加密文件。

在Delphi XE,我滴到形式

Codec1: TCodec; 
CryptographicLibrary1: TCryptographicLibrary; 

並鏈接到CODEC1和CryptographicLibrary1點擊執行以下的代碼的按鈕時(發現LockBox3現場類似的代碼用於解密字符串)....

codec1.StreamCipherId := BlockCipher_ProgId; 
    codec1.BlockCipherId := Blowfish_ProgId; 
    codec1.ChainModeId := ECB_ProgId; 
    codec1.Password := 'testkey'; 
    codec1.encryptFile('d:\tools\mingw\bin\md5.exe', 
    'd:\tools\mingw\bin\md5_xe_2.exe'); 

但最終結果是輸出文件的大小與LockBox2 ExFile演示文件的大小不同。

所以我的問題是....

  1. 我做了什麼錯在XE代碼之上,使得我給出了不同的結果,從LockBox2 ExFile演示?

  2. 我應該在XE中使用LockBox2嗎?

  3. 與2有關,是否有人照看代碼LockBox2(用於XE)?

任何援助將不勝感激。

問候,

+1

您確定LockBox2的結果正確嗎?你是否用另一個加密實用程序測試了它,找出哪個庫給你錯誤的結果? LockBox 3有一個支持論壇,這似乎是積極的。你有沒有試過在那裏問你的問題?這是它的網址:http://lockbox.seanbdurkin.id.au/tiki-view_forum.php?forumId=2 – vcldeveloper

+1

XE使用Unicode,因此也要考慮 - 它會影響字符串處理,這可能會影響大小。 – mj2008

回答

3
  1. 用戶 「mj2008」 擊中了要害。 Delphi 6使用ansistring作爲字符串。 Delphi XE使用UTF-16LE。在屏幕上呈現或從鍵盤輸入的相同密碼是完全不同的數據,因此結果自然會有所不同。

關於預期的文件大小。 Blowfish是一個8字節(64位)塊模式密碼。儘管其他鏈接模式會有所不同,但ECB使用塊填充填充最後一個塊。 TPLB3使用ECB的RFC1321填充方案,也就是說它用一個80字節填充消息,然後填充足夠的零以獲得整個塊大小。 TPLB2使用不同的方案:填充零直到最後一個字節,它設置爲包塊中預填充字節的數量。

所以,如果你的明文文件的大小爲X個字節,如果你用的Blowfish加密/ ECB,然後將密文的大小Y,應該是:

Y = X + 8 - (X模8)

(參考論壇主題了解更多詳情:http://lockbox.seanbdurkin.id.au/tiki-view_forum_thread.php?comments_parentId=154&topics_offset=2&topics_sort_mode=lastPost_desc&forumId=2

* 2。由於我對你的程序的目的和上下文一無所知,並且具體情況可能會影響這個問題,所以我會說你的Delphi XE程序使用TurboPower LockBox 3。如果您需要與舊的LB2密文進行互操作,那麼一次寫入並執行一次轉換程序,將LB2密文轉換爲LB3密文。然後丟棄LB2。

* 3。我繼續維護LB2,但我只會修復LB2中報告的主要缺陷,並且我不會修復LB2中的RSA組件。