以檔案求出MD5..... |
答題得分者是:pcboy
|
hipig
高階會員 發表:31 回覆:75 積分:111 註冊:2007-01-15 發送簡訊給我 |
|
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
<textarea class="delphi" rows="10" cols="60" name="code"> // [Delphi7] // GetFileMD5 讀取檔案內容 MD5 值 unit Unit3; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdHash, IdHashMessageDigest, Shellapi, Math; function GetFileMD5(sFilename:string): String; implementation function GetFileMD5(sFileName:String):String; // 要 uses IdHash, IdHashMessageDigest; Var Digest: T4x4LongWordRecord; S, S1: String; i: Integer; md5: TIdHashMessageDigest5; fs : TFileStream; FileHandle: Integer; begin SetLength(S, 16); if FileExists (sFileName) then begin md5:=TIdHashMessageDigest5.Create; try FileHandle := FileOpen(sFileName, fmOpenRead) ; if FileHandle>=0 then begin FileClose(FileHandle); // fs := TFileStream.Create(sFileName, fmOpenRead or fmShareDenyWrite) fs := TFileStream.Create(sFileName, fmOpenRead); //用 EFOpenError 接收例外 Digest :=md5.HashValue(fs); Move(Digest, S[1], 16); for i := 1 to Length(S) do begin S1 := S1 Format('x', [Byte(S[i])]); end; while Pos(' ', S1) > 0 do S1[Pos(' ', S1)] := '0'; Result:=S1; end else Result:='N/A'; finally if FileHandle>=0 then begin md5.Free; fs.Free; end; end; end; end; </textarea>
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案! 子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問! |
hipig
高階會員 發表:31 回覆:75 積分:111 註冊:2007-01-15 發送簡訊給我 |
感謝前輩指教,我寫這程式主要用於整合滑鼠右鍵檢查某些小檔案.
因為需要就自己動手寫一個給自己用,而演算法部份不是不了解 (如同我懂OSI 網路七層協定卻不一定要自己做出網路元件來用) 但畢竟不是本行且只是我想利用現有的程式碼加以修該出給自己用的工具,而不是閉門造車 (不過還是參考FSF的MD5 library改出了一個BCB給用的) 在此也一併感謝pcboy前輩的指導 ===================引 用 文 章=================== 你應該可以找到 MD5 的演算法吧。 直接用演算法自己做呀。 為什麼一定要別人寫好範例? |
bugmans
高階會員 發表:95 回覆:322 積分:188 註冊:2003-04-12 發送簡訊給我 |
hipig在發問前有先找過文章,至少是值得嘉許的
我發現有個地方要注意的 (1)MyHashMD5.cpp少了#include <vcl.h> 原本的角括號因為html的關係消失了,看網頁的原始碼就可以看到完整的include敘述 (2)將MyHashMD5.h和MyHashMD5.cpp加入專案 (3)在Unit1.h加入#include "MyHashMD5.h" 測試程式 TFileStream *stream=new TFileStream(ExtractFilePath(Application->ExeName) "test.txt",fmOpenRead); String md5=HashValue(stream); delete stream; test.txt放在執行檔相同的目錄下 假如還試不出來,我再將整個檔案上傳 |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
插花一下,PO程式碼的方式可以參考下面連結
http://delphi.ktop.com.tw/board.php?cid=32&fid=107&tid=86625 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |