2017-09-23 1 views
2

So versuche ich zufällig XOR, das ist 4 Bytes, mit je vier Bytes etwas. Die Sache ist, ich möchte zufällig auf ans ändern (was das Ergebnis des XOR ist) und dann weitermachen. Im Prinzip wird die Zufallsvariable beim ersten Mal eine feste Zahl sein, wird sich aber danach ändern, bis die Schleife endet. Mein Code scheint die richtige Logik zu haben, aber ich bekomme immer wieder (Operator^auf Scheibe nicht definiert)Xoring ein Stück in Go

random := 4 bytes 
for j:=0;j<len(something);j+=4{ 
ans:=something[j:j+4]^random 
random=ans 
} 

Meine Vermutung ist, in Scheiben schneiden nicht xor zulässt, und etwas wird in Scheiben schneiden, da ich sein mische das Array in mehrere Bytes. Irgendeine Idee, wie man dieses Problem löst?

+1

Siehe 'Krypto/Chiffre/xor.go' XOR Bytes Implementierung https://github.com/golang/go/blob/master/src /crypto/cipher/xor.go#L45-L54 und entwerfe dein Design. – jeevatkm

+0

@jeevatkm die Variable "a" in dem Beispiel scheint nicht "Byte" oder eine Scheibe zu sein, die es anders als meins macht. Es sei denn, wenn ich etwas verpasse? – rullzing

+0

In dem obigen Quellcode-Referenzlink; 'dst',' a', 'b' ist ein Byte-Slice. – jeevatkm

Antwort

2

Die Anwendung sollte xor die einzelnen Bytes. Etwas wie folgt aus:

var random [4]byte 
for i, b := range something { 
    random[i&3] ^= b // xor b on element of random 
} 

Dies setzt

random[0] = random[0]^something[0]^something[4] .... 
random[1] = random[1]^something[1]^something[5] ... 
... and so on 
+0

Ich meinte eigentlich 4 Bytes, nicht die ganze Zahl 4. Sorry, das war vorher nicht klar. Ich habe die Frage bearbeitet – rullzing

+0

Das hat perfekt funktioniert! Vielen Dank – rullzing