라켓 언어로 작성한 RC4 암호의 C# 구현을 변환하려고합니다.라켓에 RC4 구현
그러나 그들은 다른 키 스트림을 생성합니다. 나는 이미 키 스케쥴링 단계를 오판 할 가능성을 제거했다. 이는 동일한 배열 S
을 생성하므로 정확해야합니다. 따라서 저는 키 스트림 생성 단계에서 차이점을 찾는 데 중점을 둡니다.
C 번호 :
public int Dencode (int c)
{
I = (I + 1) % 256;
J = (J + S [I]) % 256;
int tmp = S [I];
S [I] = S [J];
S [J] = tmp;
return S [(S[I] + S[J]) % 256]^c;
}
라켓 : swap
와
(define (toret c)
(set! i (unsafe-fxmodulo (add1 i) 256))
(set! j (unsafe-fxmodulo (add1 (Sr i)) 256))
(swap! (box (Sr i)) (box (Sr j)))
(bitwise-xor (Sr (unsafe-fxmodulo (+ (Sr i) (Sr j)) 256)) c))
가
(define (swap! ba bb)
(define temp (unbox ba))
(set-box! ba (unbox bb))
(set-box! bb temp))
및 (define (Sr x) (unsafe-bytes-ref S x))
정의 Sr
정의.
차이점은 무엇입니까? 왜 이러한 기능이 다른 출력을 내고 있습니까? 두 경우 모두 i
과 j
은 0으로 초기화되고 S
은 동일한 256 바이트 배열입니다.
이것은 C++ 태그와 어떤 관련이 있습니까? –