請問TStringList問題 |
答題得分者是:brook
|
willchen
初階會員 發表:64 回覆:81 積分:29 註冊:2003-05-23 發送簡訊給我 |
void __fastcall TForm1::Button8Click(TObject *Sender)
{
TStringList *test=new TStringList();
TMemoryStream *m=new TMemoryStream();
m->LoadFromFile(Current_Dir+"\\encryted.txt");
test->LoadFromStream(m);
Edit7->Text=RSA1->DecryptString(test->Text); //char buf[512];
//TMemoryStream *m=new TMemoryStream();
//m->LoadFromFile(Current_Dir+"\\encryted.txt");
//memcpy(buf,m->Memory,m->Size);
//buf[m->Size]=0x00;
//TStringList *message=new TStrings();
//message->Text=buf;
//message->SaveToFile(Current_Dir+"\\encryted2.txt");
//AnsiString temp=message->Text;
//Edit7->Text=RSA1->DecryptString(temp); //AnsiString test=en_str->Text;
//Edit7->Text=RSA1->DecryptString(test);
}
以上是我實作加解密部分的的程式,基本上我用之前站上各位先進提供的方法對檔案解密都不成問題(整個文字檔都是加密的來說),但是,問題卡在一個文字檔並非只有加密的文字,也有正常沒有加密過的文字,現今卡的問題在於我不能用TStringList來對檔案作存取,一但作存取,就會出現錯誤(執行時),但是不用TStringList來作存取,很難對檔案各文字作控制,這是個很棘手的問題.
不知道各位高手可否提供小弟一些解決的方法??試了很多方法,但我發現一但使用TStringList則會出現base64編碼錯誤的問題,我也不知道該怎麼解決 我的文字檔案如下
|
brook
資深會員 發表:57 回覆:323 積分:371 註冊:2002-07-12 發送簡訊給我 |
|
willchen
初階會員 發表:64 回覆:81 積分:29 註冊:2003-05-23 發送簡訊給我 |
char buf[512];
TMemoryStream *m=new TMemoryStream();
m->LoadFromFile(Current_Dir+"\\encryted.txt");
memcpy(buf,m->Memory,m->Size);
buf[m->Size]=0x00; AnsiString full=buf;
Edit8->Text=full;
AnsiString temp;
int left=full.Pos("
|
brook
資深會員 發表:57 回覆:323 積分:371 註冊:2002-07-12 發送簡訊給我 |
|
willchen
初階會員 發表:64 回覆:81 積分:29 註冊:2003-05-23 發送簡訊給我 |
//--------------------------------------------------------------------------- #include
|
brook
資深會員 發表:57 回覆:323 積分:371 註冊:2002-07-12 發送簡訊給我 |
void __fastcall TForm1::Button7Click(TObject *Sender)
{
AnsiString en_str=Memo1->Text;
//加密的文件用Memo存,可能會有bug, 能以 char 來處理最好, 要不然假如你信得過 AnsiString 就用 AnsiString, 因 memo 裡有些處理字體大小的東東,我們不是很暸解. TMemoryStream *m=new TMemoryStream(); AnsiString full_agent="" en_str "";
//1.這個地方你要check full_agent 的長度是否和你加進來的字串相同,長度,甚至每個字元.
// 2.先不存檔先解碼,理論上在這裡解碼就解不出來了.
// 3.建議用char buf[512]; 和memcpy()一個字一個字加進去, 字與字之間用 0x00 隔開. m->SetSize(en_str.Length());
memcpy(m->Memory,en_str.c_str(),en_str.Length());
m->SaveToFile(Current_Dir "\\encryted.txt");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button8Click(TObject *Sender)
{
char buf[512];
TMemoryStream *m=new TMemoryStream();
m->LoadFromFile(Current_Dir "\\encryted.txt");
memcpy(buf,m->Memory,m->Size);
buf[m->Size]=0x00; AnsiString full=buf;
Edit8->Text=full;
AnsiString temp;
int left=full.Pos("");
int right=full.Pos("");
temp=full.SubString(right,right-(left 13));
//1. 檢查 temp 的長度,甚至每個字元是否和加密後的字串相同.
//2. full.pos() 你可能要確定裡面的字串不會在你加密時也會產生相同的東東. Edit7->Text=RSA1->DecryptString(temp);
|
willchen
初階會員 發表:64 回覆:81 積分:29 註冊:2003-05-23 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |