Calcul en binaire python
Bonjour à tous
Je me suis plongé dans un livre de crypto et je programme en Python ([large]M[/large]iller [large]R[/large]abin, exponentiation rapide etc).
Tous mes programmes fonctionnent avec des nombres en écriture décimale. Je voudrais maintenant plutôt utiliser des nombres binaires.
En python il y a la fonction bin() mais elle renvoie élément de type str. On peut évidemment convertir le nombre écrit en binaire en écriture décimale faire le calcul puis reconvertir en binaire. Mais je trouve ça un peu bête.
Bref y a-t-il en Python un moyen de calculer en binaire directement 100+100 ou 100**100 ou 100*100 ou 10000000//101 ou 1000000%101 sans avoir à programmer ces différentes opérations ?
Merci.
[Gary L. Miller et Michael Rabin (1931- ) prennent toujours une majuscule. AD]
Je me suis plongé dans un livre de crypto et je programme en Python ([large]M[/large]iller [large]R[/large]abin, exponentiation rapide etc).
Tous mes programmes fonctionnent avec des nombres en écriture décimale. Je voudrais maintenant plutôt utiliser des nombres binaires.
En python il y a la fonction bin() mais elle renvoie élément de type str. On peut évidemment convertir le nombre écrit en binaire en écriture décimale faire le calcul puis reconvertir en binaire. Mais je trouve ça un peu bête.
Bref y a-t-il en Python un moyen de calculer en binaire directement 100+100 ou 100**100 ou 100*100 ou 10000000//101 ou 1000000%101 sans avoir à programmer ces différentes opérations ?
Merci.
[Gary L. Miller et Michael Rabin (1931- ) prennent toujours une majuscule. AD]
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Tu peux utiliser les opérateurs binaires (<<, >>, ^, |, &) sur des entiers.
-- Schnoebelen, Philippe
Plutôt que d'avoir une clef publique en écriture décimale, je me disais que je pouvais avoir une clef publique en base 2 et faire directement le chiffrement de le déchiffrement en base 2. Après si ce n'est pas possible je convertis tout en base 10 je fais le chiffrement et le déchiffrement en base 10 puis je reconvertis en binaire. Mais je trouvais ça un peu plus compliqué.
Je ne comprends pas ta remarque :
>>> 10 <<10
10240
ce n'est pas un nombre écrit en base 2.
Merci.
-- Schnoebelen, Philippe
100**100 en base 10 = int(bin( int("100",2)**int("100",2))[2:],2) ce n'est pas beaucoup plus simple.
c'est un peu dommage que le résultat int("100",2)**int("100",2) ne soit pas un int en base 2. Ca serait plus simple, je pense.
Bon je crois que le plus simple est de convertir mon message en base 2, en base 10 et de faire le chiffrement et le déchiffrement dans cette base, puis de reconvertir en base 2.
Je te remercie Nicolas.
Robert.
Par exemple, 10001101 écrit en base 2 représente en fait le nombre 141 écrit en base 10 et le nombre 8d écrit en hexadécimal ou le nom 215 écrit en octal.
De la même manière que $\frac{3}{4}$, $0,75$, $1 - \frac{1}{4}$ ou $75 \%$ sont quatre écritures différentes du même nombre.
-- Schnoebelen, Philippe
Essaie de décrire clairement et brièvement la première étape qui te bloque (pas tout l'algorithme de crypto, hein). Donne-nous l'entrée et ce qui est attendu en sortie.
Pour calculer 100**100 où 100 est l'écriture binaire de 4, il est inutile de passer par les chaînes de caractères :
-- Schnoebelen, Philippe
et merci.
On a juste besoin de faire des opérations de base puissances, multiplications et additions modulaires. J'ai vérifié avec ton écriture. Tout cela fonctionne sans problème. A la fin du calcul on obtient bien des nombres et pas des chaînes de caractères.
Bonne soirée
Robert
oui c'est réglé. Encore merci pour les infos
Robert