2009-04-01 2 views
0

이 아니며 C++ 복어는 < 자 미만의 블록을 암호화하는 것을 지원하지만 .NET은 그렇지 않습니다. 왜? C++ 복어는 더 적은 수의 문자로 작동하지만 C# 복어는

-->C# NET Blowfish<-- 모두 C++ 및 C# 애플리케이션에서 -->C++ Blowfish<--

는, I는 I는 동일한 파라미터를 암호화 함수를 호출 모두 C++과 C# 1 애플리케이션의 다음 배열을

byte response[6] = 
    { 
     0x00, 0x80, 0x01, 0x61, 0x05, 0x06 
    }; 

암호화.

C++ 
Blowfish.Encrypt((LPBYTE)responce + 2,(LPBYTE)responce + 2, 4); 

C# 
Blowfish.Encrypt(responce, 2, responce, 2, responce.Length - 2); 

그러나 C++에서는 데이터가 암호화되지만 C#에서는 암호화되지 않습니다.

라인 45,47 및 49에서 C# NET Blowfish은 45 행에서 계산 한 후에 문제가되는 행입니다. 결과는 0이됩니다. 행 47은 2 + 0 = 2가되고 행 49 2는 2보다 작지 않으므로 더 이상 없습니다. 고리.

C++ 복어에는 약간의 패딩이 있지만 이해하려고하면 길어집니다.

내 문제는 C#에서 패딩이 C와 정확히 같아야한다는 것입니다. 유효한 대답을 얻습니다. 임의의 패딩을 사용할 수없고 암호 해독 후 쓸모없는 바이트를 제거 할 수 없으므로 서버 암호화 된 배열을 보내는 것은 내 것이 아닙니다.

C++ 복어에서 어떤 패딩이 사용되고 어떻게 C# NET에서 구현되어야하는지 가르쳐 주시겠습니까?

// 참고이 패킷을 한 번만 여러 번 보낼 필요는 없습니다.

미리 감사드립니다.

+0

http://stackoverflow.com/questions/692810/c-problem-using-blowfish-net-how-to-convert-from-uint32-to-byte - 어쩌면 이것은 단서를 줄 수 있습니다 –

답변

2

헤더 주석 말한다 (아무도함으로써이 질문에 깨진 떠나, 한 동안 그것을 읽는 경우 붙여 넣기가 제거 될 것이다, 그런데 SO에 대한 권장하지 않음) 당신이 pastebinned 코드 :

/// Note that the number of bytes must be adjusted to the block size of the algorithm. 

(라인 3과 4). 그래서 그것이 당신의 크기가 작은 데이터를 무시한다면 그것은 spec으로 행동하는 것처럼 보입니다.

는 C++ 코드

가 null 바이트 패딩 것 같다, 코멘트는 말한다 :

// pad end of data with null bytes to complete encryption 

이 언더 입력을 처리하는 방법을 보려면, C++ 기능 GetOutputLength()를 참조하는 것이 도움이 될 것입니다. 나는 그것이 위쪽으로 돌았다고 추측하지만 그것은 확인하는 것이 좋을 것이다.

+0

@unwind, 도움을 주셔서 감사합니다! 함수는 여기에서 볼 수 있습니다 - >> http://pastebin.com/m71b97dc6 유효한 답을 얻었을 때 제 질문을 편집하므로 앞으로는 계속 살아있을 것입니다. –

관련 문제