static void saacproto_jEncode(char *src,int srclen,int key,char *encoded,int *encodedlen,int maxencodedlen)
{
 char sum=0;
 int i;
 if(srclen+1 > maxencodedlen){
  *encodedlen = maxencodedlen;
  for(i=0;i<(*encodedlen);i++)encoded[i] = src[i];
 }
 if(srclen+1 <= maxencodedlen){
  *encodedlen=srclen+1;
  for(i=0;i<srclen;i++){
   sum = sum + src[i];
   if(((key%7) == (i%5))||((key%2) == (i%2))) src[i] = ~src[i];
  }
  for(i=0;i<(*encodedlen);i++){
   if(abs((key%srclen)) > i) encoded[i] = src[i] + sum*((i*i)%3); 
   if(abs((key%srclen)) == i) encoded[i] = sum;
   if(abs((key%srclen)) < i) encoded[i] = src[i-1] + sum*((i*i)%7); 
  }
 }
}
static void saacproto_jDecode(char *src,int srclen,int key,char *decoded,int *decodedlen)
{
 char sum=0;
 int i;
 *decodedlen=srclen-1;
 if( *decodedlen == 0 ){
  return;  /* return error if length is 0 */
 }
 sum = src[abs(key%(*decodedlen))];
 for(i=0;i<srclen;i++){
  if(abs((key%(*decodedlen))) > i) decoded[i] = src[i] - sum*((i*i)%3);
  if(abs((key%(*decodedlen))) < i) decoded[i-1] = src[i] - sum*((i*i)%7);
 }
 for(i=0;i<(*decodedlen);i++){
  if(((key%7) == (i%5))||((key%2) == (i%2)))decoded[i] = ~decoded[i];
 }
}

解决方案 »

  1.   

    ///都是基本语法,随手改一下,语法上应该没问题,可不可用你试试吧procedure saacproto_jEncode(src:pchar;srclen:integer;key:integer;encoded:pchar;var encodedlen:integer;maxencodedlen:integer);
    var
       sum:byte;
       i:integer;
    begin
     sum:=0;
     if srclen+1 > maxencodedlen then
     begin
      encodedlen := maxencodedlen;
      for i:=0 to encodedlen-1 do
         encoded[i] := src[i];
     end;
     if srclen+1 <= maxencodedlen then
     begin
      encodedlen:=srclen+1;
      for i:=0 to srclen-1 do
      begin
       sum := sum + byte(src[i]);
       if(((key mod 7) = (i mod 5)) or ((key mod 2) = (i mod 2))) then
         src[i] := char(not byte(src[i]));
      end;
      for i:=0 to encodedlen-1 do
      begin
       if(abs((key mod srclen)) > i) then encoded[i] := char(integer(src[i]) + sum*((i*i) mod 3));
       if(abs((key mod srclen)) = i) then encoded[i] := char(sum);
       if(abs((key mod srclen)) < i) then encoded[i] := char(integer(src[i-1]) + sum*((i*i) mod 7));
      end;
     end;
    end;
    procedure  saacproto_jDecode(src:pchar;srclen:integer; key:integer;decoded:pchar;var decodedlen:integer);
    var
     sum:byte;
     i:integer;
     begin
     sum:=0;
     decodedlen:=srclen-1;
     if( decodedlen = 0 ) then
     begin
      exit;  { return error if length is 0 }
     end;
     sum := byte(src[abs(key mod decodedlen)]); for i:=0 to srclen-1  do
     begin
      if abs(key mod decodedlen) > i then  decoded[i] := char(integer(src[i]) - sum*((i*i) mod 3));
      if abs(key mod decodedlen) < i  then  decoded[i-1] := char(integer(src[i]) - sum*((i*i) mod 7));
     end;
     for i:=0 to decodedlen-1 do
     begin
      if(((key mod 7) = (i mod 5)) or ((key mod 2) = (i mod 2))) then
         decoded[i] := char( not byte(decoded[i]));
     end;
    end;