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

Indy9 附件加密疑問

答題得分者是:GrandRURU
tuna5168
一般會員


發表:3
回覆:4
積分:1
註冊:2011-04-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-04-11 09:33:44 IP:59.120.xxx.xxx 訂閱
我利用了 Indy9 的 IdSMTP 與 Idmessage做了一個寄信功能
但現在有一個需求是需要加入附件與 附件要加密
下載附件時讓使用者打密碼
因為我還不是很熟悉Indy其他功能
目前我上網想搜查一下資料(往是否拉encode元件或smtp屬性設定方向查)
但目前還沒有查到如何做到這個功能
不知可否請各位先進給小妹一個提示
謝謝

//附件檔案
if FileExists('c:\chg.txt') then
TIdAttachment.Create(IdMessage1.MessageParts, 'c:\chg.txt')
else
showmessage('error');
GrandRURU
站務副站長


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-04-11 15:20:06 IP:61.219.xxx.xxx 未訂閱
可以直接將附件使用stream加密的做法
如TIdMessage.SaveToStream等方式
收取端也必需用對應的密碼才能解開並收取


===================引 用 tuna5168 文 章===================
我利用了 Indy9 的 IdSMTP 與 Idmessage做了一個寄信功能
但現在有一個需求是需要加入附件與 附件要加密
下載附件時讓使用者打密碼
因為我還不是很熟悉Indy其他功能
目前我上網想搜查一下資料(往是否拉encode元件或smtp屬性設定方向查)
但目前還沒有查到如何做到這個功能
不知可否請各位先進給小妹一個提示
謝謝

//附件檔案
if FileExists('c:\chg.txt') then
TIdAttachment.Create(IdMessage1.MessageParts, 'c:\chg.txt')
else
showmessage('error');
tuna5168
一般會員


發表:3
回覆:4
積分:1
註冊:2011-04-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-04-12 07:59:56 IP:114.38.xxx.xxx 訂閱
好的~非常謝謝你
我往這方面來寫
tuna5168
一般會員


發表:3
回覆:4
積分:1
註冊:2011-04-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-04-14 08:26:09 IP:59.120.xxx.xxx 訂閱
有些疑問想與前輩們討論w

1. 上網查了一些資料 , 發現有 memorystream 與 Filetostream

不知道將附件加密是不是兩種都可以

Stream := TMemoryStream.Create;
IdMessage1.SaveToStream(Stream);
if Stream.Size > 0 then showmessage('應該有stream吧');
//Gauge.MaxValue := Stream.Size; 這行會有 error
end;

2. 然後也查了一個 EncryptFile 的 function
所以我變成利用這個 function 將附件加密後包成另一個檔 , 再attachment parts 附件寄出
這種方式我收信時打開附件 , 內文的確有加密
不過我想這樣是否收信的人 , 也要有一個 delphi 寫成的執行檔去解開這個附件
不知道怎樣的方法能達到收信時(如收outlook )點附件~~就問我密碼~~這種功能
是不是要寫出一個完整的收發信功能(如 web mail)才行 , 而不是單純 只寫在寄信時的程式裡呢

謝謝
C1=54321;
C2=34234;
.....
procedure TForm3.EncryptFile(INFName, OutFName : String; Key : Word);
VAR
MS, SS : TMemoryStream;
X : Integer;
C : Byte;
begin
MS := TMemoryStream.Create;
SS := TMemoryStream.Create;
TRY
MS.LoadFromFile(INFName);
MS.Position := 0;
FOR X := 0 TO MS.Size - 1 DO
begin
MS.Read(C, 1);
C:= (C xor (Word(Key) shr 1)); // 原 Key shr 8 但 8 不會變亂碼
// Key := C Key * C1 C2; // range check error
SS.Write(C,1);
end;
SS.SaveToFile(OutFName);
FINALLY
SS.Free;
MS.Free;
end;
end;
編輯記錄
tuna5168 重新編輯於 2011-04-13 18:26:54, 註解 無‧
tuna5168 重新編輯於 2011-04-13 18:29:10, 註解 無‧
GrandRURU
站務副站長


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2011-04-15 06:13:26 IP:111.249.xxx.xxx 未訂閱
如果你是想讓使用者能在outlook中打開時輸入密碼
你可以在需要加密時呼叫外部程式做壓縮加密的行為,如呼叫winzip的程式,並給上加密參數之類的
這樣就不會受到「對方要怎麼開」的困擾了

===================引 用 tuna5168 文 章===================
有些疑問想與前輩們討論w

1. 上網查了一些資料 , 發現有 memorystream 與 Filetostream

不知道將附件加密是不是兩種都可以

Stream := TMemoryStream.Create;
IdMessage1.SaveToStream(Stream);
if Stream.Size > 0 then showmessage('應該有stream吧');
//Gauge.MaxValue := Stream.Size; 這行會有 error
end;

2. 然後也查了一個 EncryptFile 的 function
所以我變成利用這個function 將附件加密後包成另一個檔 , 再attachment parts 附件寄出
這種方式我收信時打開附件 , 內文的確有加密
不過我想這樣是否收信的人 , 也要有一個 delphi 寫成的執行檔去解開這個附件
不知道怎樣的方法能達到收信時(如收outlook )點附件~~就問我密碼~~這種功能
是不是要寫出一個完整的收發信功能(如 web mail)才行 , 而不是單純 只寫在寄信時的程式裡呢

謝謝
C1=54321;
C2=34234;
.....
procedure TForm3.EncryptFile(INFName, OutFName : String; Key : Word);
VAR
MS, SS : TMemoryStream;
X : Integer;
C : Byte;
begin
MS := TMemoryStream.Create;
SS := TMemoryStream.Create;
TRY
MS.LoadFromFile(INFName);
MS.Position := 0;
FOR X := 0 TO MS.Size - 1 DO
begin
MS.Read(C, 1);
C:= (C xor (Word(Key) shr 1));//原 Key shr 8 但 8 不會變亂碼
// Key := C Key * C1 C2; //range check error
SS.Write(C,1);
end;
SS.SaveToFile(OutFName);
FINALLY
SS.Free;
MS.Free;
end;
end;
tuna5168
一般會員


發表:3
回覆:4
積分:1
註冊:2011-04-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2011-04-20 21:39:09 IP:122.118.xxx.xxx 訂閱
非常感謝 GrandRURU 前輩的提示
已經成功呼叫 winrar 並帶上密碼參數了

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