2017-09-23 11 views
2

私は何かの4バイトごとに4バイトのxor randomを試そうとしています。問題は、私はans(xorの結果である)にランダムに変更して、次に続けることです。だから、基本的にランダム変数は最初は固定数になりますが、その後はループが終了するまで変更されます。私のコードが正しいロジックを持っているようだ、しかし、私は(オペレータが^スライス上に定義されていない)Goでスライスをxoringする

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

私の推測では、スライスがXORを許可していない、ある、と何かが私ので、スライスする必要があります を得続けます配列を複数のバイトにスライスします。任意のアイデアはどのようにこの問題を解決するには?

+1

暗号 'を参照してください/暗号https://github.com/golang/go/blob/master/src /crypto/cipher/xor.go#L45-L54とあなたのデザイン。 – jeevatkm

+0

@jeevatkmこの例の変数 "a"は "バイト"またはスライスではないようです。私が何かを逃していないかぎり? – rullzing

+0

上記のソースコード参照リンクでは、 'dst'、' a'、 'b'はバイトスライスです。 – jeevatkm

答えて

2

アプリケーションは、個々のバイトをxorまたはxterにする必要があります。このような何か:

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

これは、設定/ xor.go` XORバイト実装

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

私は実際には整数4ではなく4バイトを意味していました。私は質問 – rullzing

+0

を編集しました。それは完璧に機能しました!ありがとう – rullzing

関連する問題