Это мой 3-й поток, касающийся проблемы Blowfish в C #. Несмотря на то, что я не могу внедрить Blowfish в свое приложение, я решил использовать его как внешнюю C ++ DLL.
Обратите внимание, что я пробовал Blowfish.NET и любые другие, проблема в том, что я переводил код с C ++ на C #, и код C # должен делать то же самое, что и код C ++.
Пока:
---> Источник C ++ DLL <--- </a>
Обратите внимание, что экспортируемые функции находятся в конце кода
код C # (определение)
[DllImport("TestDLL.dll", EntryPoint = "Initkey" ,ExactSpelling = true , CallingConvention = CallingConvention.Cdecl)]
public static unsafe extern void Initkey(byte[] key);
[DllImport("TestDLL.dll", EntryPoint = "encode", ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static unsafe extern void encode(UInt32 *stream);
код C # (вызов функции)
-Инициализировать ключ blowfish
UInt32[] keyarray = new UInt32[2];
//some code
Extern.Initkey(Misc.ConvertFromUInt32Array(keyarray));
//
//
//Helper function used to convert a UInt32 array into Byte array.
public static byte[] ConvertFromUInt32Array(UInt32[] array)
{
List<byte> results = new List<byte>();
foreach (UInt32 value in array)
{
byte[] converted = BitConverter.GetBytes(value);
results.AddRange(converted);
}
return results.ToArray();
}
-Кодировать данные.
UInt32[] keyarray2 = new UInt32[2];
//some code
unsafe
{
fixed (UInt32* LPBYTE = keyarray2)
{
Extern.encode(LPBYTE);
}
}
После того, как keyarray2 перезаписан функцией Encode, я проверяю значения в коде C ++, расшифровывая их, чтобы убедиться, что все в порядке.
Ну, это не хорошо. Это моя проблема, поэтому я прошу вас о помощи.
Значения отличаются, когда я дешифрую их, но если я зашифрую их и расшифрую в источнике C ++, они будут равны. Код C ++ абсолютно одинаков, за исключением того, что нет DLL, поскольку код находится в C ++.
Может ли это быть из-за функции Initialize. Несколько месяцев назад я читал, что массивы в C ++ передаются как указатели. Я не верю в это, но даже в этом случае - может ли это быть проблемой?
Я не могу найти подсказку. Я потратил впустую свою жизнь с этим Blowfish в C #. По крайней мере, это решение должно работать, но это не так - Почему?