2012-08-12 3 views
0

네트워크를 통해 패킷을 수신하고 있습니다. 그러나 일부 패킷에는 동적 길이가 있으므로 두 번째 바이트에는 길이가 포함 된 2 바이트 길이의 WORD가 있습니다. 그래서 패킷 번호를 먼저 받았다가 길이에 따라 모두받습니다. 암호화가 없으면 모든 것이 여기에 있습니다. 투 어류 또는 복어 암호화를 사용하면 동일할까요? 내 말은 'A'는 'B'로 암호화되지만 'AA'는 'BB'로 암호화된다는 것입니다. TF/BF로 암호화 된 패킷에서 바이트를 추출하고 해독 할 수 있습니까?복어와 이복은 바이트 단위로 암호화됩니까?

+0

"블록 암호"라고하는 이유는 무엇입니까? – PlasmaHH

답변

1

'A'는 'B'로 암호화되지만 'AA'는 'BB'로 암호화됩니다.

현명한 암호화 알고리즘으로는이 작업을 수행하지 않습니다. 그렇지 않으면 암호화 된 정보가 주파수 분석을 통해 쉽게 손상 될 수 있습니다. (이것은 덧붙여 substitution cipher으로 알려짐). 이것은 물론 blowfishtwofish에 해당합니다.

중간에 바이트를 추출하려는 경우에도 전체 패킷을 먼저 해독해야합니다.


* : 현재) 64 비트/128 비트 블록에 걸쳐 치환 암호로 두 암호화 알고리즘을 감소 약한 ECB mode을 사용하지 않는 경우.

+0

Downvoter, 관심이 있으십니까? – kennytm

1

일반적으로 해답은 암호화 된 데이터를 채우는 것입니다. 그러나 블록 길이에 도달 할 때까지 0을 더하여 패드를 칠하지 마십시오. 패딩은 너무 많은 정보를 줄 수 있습니다.

바이트를 추출하는 한, 사용 된 암호 모드 (블록간에 암호가 변경되는 방식)에 따라이 작업을 수행 할 수 없습니다. 읽으려는 바이트 바이트까지 모두 해독해야합니다. 암호화를 "투명하게"하는 일반적인 방법입니다. 예를 들어 네트워크 프로그래밍을 한 다음 SSL을 사용하여 SSL을 처리하여 다양한 암호화, 다양한 길이 처리 등의 처리를 수행하면 일반 오래된 데이터를 처리 할 수 ​​있습니다 .

SSL을 던지는 것이 좋은 생각인지 여부는 모르겠지만 개념을 사용할 수 있습니다.

1

Twofish는 기본 수준에서 16 바이트 블록을 인코딩합니다. 따라서 Twofish로 암호화 된 데이터의 최소 크기는 16 바이트입니다. 데이터에 길이가 포함되어 있으면 해독 한 다음 마지막 블록의 여분의 바이트를 버릴 수 있습니다.

그래서 'A'를 암호화하려면 (여러 가지 방법이 있습니다 - 모든 제로가 분명히 최선의 방법은 아닙니다) 16 바이트로 매핑 한 다음 1 바이트의 데이터와 원치 않는 15 바이트의 바이트를 암호화해야합니다. 16 바이트의 암호화 된 블록을 얻습니다. 암호 해독시 여분의 바이트를 버릴 수 있습니다. 둘 다 나에게 도움이되었습니다

http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation

http://en.wikipedia.org/wiki/Padding_%28cryptography%29

:

나는이 위키 피 디아 기사 읽기 반 시간을 제안한다.

관련 문제