//------------------------------------------------------------------------------ // // 产品名称:自有版权的字符串加密算法 // 产品简介:将字符串按自行独立设计的加密算法进行加、解密处理 // 产品作者:成晓旭 // E-Main: CXXSoft@sohu.com // 产品版本:1.0版 // 版权所有:成晓旭 // 备注: 任何人使用此类时,请保留此段自述文件,谢谢! // 单元文件:unSecurity.pas // 单元说明:算法类TCXXStrSecurity的定义及实现 // 开发时间:2004-12-25 // 设计本加、解密算法,并用原型程序测试、实现 // 修改时间:2005-01-15 // 增加加、解密返回、输入串码制属性更新功能 //------------------------------------------------------------------------------ unit unSecurity; interface uses SysUtils; type TCXXStrSecurity =class private //本算法的加密最终结果标志(true:字节码串/false:字符串) isByteResult:boolean; //本算法的字符串长度位数目(16制式) lenStrWidth:Byte; //本算法要求的最小模糊字符串 minTextLen:Word; //本算法处理的最大串长度 maxStrLen:Word; //本算法的串移位位数 bitStrMoved:Byte; //根据本算法的处理规则,以加密前明文进行串调整 function TransFillText(const strText:string):string; //根据本算法的处理规则,以加密后密文进行串调整 function ReTransFillText(const strText:string; const mvSize: Byte):string; //将字符串转换成Ascii码串的方法 function TransStringToNumber(const strText:string):string; //将一个字节的前后两个半字节互换的方法 function ChangeNumber(const byt:Byte):Byte; //将字符串循环移动的方法(左移/右移) function MoveTextByCircle(const strText:string;const mvSize:Byte;const isFromHead:boolean):string; //将字符串内每个字节的前后两个半字节互换的方法 function ExChangeNumber(const strText:string):string; //将字符串进行前后倒置的方法 function RevertString(const strText:string):string; //将字符串的相邻两位进行调换的方法 function TransOneByte(const strText:string):string; //将Ascii码串转换后常规字符串的方法 function TransNumberToString(const strText:string):string; //将字符串进行位异或处理方法 function XORString(const strText:string):string; public //本算法的加、解密处理成功标志(true:成功,否则:失败) isOK:boolean; //本算法的处理过程消息 Msg:string; constructor Create(const isReturnByte:boolean); //字符串加密方法 function EncodeString(const strText:string):string;overload; //字符串加密方法 function EncodeString(const strText:string;const isByteStr:boolean):string;overload; //字符串解密方法 function DecodeString(const strPassword:string):string;overload; //字符串解密方法 function DecodeString(const strPassword:string;const isByteStr:boolean):string;overload; end; implementation ...{ TCXXStrSecurity } function TCXXStrSecurity.ChangeNumber(const byt: Byte): Byte; begin Result := (byt mod 16) *16+ (byt div 16); end; constructor TCXXStrSecurity.Create(const isReturnByte:boolean); const default_MoveBit =5; begin minTextLen :=6; lenStrWidth :=2; maxStrLen :=255; bitStrMoved :=5; isByteResult := isReturnByte; end; function TCXXStrSecurity.EncodeString(const strText: string): string; var str:string; begin str :=''; str := TransFillText(strText); str := XORString(str); str := RevertString(str); str := TransOneByte(str); str := TransStringToNumber(str); str := ExChangeNumber(str); str := MoveTextByCircle(str,bitStrMoved,true); if NOT isByteResult then str := TransNumberToString(str); Result := str; end; function TCXXStrSecurity.ExChangeNumber(const strText: string): string; var len,i:Word; begin len := Length(strText); for i :=0 to len div 2-1do begin Result := Result + IntToHex(ChangeNumber(StrToInt('$'+Copy(strText,i*2+1,2))),2); end; end; function TCXXStrSecurity.MoveTextByCircle(const strText: string; const mvSize: Byte; const isFromHead: boolean): string; var len:Word; begin len := Length(strText); if isFromHead then Result := Copy(strText,mvSize+1,len-mvSize) + Copy(strText,1,mvSize) else Result := Copy(strText,len-mvSize+1,mvSize) + Copy(strText,1,len-mvSize); end; function TCXXStrSecurity.DecodeString(const strPassword: string): string; var str:string; begin str := strPassword; if NOT isByteResult then str := TransStringToNumber(str); str := MoveTextByCircle(str,bitStrMoved,false); str := ExChangeNumber(str); str := TransNumberToString(str); str := TransOneByte(str); str := RevertString(str); str := XORString(str); str := ReTransFillText(str,bitStrMoved); Result := str; end; function TCXXStrSecurity.ReTransFillText(const strText: string; const mvSize: Byte): string; var len:Word; begin len := StrToInt('$'+Copy(strText,1,lenStrWidth)); Result := Copy(strText,lenStrWidth+1,len); end; function TCXXStrSecurity.RevertString(const strText: string): string; var i,len:word; t:char; pch:PChar; begin pch := PChar(strText); len := Length(strText); for i :=0 to len div 2-1do begin //ChangeChar(pch[i],pch[len-1-i]); t := pch[i]; pch[i] := pch[len-1-i]; pch[len-1-i] := t; end; Result := String(pch); end; function TCXXStrSecurity.TransFillText(const strText: string): string; var i,oLen:Word; str,strPower:string; begin strPower := FormatDateTime('HHMMSS',Now()); //strPower := RevertString(strPower); //strPower := TransOneByte(strPower); str := strText; oLen := Length(str); i :=1; while(Length(str) < minTextLen) do begin str := str + strPower[i]; Inc(i); end; Result := IntToHex(oLen,lenStrWidth)+str; end; function TCXXStrSecurity.TransNumberToString(const strText: string): string; var i:word; begin Result :=''; for i :=0 to Length(strText) div 2-1do begin Result := Result +CHR(StrToInt('$'+Copy(strText,i*2+1,2))); end; end; function TCXXStrSecurity.TransOneByte(const strText: string): string; var i,len:word; t:char; pch:PChar; begin pch := PChar(strText); len := Length(strText); for i :=0 to len div 2-1do begin t := pch[2*i]; pch[2*i] := pch[2*i+1]; pch[2*i+1] := t; end; Result := String(pch); end; function TCXXStrSecurity.TransStringToNumber(const strText: string): string; var len,i:Word; str:string; begin len := Length(strText); str :=''; for i :=1 to len do begin str := str + IntToHex(Ord(strText[i]),2); end; Result := str; end; function TCXXStrSecurity.XORString(const strText: string): string; var len,k:word; b:Byte; begin Result :=''; len := Length(strText); for k :=1 to len do begin b := Ord(strText[k]); if k mod 2=0 then b := b xor k else b := b xor (len-k); Result := Result + CHR(b); end; end; function TCXXStrSecurity.DecodeString(const strPassword: string; const isByteStr: boolean): string; begin isByteResult := isByteStr; Result := DecodeString(strPassword); end; function TCXXStrSecurity.EncodeString(const strText: string; const isByteStr: boolean): string; begin isByteResult := isByteStr; Result := EncodeString(strText); end; end.
5、应用适应器源码:
//------------------------------------------------------------------------------ // // 产品名称:自有版权的字符串加密算法 // 产品简介:将字符串按自行独立设计的加密算法进行加、解密处理 // 产品作者:成晓旭 // E-Main: CXXSoft@sohu.com // 产品版本:1.0版 // 版权所有:成晓旭 // 备注: 任何人使用此类时,请保留此段自述文件,谢谢! // 单元文件:unSecurityAdapter.pas // 单元说明:算法接口类TCXXStrSecurity的定义及实现 // 开发时间:2006-06-27 // 增加接口类,封闭对算法类的管理细节,以方便客户使用 //------------------------------------------------------------------------------ unit unSecurityAdapter; interface uses unSecurity; type TSecurityAdapter =class private public //字符串加密方法 class function EncodeString(const strText:string):string; //字符串解密方法 class function DecodeString(const strPassword:string):string; end; implementation var security:TCXXStrSecurity; ...{ TSecurityAdapter } class function TSecurityAdapter.DecodeString( const strPassword: string): string; begin Result :=''; if Assigned(security) then Result := security.DecodeString(strPassword,true); end; class function TSecurityAdapter.EncodeString(const strText: string): string; begin Result :=''; if Assigned(security) then Result := security.EncodeString(strText,true); end; initialization security := TCXXStrSecurity.Create(false); finalization security.Free(); security := nil; end.