200分: (这里没高手??无能免进!)一个简单的加密密码的函数!!!!!!!!!!!!!! (200分)

  • 主题发起人 主题发起人 欢迎新用户
  • 开始时间 开始时间

欢迎新用户

Unregistered / Unconfirmed
GUEST, unregistred user!
200分: 一个加密密码的函数!!!!!!!!!!!!!!
我要一个函数!!!
输入:1-------16 位字符串(密码)
输出: 16 位字符串(已加密)
加密过程越复杂越好,要印件无关(任何密码加密结果唯一,不变)
要能直接运行的程序,马上给分,其他一概无分,(复杂越给分高)
 
去查 DES 加密算法
 
我说的横清楚,只要程序,灌水一律无分,(无能免进
 
我做的加密算法对象,请参考
代码:
unit UJiaMi;

interface
uses Windows, Messages, SysUtils, Classes;
const
     C1 = 52845;
     C2 = 22719;
type
 TJiaMi= class(TComPonent) 
  private

  protected

  public
    constructor Create(AOwner: TComponent);
    destructor Destroy
override;
    function JiaMiS(const S: String
Key: Word): String;
    function JieMiS(const S: String
Key: Word): String;
    procedure JiaMiFile(INFName, OutFName : String
Key : Word);
    procedure JieMiFile(INFName, OutFName : String
Key : Word);
  published
end;

procedure Register;
implementation
{$R *.res}
procedure Register;
begin
  RegisterComponents('LiQi', [TJiaMi]);
end;
{ TJiaMi }

constructor TJiaMi.Create(AOwner: TComponent);
begin
  inherited;

end;

destructor TJiaMi.Destroy;
begin
  inherited;

end;

procedure TJiaMi.JiaMiFile(INFName, OutFName: String
Key: Word);
VAR
   MS, SS : TMemoryStream;
   X : Integer;
   C : Byte;
begin
    MS := TMemoryStream.Create;
    SS := TMemoryStream.Create;
    TRY
       MS.LoadFromFile(INFName);
       MS.Position := 0;
       FOR X := 0 TO MS.Size - 1 DO
       begin
          MS.Read(C, 1);
          C := (C xor (Key shr 8));
          Key := (C + Key) * C1 + C2;
          SS.Write(C,1);
       end;
       SS.SaveToFile(OutFName);
    FINALLY
           SS.Free;
           MS.Free;
    end;

end;

function TJiaMi.JiaMiS(const S: String
Key: Word): String;
var
   I: Integer;
begin
  Result := S;
  for I := 1 to Length(S) do
  begin
        Result[I] := char(byte(S[I]) xor (Key shr 8));
        Key := (byte(Result[I]) + Key) * C1 + C2;
   end;
end;

procedure TJiaMi.JieMiFile(INFName, OutFName: String
Key: Word);
VAR
   MS, SS : TMemoryStream;
   X : Integer;
   C, O : Byte;
begin
MS := TMemoryStream.Create;
SS := TMemoryStream.Create;
    TRY
       MS.LoadFromFile(INFName);
       MS.Position := 0;
       FOR X := 0 TO MS.Size - 1 DO
             begin
                  MS.Read(C, 1);
                  O := C;
                  C := (C xor (Key shr 8));
                  Key := (O + Key) * C1 + C2;
                  SS.Write(C,1);
             end;
       SS.SaveToFile(OutFName);
    FINALLY
           SS.Free;
           MS.Free;
    end;

end;

function TJiaMi.JieMiS(const S: String
Key: Word): String;
var
   I: Integer;
begin
  Result := S;
  for I := 1 to Length(S) do
  begin
        Result[I] := char(byte(S[I]) xor (Key shr 8));
        Key := (byte(S[I]) + Key) * C1 + C2;
   end;

end;

end.[:)]
 
滚你妈的蛋!你以为这是找免费劳工的地方呀!
破JB分谁稀罕那,不要脸!
 
我想对密码加密,只要一个函数,写好就给分
 
有能力的答
无能的情别搞人生攻击
 
呵呵,从理论上来说你的要求是不可能实现的:
从1——16位不定长度的字符,并要求结果维一,(就是一一对应了!)
16不定长的排列组合结果应该远大于16位定长字符的组合结果。

简单的实现上面已经说了,做点补充:
对于不定长的串你可能要补齐:‘1’=》‘1000000000000000’



 
滚你妈的蛋!你以为这是找免费劳工的地方呀!
破JB分谁稀罕那,不要脸!
 
TNND,问问题也这么嚣张,TMD,就是知道也不告诉你。NND XIONG
 
骂你算看的起你了!
 
多人接受答案了。
 
**** ALL OF YOU 骂我的没份!!!!!!!!!!!!!!!
 
后退
顶部