Quelqu'un peut-il identifier ce codage?

Je travaille sur un programme pour l'interface avec un peu de matériel, c'est l'envoi des données qui ont été codées et enveloppé d'envoyer à l'intérieur d'un bloc CDATA dans un document XML.

le logiciel de l'appareil aussi loin que je sais, c'est écrit en Python et je suis en train d'écrire l'interface de Delphi.

les données de l'appareil envoie est ce

\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

J'ai besoin d'être en mesure d'envoyer des données vers l'appareil, mais le format que j'ai, c'est ce

0x451C0E148A4A65781B0291080E1644b0680b340580a28615c9001e8f1ec9f0559d260a4147901a0af16d93304bc09a8523cc513e25218ca00cd42c0ce137891fcdb02397054dd07c04124e112408158e5124841e0ed17f8e28cee12c96284f511b231c8fb07c1228d09079bd31d090960b2050b075871cd1217b8d171131830b3552509a8e295271621d2e9271ad972ed371ab93fffcdffffffffffffcddffffffffffbccde0122fffffbccde01123fffbbbcde011234ffaabcde001233ffaabcce001234ffaaabcde01234ffaaabcde01234ffaaaabce01344faaa99abe12344faaa99abe124555faa99aac044555faa9999a96655ffaa9989998765ffaa98899bb855ffaa9999abbd45ffaa9999abcd34faaa999aabcd345faaa999bbcd33f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Je sais que \x est généralement utilisé pour représenter les caractères ascii à l'aide de leurs valeurs hexadécimales dans les 2 paires de chiffres, mais en regardant les données, ce n'est pas le cas. j'ai du mal à identifier le codage utilisé et le fabricant n'est pas de fournir beaucoup d'aide.

ce que je veux savoir, c'est comment puis-je convertir l'hexagone, j'ai pour le format qu'ils sont à l'aide de Delphi xe4?

Entre les deux blocs ne contiennent pas les mêmes données, mais c'est le même type de données, c'est à dire le format est le même, juste un codage différent

exemple des données envoyées

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

Ce sont biométriques, les modèles utilisés par la Suprema Lecteur si cela aide.

Solution

J'ai réussi à déchiffrer ce qui se passe maintenant. pour activer ma chaîne hexadécimale dans le format requis, je suis en utilisant ce code, espérons que cela aide quelqu'un d'autre dans l'avenir. N'hésitez pas à commenter et faire des suggestions pour améliorer le code.

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;
Il sonne comme une question de reverseengineering.stackexchange.com.
Ressemble binaire plutôt que le texte codé. Ce qui ne les docs disent?
Comme pour le \x qui est juste un octet représenté comme hex. Tout le reste est de l'ascii.
docs dire cela, mais son manifestement erronées "les données doivent être envoyées au format ASCII. Si un modèle est binaire, il doit être encodé en Base64"
Ive a eu ces commentaires du fabricant "je pense que c'est un peu relatif; les caractères individuels sont exprimés en UTF-8, mais ils pourraient se combiner pour représenter une plus grande UTF-16 éléments, mais comme présenté peut être fait vraiment avec n'importe quel jeu de caractères. Malheureusement, certains environnements, ou des langues rendre le traitement unicode plus facile que d'autres; le nôtre son origine, non pas tellement dans les autres. Donc, pour nous, il est facile de convertir une simple chaîne de caractères ASCII. Chaque char est encore un ord() 0..255, donc peut être lu/écrit en ascii, hex ou unicode."

OriginalL'auteur Mike Taylor | 2014-11-07