加密高手请进!

jack20012002 2001-07-21 03:51:52
用它加密登录密码时, 空密码可以用任何单字密码进去。并且奇数密码不可用 !

请高手指点!!

unit EncodeText;

interface

uses
SysUtils;

type
TPasswordEncode = Class
private
FKey: Char;
FDecodeText: string;
FEncodeText: string;
protected
procedure Encode; virtual;
procedure Decode; virtual;
public
constructor Create;
property Key: Char read FKey write FKey default 'A';
function GetEncodeText(const DecodeText: string): string;
function GetDecodeText(const EncodeText: string): string;
end;


implementation

{ TPasswordEncode }

constructor TPasswordEncode.Create;
begin
FKey := 'A';
end;

{--------------------------------------------------------------
----------------------- 加密算法 ------------------------------
---------------------------------------------------------------}
//我的加密算法很简单,只是每个Char加上Key,你若需要复杂的算法,可以重载它
procedure TPasswordEncode.Encode;
var
iLength, I, EncVal: Integer;
begin
iLength := Length(FDecodeText);
SetLength(FEncodeText, iLength);
for I := 1 to iLength do
begin
EncVal := (Ord(FDecodeText[I]) + Ord(Key)) mod 256;
FEncodeText[I] := Chr(EncVal);
end;
end;

{--------------------------------------------------------------
----------------------- 解密算法 ------------------------------
---------------------------------------------------------------}
procedure TPasswordEncode.Decode;
var
iLength, I, EncVal: Integer;
begin
iLength := Length(FEncodeText);
SetLength(FDecodeText, iLength);
for I := 1 to iLength do
begin
EncVal := (Ord(FEncodeText[I]) - Ord(Key)) mod 256;
FDecodeText[I] := Chr(EncVal);
end;
end;

function TPasswordEncode.GetEncodeText(const DecodeText: string): string;
begin
FDecodeText:= DecodeText;
Encode;
Result := FEncodeText;
end;

function TPasswordEncode.GetDecodeText(const EncodeText: string): string;
begin
FEncodeText := EncodeText;
Decode;
Result := FDecodeText;
end;

end.



...全文
76 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
macrowei 2001-07-22
  • 打赏
  • 举报
回复
你这样加密当然存在问题; 如相加后出现单引号; 肯定出问题; 以下是我对你加密算法的简单修改; 当然你可以做的更好.我现在加密后的字符串只含有0--9; 你可以将之加密为16进制或其它;
(Email: lizhiliang@email.com.cn)
===============================================================================
unit cls_crypt;

interface
uses
SysUtils, Classes, Controls, ExtCtrls, Mask;
type
TCrypt = class
public
Function Lock(Key, Source: String): String;
//用户口令加密

Function UnLock(Key, Dest: String): String;
//用户口令解密
end;

implementation

Function TCrypt.Lock(Key, Source: String): String;
{
功能:用户口令加密。
============================================================
加密密匙(Key);调用时为用户ID编号;进入该函数后,若
Length(Key)<Length(Source)则在Key后补字符0
直至Length(Key)=Length(Source);用用户ID作
加密密匙可以防止系统管理员或非法用户直接修
改用户口令字或通过复制其他用户的口令字进入系统。
加密算法 : 先将 IntToStr(ord(Source[i]) + ord(Key[i]))
拼接在一起; 然后再将整个字符串倒转生成加密后的
口令字
============================================================
}
var
i,len : integer;
tmp,str : String;
Dest : String;
begin
str := '';
Dest:= '';
len := Length(Source);

while Length(Key) < len do Key := Key + '0';

//先将 IntToStr(ord(Source[i]) + ord(Key[i]))拼接在一起;
for i:=1 to len do
begin
tmp := IntToStr( ord(Source[i]) + ord(Key[i]) );
while Length(tmp) < 3 do tmp := '0' + tmp ;
str := str + tmp;
end;

len := Length(str); //将整个字符串倒转
for i:=len downto 1 do Dest := Dest + str[i];

Result := Dest;
end;

Function TCrypt.UnLock(Key, Dest: String): String;
{
功能:用户口令解密。
============================================================
解密密匙(Key);调用时为用户ID编号;进入该函数后,若
Length(Key)<Length(Dest) 则在Key后补字符0
直至Length(Key)=Length(Dest);
Dest : 为加密字符串
解密算法 : 先将整个字符串倒转; 以三位为一个单元减去ord(Key[i])
生成一个字符; 拼接在一起恢复口令字
============================================================
}
var
i,len : integer;
p : byte;
tmp,str : String;
Source : String;

begin
str := '';
Source:= '';

len := Length(Dest);

while Length(Key) < (len div 3) do Key := Key + '0';

for i:=len downto 1 do str := str + Dest[i]; //字符串倒转

try
begin
len := len div 3;
for i:= 1 to len do
begin
tmp := copy(str, i*3-2, 3);
p := StrToInt(tmp) - ord(Key[i]);
Source := Source + chr( p );
end;
end
except
Source := ''; //若口令中含有非法字符, 则置空
end;
Result := Source;
end;

end.

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧