Zitat von
fortuneNext:
TByteArray(Result)[N] := TByteArray(uncrypted)[N] xor D[T];
Also die Fehler verschwinden, wenn man das durch
PByteArray(Result)[N] := PByteArray(uncrypted)[N] xor D[T];
ersetzt.
Aber: Das ist sehr gefährlich, weil Result[0] und uncrypted[0] benutzt werden und es wahrscheinlich krachen wird. Was ist eigentlich das Hypnotische an strings, daß sie dauernd in Cryptocode verwendet werden?? Eigentlich sind sie da roh ziemlich unbrauchbar, nur als Hex- oder Base64-Ein/Ausgabe.
Im Origial verdent untyped constd bzw vars verwendet, d.h. in der Regel beim aktuellen Aufruf dann array of bytes oder so.
Zwei Ratschläge:
1. Wenn Du unbedingt strings benutzen willst, brauchst Du die Typcasts über Bytearrays eigentlich nicht, nur mußt Du halt darauf achten, daß die Indizierung bei 1 losgeht, also
Delphi-Quellcode:
for N := 1 to Count do begin
Inc(I);
T := D[I];
Inc(J, T);
D[I] := D[J];
D[J] := T;
Inc(T, D[I]);
Result[N] := char(byte(uncrypted[N]) xor D[T]);
end;
2. Nimm lieber den Originalansatz mit
const source; etc. Beim eigentlichen Aufruf kannst Du dann immer noch strings via Typecasts verwenden.
Gammatester