이 아니며 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에서 구현되어야하는지 가르쳐 주시겠습니까?
// 참고이 패킷을 한 번만 여러 번 보낼 필요는 없습니다.
미리 감사드립니다.
http://stackoverflow.com/questions/692810/c-problem-using-blowfish-net-how-to-convert-from-uint32-to-byte - 어쩌면 이것은 단서를 줄 수 있습니다 –