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

字串加密傳送

答題得分者是:RaynorPao
TIY~2
一般會員


發表:26
回覆:37
積分:22
註冊:2003-08-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-18 10:04:50 IP:218.162.xxx.xxx 未訂閱
請問如何將字串加密後傳送 接收端也可以自行解密後得到正確的字串 查詢了一下,看到很多方式都是對BYTE 加密在傳送 那麼字串轉BYTE要如何撰寫,或則可以逐一的對字串的每一個位元加密在串接起來 參考了一堆還是無煞煞,因為字串的長度不確定,所以不知道該怎麼下手 最後的結論就是我希望可以有一個副程式是可以傳字串(AnsiString)進去得到一個可以傳輸的BYTE型態,應該是這樣吧 希望大大可以提供網址或程式碼參考 謝謝 發表人 -
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-18 10:15:11 IP:203.73.xxx.xxx 未訂閱
引言: 請問如何將字串加密後傳送 接收端也可以自行解密後得到正確的字串 查詢了一下,看到很多方式都是對BYTE 加密在傳送 那麼字串轉BYTE要如何撰寫,或則可以逐一的對字串的每一個位元加密在串接起來 參考了一堆還是無煞煞,因為字串的長度不確定,所以不知道該怎麼下手 最後的結論就是我希望可以有一個副程式是可以傳字串(AnsiString)進去得到一個可以傳輸的BYTE型態,應該是這樣吧 希望大大可以提供網址或程式碼參考 謝謝 < face="Verdana, Arial, Helvetica"> TIY~2 你好: 所以,你的問題是如何把字串轉成 BYTE array 嗎? < class="code"> AnsiString sz="test"; BYTE *b=new BYTE[sz.Length()]; CopyMemory(b, &sz[1], sz.Length()); // ...Do something... delete [] b; 備註: 如果你希望包括字串最後的 '\0' 的話,就要這樣子寫
   AnsiString sz="test";
   BYTE *b=new BYTE[sz.Length()+1];
   CopyMemory(b, &sz[1], sz.Length()+1);
   // ...Do something...
   delete [] b;
-- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2004/03/18 10:21:27
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
TIY~2
一般會員


發表:26
回覆:37
積分:22
註冊:2003-08-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-18 10:24:06 IP:218.162.xxx.xxx 未訂閱
如果網路傳輸可以傳送BYTE ARRAY的話那就是 接下來的do something 假如我要加密是不是要對每一個位元最處理 例如
for(int i=0;i
還有一個問題,若傳輸的字串真的很大的話,有沒有可能傳輸的BYTE會被切成兩個封包的可能,我不知道這樣問妥當嗎?     
        
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-18 11:00:07 IP:203.73.xxx.xxx 未訂閱
引言: 如果網路傳輸可以傳送BYTE ARRAY的話那就是 接下來的do something 假如我要加密是不是要對每一個位元最處理 例如
for(int i=0;i
還有一個問題,若傳輸的字串真的很大的話,有沒有可能傳輸的BYTE會被切成兩個封包的可能,我不知道這樣問妥當嗎?
TIY~2 你好:
(1)我記得你好像曾經問過這個問題吧?
   >
(>>>>>加密->>傳輸->>解密->原始字串
(>    < src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=10003806&CC=223734"> -- Enjoy Researching & Developing --    發表人 - RaynorPao 於 2004/03/18  11:54:08
        
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
TIY~2
一般會員


發表:26
回覆:37
積分:22
註冊:2003-08-07

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-18 11:20:17 IP:218.162.xxx.xxx 未訂閱
謝謝~~ 另外我自己寫了一個小小測試
 AnsiString sz;
 sz = "Test";
 BYTE *b=new BYTE[sz.Length() 1];
 CopyMemory(b, &sz[1], sz.Length() 1);
   // ...Do something...
 for(int i=0;i<=sz.Length();i  )
 {
   b[i]^=0x69;
 }
 for(int i=0;i<=sz.Length();i  )
 {
   b[i]^=0x69;
 }
 sz = (AnsiString)*b;
 MessageBox(NULL,sz.c_str(),"test",MB_OK);
 delete [] b;
sz 最後不知道要怎麼 assign 出來?可以請教一下嗎? 還有CopyMemory(b, &sz[1], sz.Length() 1);此函式代表什麼,可以教導一下嗎? 裡面參數的意思,尤其是&sz[1]為什麼要放1ㄋ? 對了還有~~我是用Tserversocket,聽你一說~~好想換TIdTCPServer/TIdTCPClient,但程式已經大到某一種程度了,恐怕要改可能很難 也謝謝你提供此類的資訊,下次撰寫程式時我會注意到這點的
TIY~2
一般會員


發表:26
回覆:37
積分:22
註冊:2003-08-07

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-03-18 14:44:56 IP:218.162.xxx.xxx 未訂閱
阿~~真是對不起! 沒注意看到之後的敘述 真是豬頭豬腦 我大概知道了 謝謝~~~
TIY~2
一般會員


發表:26
回覆:37
積分:22
註冊:2003-08-07

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-03-18 15:40:00 IP:218.162.xxx.xxx 未訂閱
(7)如果要加入 Base64 的話,你的整個系統流程會變成這個樣子    原始字串->加密->Base64 編碼->傳輸->Base64 解碼->解密->原始字串 對不起再次造訪,我不是很懂 如果我的加解密只是防君子不妨小人的作法,一定得做那麼麻煩的地部嗎? 而且我用的撰寫軟體是BCB5,我的直覺是字串->加密->傳輸->解密->原始字串 如今我連續對BYTE陣列做了加密在做解密的動作,一樣可以得到正確的字串傳送給CLINET端
   int count = sz.Length() 1;
   ServerSocket_S1->Socket->Connections[0]->SendBuf(b,count);
CLINET端也只是用readtext就可以讀到原始字串,所以我就不太瞭解BASE64用意了 所以我的直覺是認為我只是運用位元的XOR69 第一次就是加密 而第二次不就解密回來了嗎 然後再把解密回來的BYTE指標傳給AnsiString不就得到原始字串 我目前冥想的流程是 原始字串->加密->解密->原始字串 原始字串是AnsiString型態 加密解密都是Byte型態 也許無知,但請大大指導 其次還有你說假如次串有A 加密後不見得是printable,所謂的不見得是什麼意思 如果我單純一點只改變 00011000 其中兩個位元,但都屬於後面的位元 00011011,這樣應該可以解決此類的不見得.不知道行不行? 在此先謝謝大大的指導 發表人 - tiy~2 於 2004/03/18 15:48:01
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-03-19 15:49:11 IP:203.73.xxx.xxx 未訂閱
引言: (7)如果要加入 Base64 的話,你的整個系統流程會變成這個樣子 原始字串->加密->Base64 編碼->傳輸->Base64 解碼->解密->原始字串 對不起再次造訪,我不是很懂 如果我的加解密只是防君子不妨小人的作法,一定得做那麼麻煩的地部嗎? 而且我用的撰寫軟體是BCB5,我的直覺是字串->加密->傳輸->解密->原始字串 如今我連續對BYTE陣列做了加密在做解密的動作,一樣可以得到正確的字串傳送給CLINET端 我說的是「如果」,所以,你可以加入 Base64,當然也可以不加入,完全看你 自己的需求而決定;我只是提供另外一種實務的做法,讓你做參考!!
   int count = sz.Length()+1;
   ServerSocket_S1->Socket->Connections[0]->SendBuf(b,count);
CLINET端也只是用readtext就可以讀到原始字串,所以我就不太瞭解BASE64用意了 所以我的直覺是認為我只是運用位元的XOR69 第一次就是加密 而第二次不就解密回來了嗎 然後再把解密回來的BYTE指標傳給AnsiString不就得到原始字串 我目前冥想的流程是 原始字串->加密->解密->原始字串 原始字串是AnsiString型態 加密解密都是Byte型態 也許無知,但請大大指導 我所說的是一般的情形,並不是針對你使用的加/解密演算法,一般的加密演算 法得到的結果,裡面會夾雜著 0x00,如果你想要用純字串傳輸的方式,就會碰 到問題,這也是 Base64 會被廣泛的運用在很多網路 Protocol 裡面的原因,例 如: 你可以把一封含有附件的郵件儲存成 *.eml,利用 UltraEdit 打開來看看 ,你會發現檔案的串流已經被 Base64 編碼,以方便在網路上傳輸 (一般的檔案 ,除了純文字檔以外,裡面都會夾雜很多 0x00) 其次還有你說假如次串有A 加密後不見得是printable,所謂的不見得是什麼意思 如果我單純一點只改變 00011000 其中兩個位元,但都屬於後面的位元 00011011,這樣應該可以解決此類的不見得.不知道行不行? 加密之後,當然不見得還是 printable 的字元,這要看你使用的演算法而定, 一般來說,所謂的 printable 字元包括 A~Z, a~z, 0~9, !@#$%^&*()=...還有 這些有的沒的符號,每個都對應到自己的 ASCII 碼,試問?你已經試過以上這 些所有的 printable 字元,經過你的加密演算法之後,還會是 printable 的字 元嗎?建議你自己先試試看,別再空口說白話!!至於你自己想到的演算法,也要 經過你自己的測試,才能夠知道真正的結果!! 在此先謝謝大大的指導 此問題已經結案,如果還有新的問題,請另譬新題發問!!
-- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2004/03/19 16:26:04
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
系統時間:2024-05-10 23:04:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!