Comment puis-je lire toutes les valeurs hexagonales de cryptogramme?

voix
-1

Il y a un cryptogramme sans extension qui a une taille de 32 octets. Par conséquent, je peux obtenir ses valeurs hexagonales avec l' éditeur hexadécimal et ses valeurs hexagonales sont;

a3 0b 35 8f 14 27 4E fe 5e 5a bd 8c 8b 53 a0 cb ae da d3 fc 87 8b 51 0b d6 37 3e 91 86 9f f3 c9

J'ai essayé de lire ces valeurs de cryptogramme avec mon code qui est,

ifstream stream;
unsigned char c;
char arr[2];
char cipherhex[65];
int i=0;
stream.open(ciphertext2);
while (!stream.eof()) {
    stream >> c;
    sprintf(arr, %02x, c);
    cout << arr[0] << arr[1] <<  ;
    cipherhex[i] = arr[0];
    cipherhex[i+1] = arr[1];
    i += 2;
}

Cependant, quand je lance ce code, bien qu'il y ait une condition 0x type de valeurs hexagonales, il peut lire ces valeurs hexagonales;

a3 35 8f 14 27 4E fe 5e 5a bd 8c 8b 53 a0 cb ae da d3 fc 87 8b 51 d6 37 3e 91 86 9f f3 c9 c9

Le code ne peut pas lire 0b , 09 , 0C , mais pour différentes cryptogrammes il peut lire 03 ou 0e . Je ne pouvais pas comprendre comment il peut lire 03 et 0e mais ne peut pas 09 ou 0b . Merci d'avance.

En général, il n'y a pas de problème avec la lecture des valeurs hexagonales, mais il y a un problème de lecture des valeurs spécifiques que je l'ai mentionné ci-dessus.

Créé 07/11/2018 à 20:16
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

Votre code a plusieurs erreurs dans ce:

  • ne pas ouvrir le fichier en mode binaire.

  • en utilisant operator>>pour lire formatés caractères, qui ne tient pas compte des caractères blancs.

  • ne pas allouer suffisamment de mémoire pour arr[], ce qui provoque un débordement de tampon sprintf().

  • en utilisant !eof()comme condition de la boucle .

  • non nul de terminaison cipherhexaprès lecture se fait ( en option) .

Essayez ceci:

ifstream stream;
char c, arr[3], cipherhex[65];
int cypherhexlen = 0;
stream.open("ciphertext2");
while ((cypherhexlen < 64) && stream.get(c)) {
    sprintf(arr, "%02x", static_cast<unsigned char>(c));
    cout << arr[0] << arr[1] << " ";
    cipherhex[cypherhexlen] = arr[0];
    cipherhex[cypherhexlen+1] = arr[1];
    cypherhexlen += 2;
}
cipherhex[cypherhexlen] = '\0';
// use cipherhex as needed...

Sinon, j'opter pour quelque chose comme ceci:

ifstream stream;
unsigned char cipher[32];
stream.open("ciphertext2");
stream.read(reinterpret_cast<char*>(cipher), 32);
int cypherlen = stream.gcount();
for(int i = 0; i < cypherlen; ++i) {
    cout << hex << noshowbase << setw(2) << cipher[i] << " ";
}
// use cipher as needed...
Créé 07/11/2018 à 20:59
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more