delphi加密解密演算法
function Enc(Str:String):String;//字元加密函數 這是用的一個異或加密
var
i,j:Integer;
begin
Result:='';
j:=0;
for i:=1 to Length(Str) do
begin
Result:=Result+IntToHex(Byte(Str[i]) xor XorKey[j],2);
j:=(j+1) mod 8;
end;
end;
function Dec(Str:String):String;//字元解密函數
var
i,j:Integer;
begin
Result:='';
j:=0;
for i:=1 to Length(Str) div 2 do
begin
Result:=Result+Char(StrToInt('$'+Copy(Str,i*2-1,2)) xor XorKey[j]);
j:=(j+1) mod 8;
end;
end;
❷ 怎樣用DelPhi解密MD5
MD5是不可逆加密演算法,只能採用爆破,要不然你就用BASM來寫核心代碼,要不然就放棄使用Delphi,因為如果使用Delphi的類來寫效率太低
❸ 如何在Delphi軟體中實現對配置文件的加密解密
直接先加密在放到ini 文件里
要用的時候直接解密出來就可以了
至於用什麼加密演算法看你自己喜歡
推薦用base64演算法不錯 網上到處有的下
❹ Delphi加密演算法
我用的加密解密
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('$' + (Source, 1, 2));
SrcPos := 3;
repeat
SrcAsc := strtoint('$' + (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;
❺ delphi實現DES位元組流加密,該怎麼解決
在 CnPack 提供的源代碼包里,提供了 des 加解密單元文件,提供了以下四個功能函數:
function DESEncryptStr(Str, Key: AnsiString): AnsiString;
{* 傳入明文與加密 Key,DES 加密返回密文,
註:由於密文可能含有擴展 ASCII 字元,因此在 DELPHI 2009 或以上版本中,請用
AnsiString 類型的變數接收返回值,以避免出現多餘的 Unicode 轉換而導致解密出錯}
function DESDecryptStr(Str, Key: AnsiString): AnsiString;
{* 傳入密文與加密 Key,DES 解密返回明文}
function DESEncryptStrToHex(Str, Key: AnsiString): AnsiString;
{* 傳入明文與加密 Key,DES 加密返回轉換成十六進制的密文}
function DESDecryptStrFromHex(StrHex, Key: AnsiString): AnsiString;
{* 傳入十六進制的密文與加密 Key,DES 解密返回明文}
❻ 誰能給個DELPHI寫的可逆加密函數
function tForm1.Decrypt(const s:string):string; //key=1時為加密,0為解密
var
I:Integer;
begin
Result:='';
for i:=1 to length(s) do
result := result+chr(ord(s[i]) xor i xor 69);
result := result + char(69);
end;
function tForm1.Decrypt1(const s:string):string; //key=1時為加密,0為解密
var
I:Integer;
begin
Result:='';
for i:=1 to length(s) - 1 do
result := result+chr(ord(s[i]) xor i xor 69);
end;
❼ 用Delphi製作文本文檔程序,在文本中內容加密,我的思路是把文本內容打成亂碼,在點擊「解密」變回原來的
我以前也做過這種小程序。這個演算法你可以自己設計,也可以用像什麼MD5之類的加解密演算法咯。
但因為不能粘貼附件,所以就貼點代碼。
procere TForm1.N2Click(Sender: TObject);//打開文件
var
tl:string;
begin
if OpenDialog1.Execute then
begin
ListBox1.Clear;
Caption:='文件加密解密器'+OpenDialog1.FileName;
AssignFile(ATextFile,OpenDialog1.FileName);
Reset(ATextFile);
while not eof(ATextFile) do
begin
Readln(ATextFile,tl);
ListBox1.Items.Add(tl);
end;
CloseFile(ATextFile);
end;
end;
function Encode(s:string):string;//加密的核心部分
var
n,i:integer;
str:string;
begin
n:=length(s);
str:='';
for i:=1 to n do
begin
str:=str+char(ord(s[i])+10);
end;
Encode:=str;
end;
function Decode(s:string):string;//解密的核心部分
var
n,i:integer;
str:string;
begin
n:=length(s);
str:='';
for i:=1 to n do
begin
str:=str+char(ord(s[i])-10);
end;
Decode:=str;
end;
procere TForm1.N3Click(Sender: TObject);//加密
var
ln:integer;
tl,nl:string;
begin
if SaveDialog1.Execute then
begin
AssignFile(ATextFile,SaveDialog1.FileName);
Rewrite(ATextFile);
for ln:=0 to ListBox1.Items.Count-1 do
begin
tl:=ListBox1.Items[ln];
nl:=Encode(tl);//加密
Writeln(ATextFile,nl);
end;
CloseFile(ATextFile);
end;
end;
procere TForm1.N4Click(Sender: TObject);//解密
var
ln:integer;
tl,nl:string;
begin
if SaveDialog1.Execute then
begin
AssignFile(AtextFile,SaveDialog1.FileName);
Rewrite(ATextFile);
for ln:=0 to ListBox1.Items.Count-1 do
begin
tl:=ListBox1.Items[ln];
nl:=Decode(tl);//解密
Writeln(ATextFile,nl);
end;
CloseFile(ATextFile);
end;
end;
❽ DELPHI 中INI文件加密還原的問題
可以用異或加密演算法。用明文的ASCII碼值同密鑰進行異或運算,得到密文,解密時用密文同密鑰在進行異或運算即可得到明文
❾ Delphi常用的字元串(密碼)加密方式都有哪幾種哪種方法可以將數字字母混合加密成純數字
多了,des、aes、base64、rsa、md5、sha等等,等等,數不勝數。每一種演算法,都可以將數字字母加密成純數字。因為加密的結果可以再加密。比如aes加密後的密文,是16進制的東西,我們可以把這個結果轉換成10進制,不就成了純數字了嗎?所以,所有演算法,都可以實現你所說的。
❿ Delphi軟體的破解
第一招:製造假相
反匯編和調試器跟蹤都是不可能防止的,因為所有的Win32程序都必須通過API來調用Windows系統中的關鍵DLL的(如Kernel32.dll、GDI32.dll等),然而API是可以Hook的。我們只能從自己的代碼著手來保護我們的勞動果實了。
為了自己調試和以後維護的方便,我們一般採用有意義的名字給我們的函數命名,可這給了Cracker可乘之機。例如這樣的函數是什麼意思大家應該一目瞭然吧?IsRegistered(),IsLicensed(),LicenseVerify(),CheckReg()……這樣Cracker就可以輕松地從數千個函數中找到他的目標——你的注冊碼校驗函數!而且破解Delphi編寫的軟體還有一件TMG小組的破解利器——DeDe。它可以輕松地看到你軟體里的Form、Unit和函數名,還可以反匯編一部分代碼,更可以和Win32DASM合作反匯編更多的代碼,對Delphi編出的程序威脅極大。
為了不給Cracker創造溫馨舒適的破解環境,要故意混亂(Obfuscate)我們的代碼,將軟體中所有的函數名全部替換成隨機生成的函數名。例如Func_3dfsa_fs32zlfv��這個函數是什麼意思?恐怕只有天知道了。網上有現成的代碼混亂器,按你使用的編程語言的種類可以找到一些。但要注意,只有當你要發布軟體時才使用它,而且一定注意備份源代碼。否則,當你看不懂你自己的代碼時就著急了:)
第二招:用公匙,並改名
另外,一定要使用公開密匙演算法保護你的軟體。RSA、DSA和El Gamal之類的演算法都可以從網上找到。但注意:將你演算法單元中所有涉及到演算法名稱的字元串全部改名。避免被Cracker發現你用的演算法而模仿寫出注冊機來!你還可以張冠李戴,明明用的DSA,將名字全部替換成RSA。
其它演算法,如對稱演算法和Hash演算法也要注意改名,否則這樣:
EncryptedCode = Blowfish(MD5(UserName),MD5(Key));
//你的加密演算法,使用了Blowfish(對稱演算法)和MD5(Hash演算法)
雖然那些Cracker不了解Blowfish和MD5演算法的原理,也不會逆向推測它們,但他們了解你的校驗演算法的流程和演算法名,便可馬上從網上找到類似的Blowfish和MD5演算法包,從而模擬你的軟體仿造出注冊機。
如果你用不常見的,演算法如Skipjack(NASA美國航天局標准演算法)、LOKI、3-WAY、Safer之類不出名但保密程度很高的演算法,並且全部改名,這樣就會傷透他們腦筋了。
當然,最好把Hash演算法也全部改名,會給他們製造更多的困難。但注意,MD5和SHA之類的Hash初始值會被Cracker從內存中找到,這樣他就知道你用的Hash了。所以建議同時使用MD5的變形演算法Ripe-MD(RMD)128或160或其它的Hash,如Tiger、Haval等演算法。
第三招:阻止別人調試
還有一點,調試器對我們的威脅很大,我們不會讓Cracker們舒舒服服地使用SoftICE、TRW或OllyDbg來調試我們的程序。除了常用的MeItICE方法外,這里我給一個筆者寫的方法:
{檢查自己的進程的父進程是否為Explorer.exe,否則是被調試器載入了}
�
{不過注意,控制台程序的父進程在WinNT下是Cmd.exe!}
{注意載入TlHelp32.pas單元}
procere CheckParentProc;
var //檢查自己的進程的父進程
Pn: TProcesseNtry32;
sHandle:THandle;
H,ExplProc,ParentProc:Hwnd;
Found:Boolean;
Buffer:array[0..1023]of Char;
Path:string;
begin
H:= 0;
ExplProc:= 0;
ParentProc:= 0;
//得到Windows的目錄
SetString(Path,Buffer)
GetWindowsDirectory(Buffer,Sizeof(Buffer)- 1));
Path:= UpperCase(Path)+ '\EX PLORER.EXE';//得到Explorer的路徑
//得到所有進程的列錶快照
sHandle:= CreateToolHelp32Snap Shot(TH32CS_SNAPALL,0);
Found:= Process32First(sHandle,Pn);//查找進程
while Found do //遍歷所有進程
begin
if Pn.szExeFile = ParamStr(0)then //自己的進程
begin
ParentProc:= Pn.th32ParentProcessID://得到父進程的進程ID
//父進程的句柄
H:= OpenProcess(PRO CESS_ALL_ACCESS,True,Pn.th32Parent ProcessID);
end
else if UpperCase(Pn.szExeFile)= Path then
ExplProc:= Pn.th32ProcessID;//Ex plorer的PID
Found:= Process32Next(sHandle,Pn);//查找下一個
end;
//父進程不是Explorer,是調試器……
if ParentProc <> ExplProc then
begin
TerminateProcess(H,0);//殺之!除之而後快也! :)
//你還可以加上其它什麼死機代碼來消遣消遣這位可愛的Cracker:)
end�
end�
你可以在Delphi或者VC中試試,這樣可以把Delphi和VC殺掉了,因為你現在用的是Delphi和VC的內置調試器來運行你的程序。調試的時候你還是把它的注釋刪掉吧,發布時別忘記激活喲!