Pracuję nad programem do połączenia z jakimś sprzętem, który wysyła dane, które zostały zakodowane i opakowane w celu wysłania w bloku CDATA w dokumencie XML.Czy każdy może zidentyfikować to kodowanie?
oprogramowanie w urządzeniu, o ile wiem, jest napisane w języku Python i piszę interfejs w Delphi.
dane urządzenie wysyła to jest
\ x00E \ x18 \ x10 \ x14} UF! A \ x81 \ XAC \ X08 & \ X02 \ X01 \ n \ x15 \ X1A \ xc2PP \ x92 \ x17 \ xc2 \ xc1 \ xa0 \ x0e \ x1a \ xc2 \ xd0K \ x94 \ '\ x830 \ x11 \ x8b \ x84a_ \ xa0 + \ x04 \ x81 \ x17 \ x89 \ x15D \ x91B \ x05. \ x84 \ xf1 \ x1b \ x89% E \ x00 \ x04 \ x9c \ x0e \ xc5 \ xc1 = \ x87 \ x0bE \ xf18 \ x07 \ x1f \ xc8a \ xa5 \ x95 \ x08H \ x80? \ x84 \ x18 \ tPK \ x8a $ \ t \ xf1 \ xb2 \ x8e (J \ xb0 \ x08 \ x91 \ x1eJ \ xf0W \ x0c- \ x0b \ xf0 \ x0e \ x88 \ x07 \ x0c \ x00 \ x9b \ n \ x910Z \ x06! \ x92 \ xf0W \ x073S \ x08 \ x87 \ xff \ xff \ xff \ xf0 \ x0e \ xff \ xff \ xff \ xff \ xf3 \ x10 \ x0e \ xba \ xff \ xff \ xff \ xf4C \ xed \ xbb \ xb9_ \ xffDD1 \ r \ xcb \ xbaw \ xf5TD2 \ xed \ xbb \ xba \ x8 8EUDB \ x0c \ xba \ xaa \ x99UUDB \ x0c \ xaa \ xa9UUD2 \ r \ xbb \ xaa \ xaaUTD \ \ r \ xcb \ xbb \ xaaUTC! \ R \ xcb \ xbb \ xbbUD3! \ X0e \ xdc \ xbb \ xbbDD3! \ x0e \ xdc \ xcc \ xbbDC2! \ x0e \ xdc \ xcc \ xcc33 "\ x11 \ x0e \ xdd \ xcc \ xcc \ xf33! \ x10 \ x0e \ xee \ xdd \ xcc \ xf32! \ x10 \ x0e \ xee \ xdd \ xdc \ xff2! \ x10 \ x00 \ xee \ xee \ xdd \ xff \ xf2! \ x11 \ x00 \ x0e \ xee \ xdd \ xff \ xf2! \ x11 \ x10 \ x0e \ xee \ xef \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00
Muszę mieć możliwość wysyłania podobnych danych z powrotem do urządzenia, ale format, w którym go mam, to jest
0x451C0E148A4A65781B0291080E1644B0680B340580A28615C9001E8F1EC9F0559D260A4147901A0AF16D93304BC09A8523CC513E25218CA00CD42C0CE137891FCDB02397054DD07C04124E112408158E5124841E0ED17F8E28CEE12C96284F511B231C8FB07C1228D09079BD31D090960B2050B075871CD1217B8D171131830B3552509A8E295271621D2E9271AD972ED371AB93FFFCDFFFFFFFFFFFFCDDFFFFFFFFFFBCCDE0122FFFFFBCCDE01123FFFBBBCDE011234FFAABCDE0FFAABCCE0FFAAABCDEFFAAABCDEFFAAAABCE01344FAAA99ABE12344FAAA99ABE124555FAA99AAC044555FAA9999A96655FFAA9989998765FFAA98899BB855FFAA9999ABBD45FFAA9999ABCD34FAAA999AABCD345FAAA999BBCD33F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Wiem, że \ x jest zwykle używane do reprezentowania znaków ASCII przy użyciu ich wartości szesnastkowych w dwuznakowych parach, ale w tym przypadku nie chodzi o dane. Staram się zidentyfikować używane kodowanie, a producent nie zapewnia dużej pomocy.
co chcę wiedzieć, w jaki sposób mogę przekonwertować hex mam do formatu, którego używają w Delphi xe4?
BTW dwa blok nie zawierają te same dane, ale jest to ten sam typ danych, tj format jest taki sam, tylko inny kodowania
przykładem wysyłanych danych
POST ******** HTTP/1.1 Host: 172.16.1.136:8080 Accept-Encoding: identity Content-Length: 1552 Content-Type: text/xml Authorization: 1344354:PASS User-Agent: *********
<?xml version="1.0" encoding="utf-8"?> <Biometrics> <Templates>
<Template badge="1075" readerType="6" index="6" ts="2014-11-06T17:28:40.000+01:00" chk="3a6a4924ec04e668186b15e244e6fe73"> <![CDATA[ ['1075_6',
1415294920.3754971, [0, 0], [['3\x04\x00\x00\x00P\x00\x00E\x18\x10\x14}*UF!A\x81\xac\x08&\x02\x01\n\x15\x1a\xc2PP\x92\x17\xc2\xc1\xa0\x0e\x1a\xc2\xd0K\x94\'\x830\x11\x8b \x84a_\xa0+\x04\x81\x17\x89\x15D\x91B\x05.\x84\xf1\x1b\x89%E\x00\x04\x9c\x0e\xc5\xc1=\x87\x0bE\xf18\x07\x1f\xc8a\xa5\x95\x08H\x80?\x84\x18\tPK\x8a$\t\xf1\xb2\x8e(J\xb0\x08\x91\x1eJ\xf0W\x0c-\x0b\xf0\x0e\x88\x07\x0c\x00\x9b\n \x910Z\x06!\x92\xf0W\x073S \x08\x87\xff\xff\xff\xf0\x0e\xff\xff\xff\xff\xff\xf3\x10\x0e\xba\xff\xff\xff\xf4C \xed\xbb\xb9_\xffDD1\r\xcb\xbaw\xf5TD2\xed\xbb\xba\x88EUDB\x0c\xba\xaa\x99UUDB\x0c\xba\xaa\xa9UUD2\r\xbb\xaa\xaaUTD2\r\xcb\xbb\xaaUTC!\r\xcb\xbb\xbbUD3!\x0e\xdc\xbb\xbbDD3!\x0e\xdc\xcc\xbbDC2!\x0e\xdc\xcc\xcc33"\x11\x0e\xdd\xcc\xccC3"\x11\x0e\xed\xdc\xcc\xf33!\x10\x0e\xee\xdd\xcc\xf32!\x10\x0e\xee\xdd\xdc\xff2!\x10\x00\xee\xee\xdd\xff\xf2!\x11\x00\x0e\xee\xdd\xff\xf2!\x11\x10\x0e\xee\xef\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00']]] ]]> </Template>
</Templates> </Biometrics> HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Content-Type: text/xml;charset=ISO-8859-1 Transfer-Encoding: chunked Date: Thu, 06 Nov 2014 17:28:41 GMT
52 <?xml version="1.0" encoding="UTF-8"?><OperationStatus uid="">OK</OperationStatus> 0
Są to szablony biometryczne używane przez Suprema Reader, jeśli to pomaga.
Rozwiązanie
I pomyślnie rozszyfrować, co się dzieje z tym teraz. aby zamienić mój oryginalny ciąg szesnastkowy w wymagany format, w którym używam tego kodu, mam nadzieję, że pomoże to komuś innemu w przyszłości. Prosimy o komentarze i sugestie dotyczące ulepszenia kodu.
class function TConvert.HexToPythonEscAscii(const aHexString: string): string;
var
i: Integer;
ByteArray: array of Byte;
begin
Result := '';
SetLength(ByteArray, (length(aHexString) div 2));
TConvert.HexToBytes(aHexString, ByteArray, length(ByteArray));
for i := Low(ByteArray) to High(ByteArray) do
begin
if ByteArray[i] in [$20..$7E] then
begin
case ByteArray[i] of
$5c : Result := Result +'\\';
$27 : Result := Result +'\''';
else
Result := Result + char(ByteArray[i])
end;
end
else
begin
case ansichar(ByteArray[i]) of
TAB : Result := Result + '\t';
LF : Result := Result + '\n';
CR : Result := Result + '\r';
else
Result := Result + '\x' + LowerCase(IntToHex(ByteArray[i], 2));
end;
end;
end;
end;
To brzmi jak pytanie dla http://reverseengineering.stackexchange.com/. – TLama
Wygląda raczej na tekst binarny niż zakodowany. Co mówią doktorzy? –
Co do \ x to tylko bajt reprezentowany jako hex. Cała reszta to ascii. –