День добрый, начал писать свой чат-клиент под android на Csharp/xamarin.
Столкнулся с проблемой дешифрования блоуфишем.
Набросал самый простой минимальный код без излишеств, скриншот output'а прилагаю.
Код:
using System;
using System.Text;
namespace l2packet
{
unsafe class MainClass
{
public static byte[] StringToByteArray(String hex)
{
int NumberChars = hex.Length;
byte[] bytes = new byte[NumberChars / 2];
for (int i = 0; i < NumberChars; i += 2)
bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
return bytes;
}
public static void Main (string[] args)
{
byte[] STATIC_BLOWFISH_KEY = new byte[32];
string key = "6B60CB5B82CE90B1CC2B6C556C6C6C6C";
//or
STATIC_BLOWFISH_KEY[0] = 0x6B;
STATIC_BLOWFISH_KEY[1] = 0x60;
STATIC_BLOWFISH_KEY[2] = 0xCB;
STATIC_BLOWFISH_KEY[3] = 0x5B;
STATIC_BLOWFISH_KEY[4] = 0x82;
STATIC_BLOWFISH_KEY[5] = 0xCE;
STATIC_BLOWFISH_KEY[6] = 0x90;
STATIC_BLOWFISH_KEY[7] = 0xB1;
STATIC_BLOWFISH_KEY[8] = 0xCC;
STATIC_BLOWFISH_KEY[9] = 0x2B;
STATIC_BLOWFISH_KEY[10] = 0x6C;
STATIC_BLOWFISH_KEY[11] = 0x55;
STATIC_BLOWFISH_KEY[12] = 0x6C;
STATIC_BLOWFISH_KEY[13] = 0x6C;
STATIC_BLOWFISH_KEY[14] = 0x6C;
STATIC_BLOWFISH_KEY[15] = 0x6C;
//C200 вырезал заголовок с размером из пакета
string str = "9B09F43C6A02BE5DD3D485782B8F54B46F15D32B602D6D9330A3A40519291A8C193BC97F0F05CD004DADD2B01C3B494195DFAE760E00C576690E141826583405CF573B374E2ED2DC0270D8DADB7294F03CDF5757E4CC7D4BD45F73CDABA5C3D53D3A46B8E4E1A5FCB5E1695E05EBD8FF2702FFE6E5FF5B5367FB926F5DFED57A84E5BAD3901EB97E788804F6F03625B82637C2C5E0170FDFECA65FEDA0D5177899AB73432E83182547B870D923554C03A0AB2F50375D0631A27D68707A147A37";
byte[] bytes_ = StringToByteArray (str);
additionals ad = new additionals();
fixed (byte *pbuf = &bytes_[0]){ //TODO: add overload view_raw_data( <- byte of array) later
ad.view_raw_data(pbuf,true,192);
}
L2_login.NewCrypt newc = new L2_login.NewCrypt (STATIC_BLOWFISH_KEY);
byte[] res = newc.decrypt (bytes_);
fixed (byte *ppbuf = &res[0]){
ad.view_raw_data(ppbuf,true,192);
}
}
}
}
На выводе получаю явно что-то не то (
Использовал исходники L2.net (он же L2_Login)
Что я делаю не так ?