我正在测试我们的加密是否容易(或很快)更容易被破解。加密密钥是一个字节数组(可以是任何可变长度)。因此,从填充了所有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;
如何在这个可变长度数组中增加(从第一个开始)字节并转移到下一个?
答案 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。