/ / Un moyen de contourner mon cryptage XOR nécessitant une taille en texte brut - php, c ++, cryptage, xor

Un moyen de contourner mon cryptage XOR nécessitant une taille en texte brut - php, c ++, cryptage, xor

J'ai regardé quelques exemples de XOR et je suis incapable de trouver une réponse.

C’est le code que j’utilise pour PHP:

 for($i=0;$i<strlen($text);)
{
for($j=0;($j<strlen($key) && $i<strlen($text));$j++,$i++)
{
$outText .= $text{$i} ^ $key{$j};
//echo "i=".$i.", "."j=".$j.", ".$outText{$i}."<br />"; //for debugging
}
}

Et le code résultant du déchiffrement en C ++:

for (int i = 0; i < original.size();)
{
for (int j = 0; (j < key.size() && i < original.size()); j++, i++)
{
decrypted += encrypted[i] ^ key[j];
}
}

Je ne parviens pas à résoudre le problème de la taille du texte en clair (std :: string original dans ce cas).

Sans, si tout va bien, changer radicalement ma façon de faire l'algorithme, y a-t-il un moyen de contourner cela?

Merci d'avance!

Réponses:

2 pour la réponse № 1

Le texte chiffré et le texte en clair ont la même longueur. Donc, soit la taille fera l'affaire.

De plus, vous n'avez pas besoin de deux niveaux d'imbrication de boucle pour le faire en PHP ou C ++.

Votre code devrait ressembler davantage à ceci:

 $textlen = strlen($text);
$keylen  = strlen($key);
for ($i = 0; $i < $textlen; $i++)
{
$outText .= chr( ord( $text{$i} ) ^ ord ( $key{$i % $keylen} ) );
}

J'ai répondu à une autre question sur le cryptage XOR ici, car il semble être à la mode ces jours-ci.

BTW, si vous essayez de transférer ce code PHP en C ++, sachez que (contrairement à PHP), strlen s’arrête aux ASCII NUL et ne fait pas ce que vous voulez. Vous feriez mieux d’utiliser soit std::string ou vector<char> pour la version C ++. (Voir le lien ci-dessus pour mon code C ++.)