2011-03-15 4 views
4

나는 네트워크에서 복어로 암호화 된 간단한 키 배포 센터를 설치하는 프로젝트에서 학교에서 일하고 있습니다. 필자는 성공적으로 코드를 작성하고 동일한 엔디안 시스템에서 작동하도록했습니다. 이 문제는 다른 엔디 언의 기계로 보내야 할 때 발생합니다. 키는 문자 배열로 암호화되어 네트워크를 통해 송수신됩니다. 암호화 된 키가 양쪽 끝에 인쇄되면 동일한 암호화 된 문자열을 표시하지만 암호 해독에 실패합니다. 배열의 순서를 뒤집어서 해독하려고 시도했지만 결과는 같습니다.암호화 된 문자 배열의 엔디안 교환

내 질문 :

  1. 내는 char 배열의이 상황에서 엔디안 문제를 처리 할 수있는 적절한 방법을 반전인가?

  2. 엔디안 스타일의 컴퓨터에서 암호화되어 있고 리틀 엔디안 컴퓨터에서 같은 알고리즘으로 암호를 해독 할 수 없습니까?

+0

예. 당신은 어떻게 든 algo를 바꿔야 만합니다. – BlackBear

+0

반대 엔디안을 인코딩하면 제대로 해독되지 않는 이유는 무엇입니까? –

답변

2

알고리즘 구현에 따라 다릅니다. implementation your are using (BytesToBlockBlockToBytes 함수 참조)을 보면 바이트 블록을 부호없는 int로 캐스팅합니다.

이 변환은 엔디안에 따라 다르기 때문에 알고리즘은 실행되는 컴퓨터의 엔디 언을 기반으로 조정해야합니다.

0

엔디안은 데이터의 작은 요소에 적용됩니다 (http://www.codeproject.com/KB/security/blowfish.aspx 여기 내가 사용하는 복어의 버전입니다). 다른 엔디안 머신이 char 배열을 읽을 수 없다면, 그것은 아마도 같은 순서이지만 바이트가 반전 된 바이트를 기대하고 있음을 의미합니다.

따라서 char 요소의 비트 순서를 반대로해야합니다. 배열 순서는 그대로 유지됩니다.

0

일부 용량에서 바이트가 반전 될 수도 있지만 일반적으로 숫자로만 발생합니다 (http://beej.us/guide/bgnet/output/html/multipage/htonsman.html 참조). 각 char에있는 비트 일 가능성이 큽니다. 암호를 해독하기 전에 간단한 알고리즘 만 사용하면됩니다. 물론 비트 AND 바이트가 반대로되어 있으면 훨씬 재미 있습니다.

이제는 동일한 문자열을 표시한다는 사실 때문에 문제는 실제로 문자 배열에있는 것이 아니라 바이트 순서에 따라 달라지는 알고리즘 자체에 있다고 생각하게됩니다. 이 경우 확실히 위 링크를보고 멀티 바이트 유형에서 수행하는 작업에 대해 생각해야합니다. (64 비트 엔디안 스위처는 일반적으로 수동으로 작성해야하지만, 바이트 스왑은 하드 알고리즘으로 작성하는 것이 아닙니다.)

관련 문제