TMemo控件的有关问题
TMemo控件的问题
在网上找了一个加密解密的函数
1.如果直接加密文本到文本框,然后再把文本框内容解密是可以的
2.但是如果把加密后的内容通过Memo存入到文件中,再将文件里的内容解密就会报错
'$' is not a valid integer value
我看过了通过1方法和通过2方法加密的结果是一样的
------解决方案--------------------
SaveToFile函数会在后面加上回车和换行符,所以txt文件中内容会多出2个字符
解密时要把后面的回车换行去掉就行了
- Delphi(Pascal) code
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Button1: TButton; Button2: TButton; Memo1: TMemo; Button3: TButton; Button4: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} function EncryptString(Source, Key: string): string; // 对字符串加密(Source:源 Key:密匙) var KeyLen: integer; KeyPos: integer; Offset: integer; Dest: string; SrcPos: integer; SrcAsc: integer; Range: integer; begin KeyLen := Length(Key); if KeyLen = 0 then Key := 'delphi'; KeyPos := 0; Range := 256; randomize; Offset := random(Range); Dest := format('%1.2x', [Offset]); for SrcPos := 1 to Length(Source) do begin SrcAsc := (Ord(Source[SrcPos]) + Offset) mod 255; if KeyPos < KeyLen then KeyPos := KeyPos + 1 else KeyPos := 1; SrcAsc := SrcAsc xor Ord(Key[KeyPos]); Dest := Dest + format('%1.2x', [SrcAsc]); Offset := SrcAsc; end; result := Dest; end; function UnEncryptString(Source, Key: string): string; // 对字符串解密(Src:源 Key:密匙) var KeyLen: integer; KeyPos: integer; Offset: integer; Dest: string; SrcPos: integer; SrcAsc: integer; TmpSrcAsc: integer; begin KeyLen := Length(Key); if KeyLen = 0 then Key := 'delphi'; KeyPos := 0; Offset := strtoint('$' + copy(Source, 1, 2)); SrcPos := 3; repeat SrcAsc := strtoint('$' + copy(Source, SrcPos, 2)); if KeyPos < KeyLen then KeyPos := KeyPos + 1 else KeyPos := 1; TmpSrcAsc := SrcAsc xor Ord(Key[KeyPos]); if TmpSrcAsc <= Offset then TmpSrcAsc := 255 + TmpSrcAsc - Offset else TmpSrcAsc := TmpSrcAsc - Offset; Dest := Dest + chr(TmpSrcAsc); Offset := SrcAsc; SrcPos := SrcPos + 2; until SrcPos >= Length(Source); result := Dest; end; procedure TForm1.Button1Click(Sender: TObject); begin edit2.Text := EncryptString(edit1.Text,'1'); end; procedure TForm1.Button2Click(Sender: TObject); begin edit3.Text := UnEncryptString(edit2.Text,'1'); end; procedure TForm1.Button3Click(Sender: TObject); begin Memo1.Lines.Clear; Memo1.Lines.Add(EncryptString(edit1.Text,'1')); Memo1.Lines.SaveToFile('c:\1.txt'); edit2.Text := Memo1.Text; end; procedure TForm1.Button4Click(Sender: TObject); begin Memo1.Lines.Clear; Memo1.Lines.LoadFromFile('c:\1.txt'); edit3.Text := UnEncryptString(Memo1.Text,'1'); end; end.
在网上找了一个加密解密的函数
1.如果直接加密文本到文本框,然后再把文本框内容解密是可以的
2.但是如果把加密后的内容通过Memo存入到文件中,再将文件里的内容解密就会报错
'$' is not a valid integer value
我看过了通过1方法和通过2方法加密的结果是一样的
------解决方案--------------------
SaveToFile函数会在后面加上回车和换行符,所以txt文件中内容会多出2个字符
解密时要把后面的回车换行去掉就行了