当前位置:首页 » 密码管理 » delphi加密解密算法

delphi加密解密算法

发布时间: 2023-01-17 00:01:26

❶ 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的内置调试器来运行你的程序。调试的时候你还是把它的注释删掉吧,发布时别忘记激活哟!

热点内容
搭建网站阿里云服务器怎么选 发布:2025-08-25 12:54:40 浏览:954
linux怎么看目录 发布:2025-08-25 12:37:57 浏览:760
加密连接不可用 发布:2025-08-25 12:33:46 浏览:387
html5存储本地存储 发布:2025-08-25 11:47:41 浏览:116
文件在线加密 发布:2025-08-25 11:29:56 浏览:87
c语言数值表 发布:2025-08-25 11:13:35 浏览:488
regexpython 发布:2025-08-25 11:13:29 浏览:33
防服务器如何攻击 发布:2025-08-25 10:50:11 浏览:535
sql返回参数的存储过程 发布:2025-08-25 10:47:15 浏览:849
c语言手机版软件 发布:2025-08-25 10:45:00 浏览:541