在数组中携带递增的字节

时间:2015-01-17 20:44:42

标签: arrays delphi

我正在测试我们的加密是否容易(或很快)更容易被破解。加密密钥是一个字节数组(可以是任何可变长度)。因此,从填充了所有0的数组开始,我需要从第一个开始一次增加一个字节。当任何字节达到最大值并返回0时,数组中的下一个字节需要递增(转移)。

如果数组是一个很短的固定长度会很简单 - 但我对如何以可变数组长度这样做是无能为力的。

在线程内声明的变量:

FKey: array of Byte;

在每次线程迭代之后,它调用此过程将密钥递增一个字节:

procedure TCrackThread.NextKey;
begin
  //Increment first byte
  //If max, reset to 0 and increment next byte
  //Recursively check the same for each following byte in array
end;

如何在这个可变长度数组中增加(从第一个开始)字节并转移到下一个?

1 个答案:

答案 0 :(得分:2)

此片段将增加第一个元素,并且只要它们是255,就会继续使用数组元素。如果是这样,它们将重置为零。一旦条件未满足或索引达到最大值,例程将立即停止。

var
  k: Integer;
...
if (Length(fKey) > 0) then begin
  k := 0;
  Inc(fKey[k]);
  while (fKey[k] = 255) do begin
    fKey[k] := 0;
    Inc(k);
    if (k >= Length(fKey)) then
      break;
    Inc(fKey[k]);
  end;
end;

这会将数组254,0,0转换为0,1,0

如果你想在第一次增量之前让一个进位波动, 这段代码会这样做:

procedure Next;
var
  k: Integer;
  carry: Boolean;
begin
  if (Length(fKey) > 0) then begin
    k := 0;
    repeat
      carry := (fKey[k] = 255);
      if carry then begin
        fKey[k] := 0;
        Inc(k);
        if (k >= Length(fKey)) then
          break;
      end
      else
        Inc(fKey[k]);
    until not carry;
  end;
end;

这会将255,255,0转换为0,0,1。