OVH Cloud OVH Cloud

XOR en shell

30 réponses
Avatar
octane
Bonjour,

je cherche a xor des chaines de caracteres.
Existe t'il un bout de script shell qui realise ce genre de chose, ou
il faut obligatoirement passer par un langage de programmation?

Merci

10 réponses

1 2 3
Avatar
Stephane Chazelas
2006-06-11, 21:00(+02), Harpo:
[...]
zaurus:~> od
zsh: correct 'od' to 'do' [nyae]? n
zsh: command not found: od
zsh: exit 127 od

Note: c'est un Linux.
[...]


Alors ce systeme n'est pas Unix compliant. C'est de l'embbeded?
(ce qui serait surprenant vu qu'il y a un zsh).


Je suis étonné qu'il n'ait pas 'od', sur Debian c'est dans le
package 'coreutils' qui contient cat ... dd ... mv ... rm ... et toutes
les commandes de base sans lesquelles la survie est impossible.


Oui od etait present sous Unix meme avant le Bourne shell, il
est specifié par POSIX, par Unix, XPG...

Par contre, il y a plusieurs syntaxes d'options differentes.
Sur certains systemes, on trouve encore les vieilles syntaxes,
il faut alors chercher le cas echeant le od POSIX dans `getconf
PATH`.

Mais je n'ai jamais vu de systeme Unix sans od du tout (a part
dans l'embedded ou on ne trouve que le strict minimum, mais la
on ne peut plus vraiment parler d'Unix).

--
Stéphane



Avatar
Nicolas George
Stephane Chazelas wrote in message
:
zaurus:~> od


Alors ce systeme n'est pas Unix compliant. C'est de l'embbeded?


Avec un prompt comme ça, j'aurais tendance à dire que c'est un Zaurus, donc
effectivement de l'embarqué, mais plutôt costaud.


Avatar
Vincent Lefevre
Dans l'article ,
Stephane Chazelas écrit:

Alors ce systeme n'est pas Unix compliant. C'est de l'embbeded?


Oui, c'est un Zaurus, avec la ROM Sharp d'origine.

(ce qui serait surprenant vu qu'il y a un zsh).


Installé par moi-même.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / SPACES project at LORIA

Avatar
Vincent Lefevre
Dans l'article <448c6894$0$928$,
Harpo écrit:

Je suis étonné qu'il n'ait pas 'od', sur Debian c'est dans le
package 'coreutils' qui contient cat ... dd ... mv ... rm ... et toutes
les commandes de base sans lesquelles la survie est impossible.


Sur Zaurus, ces commandes de base sont fournies par busybox.
Mais il n'y a pas od:

zaurus:~> busybox true
zaurus:~> busybox od
od: applet not found

Il s'agit de: BusyBox v0.60.4 (2003.04.15-01:23+0000)

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / SPACES project at LORIA

Avatar
octane

je cherche a xor des chaines de caracteres.
Existe t'il un bout de script shell qui realise ce genre de chose, ou
il faut obligatoirement passer par un langage de programmation?


Qu'est-ce que tu entends par xor des chaines de caracteres ?

un caractere peut etre represente comme une valeur hexa, qui

elle meme n'est que binaire.
Par exemple, 'd' qui peut s'ecrire 100 en decimal, 65 en hexa
ou 01100101 en binaire.
Je peux chercher a xor 'd' et 'h' dans ce cas.
Voir meme xor le message "un petit poisson qui fait du velo"
avec la cle "crypto" repetee plusieurs fois.

d'ou ma question.

Les shells POSIX on un operateur arithmetique XOR, mais je ne
sais pas ce que ca veut dire pour des chaines de caracteres.

$ echo "$((1 ^ 2))"
3

A la limite, tu peux faire des xors de caracteres en tant
nombres par:

chaine1«c
chaine23
eval "echo "$(
printf %s "$chaine1$chaine2" |
od -vAn -tu1 |
tr -s '11 ' '1212' |
awk -v n="${#chaine1}" '
!/./{next}
++i <= n {a[i+n]=$1; next}
{print "$((" a[i] "^" $1 "))"}
'
)"" | awk '{printf "%c", $1}END{print ""}'

Qui renvoie "PPP", parce que "a" == 97, "1" == 48 et
97 XOR 49 == 80 (qui est P)

ca ressemble fort a ce que je veux faire, merci



Avatar
Stephane Chazelas
2006-06-11, 21:50(+00), Vincent Lefevre:
Dans l'article <448c6894$0$928$,
Harpo écrit:

Je suis étonné qu'il n'ait pas 'od', sur Debian c'est dans le
package 'coreutils' qui contient cat ... dd ... mv ... rm ... et toutes
les commandes de base sans lesquelles la survie est impossible.


Sur Zaurus, ces commandes de base sont fournies par busybox.
Mais il n'y a pas od:

zaurus:~> busybox true
zaurus:~> busybox od
od: applet not found

Il s'agit de: BusyBox v0.60.4 (2003.04.15-01:23+0000)


A ce compte la, tu n'auras peut-etre pas de sh POSIX ni Bourne
(pourra etre le sh de minix ou un ash simplifié...), tu n'auras
pas forcement sed, ou alors un sed qui ne connait que "s", tu
n'auras probablement pas awk, surtout pas perl...

Quand on construit un rootfs avec busybox, on ne met que ce
dont on a besoin.

Si on a besoin de od, on peut l'inclure. Mais si pour faire
cette operation (des xors de chaines), on a besoin d'inclure a
la fois awk et od, et si ces commandes ne serviront que pour ca,
alors autant compiler une commande qui fait ca:

int main(int c, char **v) {
char *a, *b;
if (c != 3) return 1;
for(a = v[1], b = v[2]; *a && *b; a++, b++)
putchar(*a ^ *b);
putchar('n');
return 0;
}


--
Stéphane


Avatar
Harpo
Stephane Chazelas wrote:

Si on a besoin de od, on peut l'inclure. Mais si pour faire
cette operation (des xors de chaines), on a besoin d'inclure a
la fois awk et od, et si ces commandes ne serviront que pour ca,
alors autant compiler une commande qui fait ca:

int main(int c, char **v) {
char *a, *b;
if (c != 3) return 1;
for(a = v[1], b = v[2]; *a && *b; a++, b++)
putchar(*a ^ *b);
putchar('n');
return 0;
}


C'est finalement le plus simple... :-)

Bon, il manque le #include de stdio.h ce qui montre que vous avez
compilé avec des options laxistes (ou pas compilé!).
Mes 2 sous (affriolants) : utiliser '-W -Wall' au minimum.

--
http://patrick.davalan.free.fr/

Avatar
Nicolas George
Harpo wrote in message <448d3a19$0$868$:
Bon, il manque le #include de stdio.h ce qui montre que vous avez
compilé avec des options laxistes (ou pas compilé!).


Ou seulement inclus les parties pertinentes du programme, les entêtes à
inclure se déduisant directement du code.

En revanche, l'utilisation d'un comportement implementation-defined (les
opérations binaires sur des valeurs signées) est inexcusable :-Þ

Avatar
Nicolas George
wrote in message
:
un caractere peut etre represente comme une valeur hexa, qui
elle meme n'est que binaire.
Par exemple, 'd' qui peut s'ecrire 100 en decimal, 65 en hexa
ou 01100101 en binaire.
Je peux chercher a xor 'd' et 'h' dans ce cas.


Attention de ne pas confondre caractère et octet. Par exemple :

Voir meme xor le message "un petit poisson qui fait du velo"
avec la cle "crypto" repetee plusieurs fois.


... qu'est-ce que c'est censé donner si on écrit « vélo » avec son accent ?

Soit dit en passant, le XOR avec une clef est fortement déconseillé comme
algorithme de chiffrement si la clef est plus courte que le message. Il y a
de très bons algorithmes de chiffrement disponibles en ligne de commande.

Avatar
Vincent Lefevre
Dans l'article ,
Stephane Chazelas écrit:

2006-06-11, 21:50(+00), Vincent Lefevre:
Sur Zaurus, ces commandes de base sont fournies par busybox.
Mais il n'y a pas od:

zaurus:~> busybox true
zaurus:~> busybox od
od: applet not found

Il s'agit de: BusyBox v0.60.4 (2003.04.15-01:23+0000)


A ce compte la, tu n'auras peut-etre pas de sh POSIX ni Bourne


Si, le shell par défaut est bash.

(pourra etre le sh de minix ou un ash simplifié...), tu n'auras
pas forcement sed, ou alors un sed qui ne connait que "s", tu
n'auras probablement pas awk, surtout pas perl...


Il doit y avoir awk et sed en standard. Pas perl, mais il y a un
paquet (c'est une des premières choses que j'ai installées, mais
il y a malheureusement peu de modules, et cpan ne fonctionne
pas). En revanche, je n'ai pas vu de paquet od (il faut peut-être
l'installer via les coreutils).

Si on a besoin de od, on peut l'inclure. Mais si pour faire
cette operation (des xors de chaines), on a besoin d'inclure a
la fois awk et od, et si ces commandes ne serviront que pour ca,
alors autant compiler une commande qui fait ca:

int main(int c, char **v) {
char *a, *b;
if (c != 3) return 1;
for(a = v[1], b = v[2]; *a && *b; a++, b++)
putchar(*a ^ *b);
putchar('n');
return 0;
}


Sauf qu'il n'y a pas de compilateur en standard, donc ce n'est pas
forcément mieux. J'ai également installé gcc, ceci dit.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / SPACES project at LORIA


1 2 3