IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Calcul scientifique Python Discussion :

générateur de nombre alétoire


Sujet :

Calcul scientifique Python

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2016
    Messages : 42
    Points : 20
    Points
    20
    Par défaut générateur de nombre alétoire
    Bonjour,
    actuellement j'essaie de trouver l'algorithme Fortuna qui est un générateur de nombres aléatoires et ce en python 3.3,quelqu'un pourrait m'indiquer où me serait-il possible de le trouver ? Ou sinon un logiciel à télécharger me conviendrait aussi.
    Je vous remercie d'avance.

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    De quoi as-tu besoin de plus que ce qui est déjà inclus dans Python ?

    https://docs.python.org/3/library/random.html

  3. #3
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    @VinsS:

    Les exigences de la cryptographie en matière de générateurs de nombres pseudo-aléatoires sont très élevées, et il y en a peu qui sont reconnus de qualité suffisante. Fortuna est un de ceux-là: https://fr.wikipedia.org/wiki/G%C3%A...yptographiques.

    Je ne connais pas assez Fortuna pour aider le PO, mais j'ai travaillé un peu sur un autre générateur de cette petite liste: "Blum Blum Shub", qui est intéressant à programmer en Python: http://python.jpvweb.com/mesrecettes...id=genalea_bbs.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  4. #4
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2016
    Messages : 42
    Points : 20
    Points
    20
    Par défaut
    En fait je voudrais un générateur de nombres aléatoires le plus performant possible dont la graine est aléatoire , car je voudrais mettre en oeuvre le chiffre de vernam

    Merci beaucoup tyrtamos pour votre réponse , ce lien va m'être très utile .

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2016
    Messages : 42
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Bonjour,

    @VinsS:

    Les exigences de la cryptographie en matière de générateurs de nombres pseudo-aléatoires sont très élevées, et il y en a peu qui sont reconnus de qualité suffisante. Fortuna est un de ceux-là: https://fr.wikipedia.org/wiki/G%C3%A...yptographiques.

    Je ne connais pas assez Fortuna pour aider le PO, mais j'ai travaillé un peu sur un autre générateur de cette petite liste: "Blum Blum Shub", qui est intéressant à programmer en Python: http://python.jpvweb.com/mesrecettes...id=genalea_bbs.
    Par contre je code en python 3.3 et j'ai un petit problème lorsque j'entre le code ça m'affiche
    ImportError: No module named 'bibcrypto_bbs'
    comment suis-je censé rectifier s'il vous plait ?
    Merci d'avance

  6. #6
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Tu aurais dû lire la page complètement: le module à importer bibcrypto_bbs est à la fin ("Module complet à importer").

    A noter qu'il y a peut-être quelques corrections mineures de code à faire: comme indiqué, ça a été écrit pour Python 2.7.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2016
    Messages : 42
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Tu aurais dû lire la page complètement: le module à importer bibcrypto_bbs est à la fin ("Module complet à importer").

    A noter qu'il y a peut-être quelques corrections mineures de code à faire: comme indiqué, ça a été écrit pour Python 2.7.
    Justement je l'ai bien importé et ça m'affiche ça

  8. #8
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par asphi Voir le message
    Justement je l'ai bien importé et ça m'affiche ça
    Et tu l'as bien appelé "bibcrypto_bbs.py", et tu l'as mis dans le même répertoire que le programme qui l'importe?

    [edit] je viens de faire la manip, et je confirme que ça importe.

    Par contre, il y a bien des corrections à faire pour adapter à Python 3, à commencer par __builtin__ qui deviens builtins. Il s'agit d'une astuce, parce que, curieusement, on a besoin du pow de base, et il ne faut pas l'écraser avec le pow du module math qui ne supporte pas l'exponentiation modulaire (3ème argument).

    A part ça, le reste devrait marcher: commence par traiter l'un des exemples du tuto et dis-moi si ça coince quelque part.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  9. #9
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2016
    Messages : 42
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Et tu l'as bien appelé "bibcrypto_bbs.py", et tu l'as mis dans le même répertoire que le programme qui l'importe?

    [edit] je viens de faire la manip, et je confirme que ça importe.

    Par contre, il y a bien des corrections à faire pour adapter à Python 3, à commencer par __builtin__ qui deviens builtins. Il s'agit d'une astuce, parce que, curieusement, on a besoin du pow de base, et il ne faut pas l'écraser avec le pow du module math qui ne supporte pas l'exponentiation modulaire (3ème argument).

    A part ça, le reste devrait marcher: commence par traiter l'un des exemples du tuto et dis-moi si ça coince quelque part.
    Je suis vraiment désolé d'encore vous déranger mais ça ne fonctionne pas et je ne comprends pas vraiment ce que vous voulez dire par "mettre dans le même répertoire que le programme qui l'importe".Je vous l'ai mis en imprime écran :
    Nom : pythonfor.png
Affichages : 949
Taille : 111,6 Ko

  10. #10
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Il est vraiment dans C:/Users/user/Documents/informatique/ ?

  11. #11
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2016
    Messages : 42
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Il est vraiment dans C:/Users/user/Documents/informatique/ ?
    Ah oui c'est vrai , merci beaucoup ce n'était pas dans le dossier ,par contre ça me fait ça est ce normal ?
    Nom : capy.png
Affichages : 781
Taille : 119,4 Ko

  12. #12
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Ça veut dire que ce n'est pas bien d'utiliser des imports anonymes.

    import * c'est Le Mal !

    Utilise plutôt from bibcrypto_bbs import bbs_gentruc, bbs_genmachin

  13. #13
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    C'est pire que ça: d'après ce que je vois, le PO écrit directement sur le fichier qu'il fallait importer.

    C'est possible, bien sûr, mais dans ce cas, il ne faut plus l'importer! => donc, supprimer la ligne "from bibcrypto_bbs import *"

    Par ailleurs, je suis en train de faire des tests plus approfondis qu'hier, et il y a plusieurs modifications à faire pour convertir en Python 3:
    - __builtin__ => builtins
    - print ... => print(...)
    - xrange(...) => range(...)
    - gen.next() => next(gen)

    D'autres modifications plus compliquées sont nécessaires, parce que les cryptages se font couramment en octets, donc en bytes sous Python 3, alors que Python 3 travaille en unicode.

    Il faut me laisser quelques heures et je donnerai une version modernisée dans la journée.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  14. #14
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Voilà la mise à jour "Python 3" des codes du tuto concerné: http://python.jpvweb.com/mesrecettes...masque_jetable

    le fichier de bibliothèque "bibcrypto_bbs.py" est en pièce jointe.

    Il y a quelques différences évidentes (xrange => range, print ... => print(...), ...), plus une qui ne l'est pas: les fonctions de cryptage/décryptage travaillent sur des bytes et non des str! Cela nécessite des conversions dans les 2 sens avec connaissance de l'encodage si ce n'est pas de l'ascii pur.

    Attention: pour les explications, voir le tuto: je ne vais pas le réécrire ici!

    Je rappelle simplement que, au lieu d'utiliser une liste de codes pour le cryptage, on utilise ici un algorithme qui fabrique une liste de codes au hasard aussi grande qu'on le veut, afin de crypter n'importe quoi (texte, image, vidéo, etc...). Il faut, bien entendu que pour décrypter, on dispose du même algorithme et des 2 nombres qui ont servi au cryptage.

    Pour l'utilisation: En principe, on écrit du code Python dans un autre fichier qu'on place dans le même répertoire, et qui commence par importer les fonctions nécessaires avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from bibcrypto_bbs import genpremier_bbs, gengraine_bbs, crypte_bbs, chainemultilignes, entiermultilignes
    Mais, bien sûr, si on écrit à la fin du fichier "bibcrypto_bbs.py", cette ligne d'importation ne doit pas être utilisée!


    Génération des nombres nécessaires au fonctionnement du générateur Blum Blum Shub:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    np1 = genpremier_bbs(1024, 100) # 1er nb premier de 1024 bits congru à 3 modulo 4 (avec 100 essais pour MillerRabin)
    np2 = genpremier_bbs(1024, 100) # 2e nb premier ... (idem) ...
    pnp = np1*np2 # produit des 2 nombres premiers précédents
    graine = gengraine_bbs(pnp, g1=10000000, g2=99999999) # graine à 8 chiffres, premier avec pnp
    print("pnp =", pnp)
    print("graine =", graine)
    Le résultat est bien sûr différent à chaque fois (heureusement!), par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pnp = 14918821236690364048803357697827915330938033283968520044694771536930083962204522731085107976364842849618124584872512005469561358619582153354051962019051713882879895713608416554642100450496860545667414057413718678420906387634010424980338817514953869099955818435893555577287077984236763950252884280914769585067833911665408393977438690278779688153345857590291910776611048398078671383442699683071755220406286503400148046259020107019158117755289706301669627923537440322481447108082279600092947909584337555856165935214929894504908491221907537540009691905645323823752752168789754791148160238231187156550548453091395261440381
    graine = 99380446
    Vous noterez qu'on obtient un nombre de plus de 600 chiffres (2048 bits) de cette façon, et ceci en moins d'une minute. Un nombre de cette taille est quasi impossible à factoriser actuellement (en attendant l'ordinateur quantique?).

    A noter que grâce à la fonction "entiermultilignes", on peut intégrer ce grand entier dans un source Python comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print(entiermultilignes(pnp, nvar='pnp', nbcar=78, fdl='\n'))
    Ce qui donnera:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    pnp = "1491882123669036404880335769782791533093803328396852004469477153693008\
    39622045227310851079763648428496181245848725120054695613586195821533540519620\
    19051713882879895713608416554642100450496860545667414057413718678420906387634\
    01042498033881751495386909995581843589355557728707798423676395025288428091476\
    95850678339116654083939774386902787796881533458575902919107766110483980786713\
    83442699683071755220406286503400148046259020107019158117755289706301669627923\
    53744032248144710808227960009294790958433755585616593521492989450490849122190\
    75375400096919056453238237527521687897547911481602382311871565505484530913952\
    61440381"
    pnp = int(pnp)
    On va maintenant crypter et décrypter le texte suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    msg = """Article premier - Les hommes naissent et demeurent libres et égaux en droits. Les distinctions sociales ne peuvent être fondées que sur l'utilité commune.
     
    Article II - Le but de toute association politique est la conservation des droits naturels et imprescriptibles de l'homme. Ces droits sont la liberté, la propriété, la sûreté, et la résistance à l'oppression.
     
    Article III - Le principe de toute souveraineté réside essentiellement dans la nation. Nul corps, nul individu ne peut exercer d'autorité qui n'en émane expressément.
     
    Article IV - La liberté consiste à faire tout ce qui ne nuit pas à autrui: ainsi l'exercice des droits naturels de chaque homme n'a de bornes que celles qui assurent aux autres membres de la société la jouissance de ces mêmes droits. Ces bornes ne peuvent être déterminées que par la loi.
     
    Article V - La loi n'a le droit de défendre que les actions nuisibles à la société. Tout ce qui n'est pas défendu par la loi ne peut être empêché, et nul ne peut être contraint à faire ce qu'elle n'ordonne pas.
    """
    Il s'agit d'un extrait de la déclaration des droits de l'homme: ce n'est pas inutile de le relire de temps en temps...

    On considèrera qu'il est écrit avec un encodage "utf-8": c'est important à cause des caractères accentués!

    Et voilà le cryptage/décryptage:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # conversion des str en bytes
    msgb = bytes(msg, 'utf-8')
     
    # cryptage (msgb et chb sont de type bytes)
    chb = crypte_bbs(msgb, graine, pnp)
     
    # décryptage (chb et msgb2 sont de type bytes)
    msgb2 = crypte_bbs(chb, graine, pnp)
     
    # conversion des bytes en str
    msg2 = str(msgb2, 'utf-8')
     
    # affichage
    print(msg2)
    On utilise la même fonction pour crypter et décrypter et c'est normal puisqu'on fait un "xor" entre le byte du texte et le byte du code: 2 applications successives redonne le résultat initial.

    On obtient bien, après décryptage, le même message qu'au début!

    Si on veut transmettre la version cryptée à quelqu'un par email, on peut la mettre dans un fichier (écriture binaire "wb") et la mettre en pièce jointe. On peut aussi la transformer en texte imprimable avec base64 en utilisant la fonction "chainemultilignes" de cette façon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import base64
     
    chb64 = base64.b64encode(chb)
     
    print(chainemultilignes(str(chb64, 'ascii')))
    Ce qui affiche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    ch = "RXJ0vi51uZgFCmbABi/95jcbg3oXC3R5dBaL0ycU1pbL2DiIEmXsfLeRT647Wow2pBQ9Ide\
    wvbTHZvR0cQVIwMocn1omwFr0c8ZshPzNEIYPmEzEE1FmDitsNB0NFQiK/edxs+/QZA5drtofrEAA\
    b0Hh+FNvbPSuXmUlwWzcT5f2GXve/LRxWVAZrb7rhGZjIK3ByPcsNI/4CpelVEGJv6XV8aiwZj4wK\
    xXliuPfK4hoitlckGA5DobWgVR6Nil+X7Xb5berZoJoovPpf06XJws61smMnan8TlQQSldtCVxw38\
    WgMyKI8QDjW5AeETvBkqZwX0fI27/aSEHcavKy7O8CrasmZONNtW+rTEdGxIzdjoEW1dlAnF8/jA3\
    humu4tTbRZWMnlV5mJa6fgeDQcE5DqFUXJ3fGwPJBP3WMX4yLjuxzrS1yM5al0BvQnXxP7K5WbeDk\
    9XAA5IwIE5egZbr8Iy8aX6UPYrE4jT92FSS8fR28yrB7sU8yzLlcgIIn5ghO0VGm0SgURU7D0Lj8+\
    5yiRUrIJWlHon4aVTGqQNx5y+Eqs7nt4qysZzmUxYl5GniU2BzDBgcncuThacuVtNtfRx8nCkzoBv\
    +A6m83Apk976/9Bv3aOZGix5KK27bhCT4JF9Q3fGpl46hiCTDHOWYy8G7eLM5sHIK9m6zwgqBMKeu\
    lAqSF3ahRTYS/TAZcnJPrkU/jABU3SjUPrIAz+/S4SlhgrzArEV5cFii/wWbWAO1r6JQUBSH1Hbb3\
    faqxWSpI8y0EqJwLD9TsfiuNgnK/LpDRQB9NlsWu4Z16FTj3UUvPPbLO0rsmdhHbt6yyiynOAhfB/\
    7ZJZCvGRLglISLzdRrhh9yamBFrSDmwxJrNFHs/LyXLSs3EYDKO91z3gdyZxoOIrhblsZ/hqXqcND\
    Kz1/17Yb8z952FRKoOAm7A93yTyBaVotcSBM7e0MxH61ftgqihlD9VFgPrzb7z/gkir6sOEdbJfaA\
    /vCJhIssCwt40wN/oIDHrH2poyKKQoVGra6NCJMEHEkVainnjJ1Dqd3xmp/wPf/mvHhHK3JRquc+q\
    IgfGLYdP8oHCY9mMJrjrUWeBliCzYabd9O2YZDTvalCWWgajfMxchVpripBaV5OmClWr8whqY6RWN\
    4tBJAjNzqmInbAaXkK/UImPUCx5rtEJL7uHcAwNYAeYtPuE6sDbH3u+l9Uv4TJa4q8ZB4xpfAzf3T\
    gLsBmZpLGA9V95McBqss2cYF8avWCwt0h8EdDA9vFhrvhPn3AZ32GspN3cRPitLC6o1Unisftt4ur\
    biQyYdSzP8a1irLrn9HA3rokQZhYVpuJDHRi9P4jQNITOcfDFMNA8wPx4k43zUhF29xYrUKcL8DVi\
    ZaDp9Yg+XTkzAULLRwJIPi4kshzgLt4csahNKHToIKa5tg4="
    On peut constater qu'on obtient bien la même chose que dans le tuto avec la version Python 2.

    Et, bien sûr, celui qui recevra ce message pourra le décoder à condition d'avoir:
    - les 2 mêmes nombres (pnp et graine) que ceux qui ont servi au cryptage
    - le même programme qui va redonner la même série de nombres au hasard avec les mêmes nombres précédents

    décodage:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # on fait la conversion de str en bytes
    chb64 = bytes(ch, 'ascii') 
     
    # on retrouve le texte crypté (chb2 est de type bytes)
    chb2 = base64.b64decode(chb64) 
     
    # on rappelle les 2 nb nécessaire à BBS
    pnp = 14918821236690364048803357697827915330938033283968520044694771536930083962204522731085107976364842849618124584872512005469561358619582153354051962019051713882879895713608416554642100450496860545667414057413718678420906387634010424980338817514953869099955818435893555577287077984236763950252884280914769585067833911665408393977438690278779688153345857590291910776611048398078671383442699683071755220406286503400148046259020107019158117755289706301669627923537440322481447108082279600092947909584337555856165935214929894504908491221907537540009691905645323823752752168789754791148160238231187156550548453091395261440381
    graine = 99380446
     
    # on décrypte (chb et msgb2 sont de type bytes)
    msgb2 = crypte_bbs(chb2, graine, pnp)
     
    # on convertit de bytes en str pour retrouver le message initial
    msg2 = str(msgb2, 'utf-8')
     
    print(msg2)
    msg2 est bien identique au texte initial msg!

    Tout cela est donné gratuitement pour rendre service, mais sans garantie, bien entendu!

    Amusez-vous bien!
    Fichiers attachés Fichiers attachés
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  15. #15
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2016
    Messages : 42
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Voilà la mise à jour "Python 3" des codes du tuto concerné: http://python.jpvweb.com/mesrecettes...masque_jetable

    le fichier de bibliothèque "bibcrypto_bbs.py" est en pièce jointe.

    Il y a quelques différences évidentes (xrange => range, print ... => print(...), ...), plus une qui ne l'est pas: les fonctions de cryptage/décryptage travaillent sur des bytes et non des str! Cela nécessite des conversions dans les 2 sens avec connaissance de l'encodage si ce n'est pas de l'ascii pur.

    Attention: pour les explications, voir le tuto: je ne vais pas le réécrire ici!

    Je rappelle simplement que, au lieu d'utiliser une liste de codes pour le cryptage, on utilise ici un algorithme qui fabrique une liste de codes au hasard aussi grande qu'on le veut, afin de crypter n'importe quoi (texte, image, vidéo, etc...). Il faut, bien entendu que pour décrypter, on dispose du même algorithme et des 2 nombres qui ont servi au cryptage.

    Pour l'utilisation: En principe, on écrit du code Python dans un autre fichier qu'on place dans le même répertoire, et qui commence par importer les fonctions nécessaires avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from bibcrypto_bbs import genpremier_bbs, gengraine_bbs, crypte_bbs, chainemultilignes, entiermultilignes
    Mais, bien sûr, si on écrit à la fin du fichier "bibcrypto_bbs.py", cette ligne d'importation ne doit pas être utilisée!


    Génération des nombres nécessaires au fonctionnement du générateur Blum Blum Shub:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    np1 = genpremier_bbs(1024, 100) # 1er nb premier de 1024 bits congru à 3 modulo 4 (avec 100 essais pour MillerRabin)
    np2 = genpremier_bbs(1024, 100) # 2e nb premier ... (idem) ...
    pnp = np1*np2 # produit des 2 nombres premiers précédents
    graine = gengraine_bbs(pnp, g1=10000000, g2=99999999) # graine à 8 chiffres, premier avec pnp
    print("pnp =", pnp)
    print("graine =", graine)
    Le résultat est bien sûr différent à chaque fois (heureusement!), par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pnp = 14918821236690364048803357697827915330938033283968520044694771536930083962204522731085107976364842849618124584872512005469561358619582153354051962019051713882879895713608416554642100450496860545667414057413718678420906387634010424980338817514953869099955818435893555577287077984236763950252884280914769585067833911665408393977438690278779688153345857590291910776611048398078671383442699683071755220406286503400148046259020107019158117755289706301669627923537440322481447108082279600092947909584337555856165935214929894504908491221907537540009691905645323823752752168789754791148160238231187156550548453091395261440381
    graine = 99380446
    Vous noterez qu'on obtient un nombre de plus de 600 chiffres (2048 bits) de cette façon, et ceci en moins d'une minute. Un nombre de cette taille est quasi impossible à factoriser actuellement (en attendant l'ordinateur quantique?).

    A noter que grâce à la fonction "entiermultilignes", on peut intégrer ce grand entier dans un source Python comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print(entiermultilignes(pnp, nvar='pnp', nbcar=78, fdl='\n'))
    Ce qui donnera:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    pnp = "1491882123669036404880335769782791533093803328396852004469477153693008\
    39622045227310851079763648428496181245848725120054695613586195821533540519620\
    19051713882879895713608416554642100450496860545667414057413718678420906387634\
    01042498033881751495386909995581843589355557728707798423676395025288428091476\
    95850678339116654083939774386902787796881533458575902919107766110483980786713\
    83442699683071755220406286503400148046259020107019158117755289706301669627923\
    53744032248144710808227960009294790958433755585616593521492989450490849122190\
    75375400096919056453238237527521687897547911481602382311871565505484530913952\
    61440381"
    pnp = int(pnp)
    On va maintenant crypter et décrypter le texte suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    msg = """Article premier - Les hommes naissent et demeurent libres et égaux en droits. Les distinctions sociales ne peuvent être fondées que sur l'utilité commune.
     
    Article II - Le but de toute association politique est la conservation des droits naturels et imprescriptibles de l'homme. Ces droits sont la liberté, la propriété, la sûreté, et la résistance à l'oppression.
     
    Article III - Le principe de toute souveraineté réside essentiellement dans la nation. Nul corps, nul individu ne peut exercer d'autorité qui n'en émane expressément.
     
    Article IV - La liberté consiste à faire tout ce qui ne nuit pas à autrui: ainsi l'exercice des droits naturels de chaque homme n'a de bornes que celles qui assurent aux autres membres de la société la jouissance de ces mêmes droits. Ces bornes ne peuvent être déterminées que par la loi.
     
    Article V - La loi n'a le droit de défendre que les actions nuisibles à la société. Tout ce qui n'est pas défendu par la loi ne peut être empêché, et nul ne peut être contraint à faire ce qu'elle n'ordonne pas.
    """
    Il s'agit d'un extrait de la déclaration des droits de l'homme: ce n'est pas inutile de le relire de temps en temps...

    On considèrera qu'il est écrit avec un encodage "utf-8": c'est important à cause des caractères accentués!

    Et voilà le cryptage/décryptage:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # conversion des str en bytes
    msgb = bytes(msg, 'utf-8')
     
    # cryptage (msgb et chb sont de type bytes)
    chb = crypte_bbs(msgb, graine, pnp)
     
    # décryptage (chb et msgb2 sont de type bytes)
    msgb2 = crypte_bbs(chb, graine, pnp)
     
    # conversion des bytes en str
    msg2 = str(msgb2, 'utf-8')
     
    # affichage
    print(msg2)
    On utilise la même fonction pour crypter et décrypter et c'est normal puisqu'on fait un "xor" entre le byte du texte et le byte du code: 2 applications successives redonne le résultat initial.

    On obtient bien, après décryptage, le même message qu'au début!

    Si on veut transmettre la version cryptée à quelqu'un par email, on peut la mettre dans un fichier (écriture binaire "wb") et la mettre en pièce jointe. On peut aussi la transformer en texte imprimable avec base64 en utilisant la fonction "chainemultilignes" de cette façon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import base64
     
    chb64 = base64.b64encode(chb)
     
    print(chainemultilignes(str(chb64, 'ascii')))
    Ce qui affiche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    ch = "RXJ0vi51uZgFCmbABi/95jcbg3oXC3R5dBaL0ycU1pbL2DiIEmXsfLeRT647Wow2pBQ9Ide\
    wvbTHZvR0cQVIwMocn1omwFr0c8ZshPzNEIYPmEzEE1FmDitsNB0NFQiK/edxs+/QZA5drtofrEAA\
    b0Hh+FNvbPSuXmUlwWzcT5f2GXve/LRxWVAZrb7rhGZjIK3ByPcsNI/4CpelVEGJv6XV8aiwZj4wK\
    xXliuPfK4hoitlckGA5DobWgVR6Nil+X7Xb5berZoJoovPpf06XJws61smMnan8TlQQSldtCVxw38\
    WgMyKI8QDjW5AeETvBkqZwX0fI27/aSEHcavKy7O8CrasmZONNtW+rTEdGxIzdjoEW1dlAnF8/jA3\
    humu4tTbRZWMnlV5mJa6fgeDQcE5DqFUXJ3fGwPJBP3WMX4yLjuxzrS1yM5al0BvQnXxP7K5WbeDk\
    9XAA5IwIE5egZbr8Iy8aX6UPYrE4jT92FSS8fR28yrB7sU8yzLlcgIIn5ghO0VGm0SgURU7D0Lj8+\
    5yiRUrIJWlHon4aVTGqQNx5y+Eqs7nt4qysZzmUxYl5GniU2BzDBgcncuThacuVtNtfRx8nCkzoBv\
    +A6m83Apk976/9Bv3aOZGix5KK27bhCT4JF9Q3fGpl46hiCTDHOWYy8G7eLM5sHIK9m6zwgqBMKeu\
    lAqSF3ahRTYS/TAZcnJPrkU/jABU3SjUPrIAz+/S4SlhgrzArEV5cFii/wWbWAO1r6JQUBSH1Hbb3\
    faqxWSpI8y0EqJwLD9TsfiuNgnK/LpDRQB9NlsWu4Z16FTj3UUvPPbLO0rsmdhHbt6yyiynOAhfB/\
    7ZJZCvGRLglISLzdRrhh9yamBFrSDmwxJrNFHs/LyXLSs3EYDKO91z3gdyZxoOIrhblsZ/hqXqcND\
    Kz1/17Yb8z952FRKoOAm7A93yTyBaVotcSBM7e0MxH61ftgqihlD9VFgPrzb7z/gkir6sOEdbJfaA\
    /vCJhIssCwt40wN/oIDHrH2poyKKQoVGra6NCJMEHEkVainnjJ1Dqd3xmp/wPf/mvHhHK3JRquc+q\
    IgfGLYdP8oHCY9mMJrjrUWeBliCzYabd9O2YZDTvalCWWgajfMxchVpripBaV5OmClWr8whqY6RWN\
    4tBJAjNzqmInbAaXkK/UImPUCx5rtEJL7uHcAwNYAeYtPuE6sDbH3u+l9Uv4TJa4q8ZB4xpfAzf3T\
    gLsBmZpLGA9V95McBqss2cYF8avWCwt0h8EdDA9vFhrvhPn3AZ32GspN3cRPitLC6o1Unisftt4ur\
    biQyYdSzP8a1irLrn9HA3rokQZhYVpuJDHRi9P4jQNITOcfDFMNA8wPx4k43zUhF29xYrUKcL8DVi\
    ZaDp9Yg+XTkzAULLRwJIPi4kshzgLt4csahNKHToIKa5tg4="
    On peut constater qu'on obtient bien la même chose que dans le tuto avec la version Python 2.

    Et, bien sûr, celui qui recevra ce message pourra le décoder à condition d'avoir:
    - les 2 mêmes nombres (pnp et graine) que ceux qui ont servi au cryptage
    - le même programme qui va redonner la même série de nombres au hasard avec les mêmes nombres précédents

    décodage:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # on fait la conversion de str en bytes
    chb64 = bytes(ch, 'ascii') 
     
    # on retrouve le texte crypté (chb2 est de type bytes)
    chb2 = base64.b64decode(chb64) 
     
    # on rappelle les 2 nb nécessaire à BBS
    pnp = 14918821236690364048803357697827915330938033283968520044694771536930083962204522731085107976364842849618124584872512005469561358619582153354051962019051713882879895713608416554642100450496860545667414057413718678420906387634010424980338817514953869099955818435893555577287077984236763950252884280914769585067833911665408393977438690278779688153345857590291910776611048398078671383442699683071755220406286503400148046259020107019158117755289706301669627923537440322481447108082279600092947909584337555856165935214929894504908491221907537540009691905645323823752752168789754791148160238231187156550548453091395261440381
    graine = 99380446
     
    # on décrypte (chb et msgb2 sont de type bytes)
    msgb2 = crypte_bbs(chb2, graine, pnp)
     
    # on convertit de bytes en str pour retrouver le message initial
    msg2 = str(msgb2, 'utf-8')
     
    print(msg2)
    msg2 est bien identique au texte initial msg!

    Tout cela est donné gratuitement pour rendre service, mais sans garantie, bien entendu!

    Amusez-vous bien!
    Je vous remercie infiniment pour votre aide , vous m’avez tellement aidé et c'est très aimable et généreux de donner de votre temps comme ça. Je vous en serais très reconnaissante, merci beaucoup.

  16. #16
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Bonsoir tyrtamos,
    Ton programme, bien que trop compliqué pour ma petite tête, m'a interpelé.
    Aussi, je l'ai testé.
    Le programme crypto1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    from bibcrypto_bbs import genpremier_bbs, gengraine_bbs, crypte_bbs, chainemultilignes, entiermultilignes
     
    np1 = genpremier_bbs(1024, 100) # 1er nb premier de 1024 bits congru à 3 modulo 4 (avec 100 essais pour MillerRabin)
    np2 = genpremier_bbs(1024, 100) # 2e nb premier ... (idem) ...
    pnp = np1*np2 # produit des 2 nombres premiers précédents
    graine = gengraine_bbs(pnp, g1=10000000, g2=99999999) # graine à 8 chiffres, premier avec pnp
    print("pnp =", pnp)
    print("graine =", graine)
     
    print(entiermultilignes(pnp, nvar='pnp', nbcar=78, fdl='\n'))
     
    msg = """Article premier - Les hommes naissent et demeurent libres et égaux en droits. Les distinctions sociales ne peuvent être fondées que sur l'utilité commune.
     
    Article II - Le but de toute association politique est la conservation des droits naturels et imprescriptibles de l'homme. Ces droits sont la liberté, la propriété, la sûreté, et la résistance à l'oppression.
     
    Article III - Le principe de toute souveraineté réside essentiellement dans la nation. Nul corps, nul individu ne peut exercer d'autorité qui n'en émane expressément.
     
    Article IV - La liberté consiste à faire tout ce qui ne nuit pas à autrui: ainsi l'exercice des droits naturels de chaque homme n'a de bornes que celles qui assurent aux autres membres de la société la jouissance de ces mêmes droits. Ces bornes ne peuvent être déterminées que par la loi.
     
    Article V - La loi n'a le droit de défendre que les actions nuisibles à la société. Tout ce qui n'est pas défendu par la loi ne peut être empêché, et nul ne peut être contraint à faire ce qu'elle n'ordonne pas.
    """
     
    # conversion des str en bytes
    msgb = bytes(msg, 'utf-8')
     
    # cryptage (msgb et chb sont de type bytes)
    chb = crypte_bbs(msgb, graine, pnp)
     
    # décryptage (chb et msgb2 sont de type bytes)
    msgb2 = crypte_bbs(chb, graine, pnp)
     
    # conversion des bytes en str
    msg2 = str(msgb2, 'utf-8')
     
    # affichage
    print(msg2)
     
    import base64
     
    chb64 = base64.b64encode(chb)
     
    ch = chainemultilignes(str(chb64, 'ascii'))
    print(ch)
    me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    pnp = 13734931187711276240905875422758400723560161235222022575577662002244154920133808175433850600475010166058185149184125828746241653578777351052744554965160209215223302029754334996393657854503701329322370447079872064194752299335484473697775788054954113925722397109980402217992458748786699603309670631523625181317862126125013154862206361247663996318351651469761918888897184786472456410317301222318667558698117083543087637277283128578379122958652886383967234090302654577376015531622672354913476542476998384926068290652557498551013866277160386167281196120551676724052751392746079204797111237649587650124339862980387840509657
    graine = 18538780
    pnp = "13734931187711276240905875422758400723560161235222022575577662002244154920133808175433850600475010166058185149184125828746241653578777351052744554965160209215223302029754334996393657854503701329322370447079872064194752299335484473697775788054954113925722397109980402217992458748786699603309670631523625181317862126125013154862206361247663996318351651469761918888897184786472456410317301222318667558698117083543087637277283128578379122958652886383967234090302654577376015531622672354913476542476998384926068290652557498551013866277160386167281196120551676724052751392746079204797111237649587650124339862980387840509657"
    pnp = int(pnp)
     
    Article premier - Les hommes naissent et demeurent libres et égaux en droits. Les distinctions sociales ne peuvent être fondées que sur l'utilité commune.
     
    Article II - Le but de toute association politique est la conservation des droits naturels et imprescriptibles de l'homme. Ces droits sont la liberté, la propriété, la sûreté, et la résistance à l'oppression.
     
    Article III - Le principe de toute souveraineté réside essentiellement dans la nation. Nul corps, nul individu ne peut exercer d'autorité qui n'en émane expressément.
     
    Article IV - La liberté consiste à faire tout ce qui ne nuit pas à autrui: ainsi l'exercice des droits naturels de chaque homme n'a de bornes que celles qui assurent aux autres membres de la société la jouissance de ces mêmes droits. Ces bornes ne peuvent être déterminées que par la loi.
     
    Article V - La loi n'a le droit de défendre que les actions nuisibles à la société. Tout ce qui n'est pas défendu par la loi ne peut être empêché, et nul ne peut être contraint à faire ce qu'elle n'ordonne pas.
     
    ch = "UXJ0YPJndHzMa92u/aMdNlsCgjuCrvC2yt4Um0PeYZN+bO9kGDM7qXTv2hoY6sL7zCLe5rBIdmESEo7KfurK+YsaGo+bX/nT1TSEE944u75BenjY+ng3UWTpqPqCX7UwVk5so22fhx4TPgHtGRoDVOakfIYwu6oBENJdokuchYcMCLWkLfopnTflFYd8Am6Z4dIgzO7//l0eDDQDjax2/a/DGJByzgytab3xg+hH/uW+1tooCdPluROi5XBgWykF5L4Esu14AmU+2ox526YwTlRwnXkP1RSWt3YF7rAJ+i/oN+YuF3hCRvVWnIqOgunFIPS5ml0yoR79iqyzmbcAOhvFObxAwipt5+z4OloBHuAEwxdYZXCIMeioHjeHmArXPXbXuDO+fR5bOCYeq0yLHcHf3b3dUFbJaxOtTOrAQvlIStOV5r4NNuVhnxUJyr0vKJGjSvzEjwYzRSTKv18N7J/MbGA1d84qRrlayTEpr7bheA+iZHDg8R0FuaqJVjMXEF6SbXPVH2nbPIrBhJ2gLyN736LipXwctdwA085rMx83WuGdJ6ummSZ+7odVtd0aViZkuGx/Om7MFP+Brl55VuvU8ti1cBKX+JGEmKXC+kakFX38OcZ2p1uJGKgea3kYhwkM8z8QOvIPZV0Zrw4DcvSLTu7s6QXjY1uPhp1vo9D5IJikMxbiKrbNTPfu39m/YAUl5ma2Wx5tTMKVH4fnh4vn+RzNBmXBwWDOGlb9inRKcSDI4o0DtmLSK+WnYpHQMmSpKttE8JR4PCkVKbLBoAvTYmtzR/2qb2E9xjBaXvfeR2twtesnhkJi1ip/p0InQdTcOR1TCytAPD6c0xGTMzdfFjpIlap8UNRDQZXRpyJkZgyoTJJctpDq+oH/rgEj1hWUaXluCHrzey39HvfX7qw2hdH+G/MmfIfJvxPjp1khJ2ltTWhE6aIFDShOI4cGQrBbILmQBctwLaxBVR/RFJ6kD5aOlVleTZ8+Q956G2iCt60YwJcwxK2mQjnwjB0YCBqcavctFWOZHmSYeQdLi1yBBkNyznpcYwOYCCW/JYD18uBFhxJ9aYhTbal9qbocE3YsAv7/reobIbVDosgsV4IzwiOC3Kff3jis1G8yLqrZ3AgCG9mgf3nEW6o0az04YIfEpJMClAkjAAlqBlneiQHpXMIdVtI5FC7eXq33CJYjcj8AJnCKm2+nGgm1APrjiAyOdfuYszTDuhXtNOIKDX/aWO9jMmgWEZ4g0WL1tSD/IdXXP26C0U5TXVUPCdu2QYDsuHFDLQ9fdJwBeH6zg7feWL0E0NOGDa0O5fC3ehLC4IOkkXuQgbD66M3IJ49VGXV7oY8kphBIOQM5JpyAxfdaU04hoNxnsQFey9IDVmYOq/NWf2nE0Fp3OEyNuLGpOCDVBRaS+H6XXk81h5UUqjgP"
    Le programme decrypto1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    from bibcrypto_bbs import crypte_bbs
    import base64
     
    print(ch)
    # on fait la conversion de str en bytes
    chb64 = bytes(ch, 'ascii') 
     
    # on retrouve le texte crypté (chb2 est de type bytes)
    chb2 = base64.b64decode(chb64) 
     
    # on rappelle les 2 nb nécessaire à BBS
    pnp = 13734931187711276240905875422758400723560161235222022575577662002244154920133808175433850600475010166058185149184125828746241653578777351052744554965160209215223302029754334996393657854503701329322370447079872064194752299335484473697775788054954113925722397109980402217992458748786699603309670631523625181317862126125013154862206361247663996318351651469761918888897184786472456410317301222318667558698117083543087637277283128578379122958652886383967234090302654577376015531622672354913476542476998384926068290652557498551013866277160386167281196120551676724052751392746079204797111237649587650124339862980387840509657
    graine = 18538780
     
    # on décrypte (chb et msgb2 sont de type bytes)
    msgb2 = crypte_bbs(chb2, graine, pnp)
     
    # on convertit de bytes en str pour retrouver le message initial
    msg2 = str(msgb2, 'utf-8')
     
    print(msg2)
    me donne alors l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    ch = "UXJ0YPJndHzMa92u/aMdNlsCgjuCrvC2yt4Um0PeYZN+bO9kGDM7qXTv2hoY6sL7zCLe5rBIdmESEo7KfurK+YsaGo+bX/nT1TSEE944u75BenjY+ng3UWTpqPqCX7UwVk5so22fhx4TPgHtGRoDVOakfIYwu6oBENJdokuchYcMCLWkLfopnTflFYd8Am6Z4dIgzO7//l0eDDQDjax2/a/DGJByzgytab3xg+hH/uW+1tooCdPluROi5XBgWykF5L4Esu14AmU+2ox526YwTlRwnXkP1RSWt3YF7rAJ+i/oN+YuF3hCRvVWnIqOgunFIPS5ml0yoR79iqyzmbcAOhvFObxAwipt5+z4OloBHuAEwxdYZXCIMeioHjeHmArXPXbXuDO+fR5bOCYeq0yLHcHf3b3dUFbJaxOtTOrAQvlIStOV5r4NNuVhnxUJyr0vKJGjSvzEjwYzRSTKv18N7J/MbGA1d84qRrlayTEpr7bheA+iZHDg8R0FuaqJVjMXEF6SbXPVH2nbPIrBhJ2gLyN736LipXwctdwA085rMx83WuGdJ6ummSZ+7odVtd0aViZkuGx/Om7MFP+Brl55VuvU8ti1cBKX+JGEmKXC+kakFX38OcZ2p1uJGKgea3kYhwkM8z8QOvIPZV0Zrw4DcvSLTu7s6QXjY1uPhp1vo9D5IJikMxbiKrbNTPfu39m/YAUl5ma2Wx5tTMKVH4fnh4vn+RzNBmXBwWDOGlb9inRKcSDI4o0DtmLSK+WnYpHQMmSpKttE8JR4PCkVKbLBoAvTYmtzR/2qb2E9xjBaXvfeR2twtesnhkJi1ip/p0InQdTcOR1TCytAPD6c0xGTMzdfFjpIlap8UNRDQZXRpyJkZgyoTJJctpDq+oH/rgEj1hWUaXluCHrzey39HvfX7qw2hdH+G/MmfIfJvxPjp1khJ2ltTWhE6aIFDShOI4cGQrBbILmQBctwLaxBVR/RFJ6kD5aOlVleTZ8+Q956G2iCt60YwJcwxK2mQjnwjB0YCBqcavctFWOZHmSYeQdLi1yBBkNyznpcYwOYCCW/JYD18uBFhxJ9aYhTbal9qbocE3YsAv7/reobIbVDosgsV4IzwiOC3Kff3jis1G8yLqrZ3AgCG9mgf3nEW6o0az04YIfEpJMClAkjAAlqBlneiQHpXMIdVtI5FC7eXq33CJYjcj8AJnCKm2+nGgm1APrjiAyOdfuYszTDuhXtNOIKDX/aWO9jMmgWEZ4g0WL1tSD/IdXXP26C0U5TXVUPCdu2QYDsuHFDLQ9fdJwBeH6zg7feWL0E0NOGDa0O5fC3ehLC4IOkkXuQgbD66M3IJ49VGXV7oY8kphBIOQM5JpyAxfdaU04hoNxnsQFey9IDVmYOq/NWf2nE0Fp3OEyNuLGpOCDVBRaS+H6XXk81h5UUqjgP"
     
    Traceback (most recent call last):
     
      File "<ipython-input-21-361708aa0f7f>", line 1, in <module>
        runfile('/home/marco3/Bureau/crypto-tyrtamos/decrypto1.py', wdir='/home/marco3/Bureau/crypto-tyrtamos')
     
      File "/usr/local/lib/python3.4/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 685, in runfile
        execfile(filename, namespace)
     
      File "/usr/local/lib/python3.4/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 85, in execfile
        exec(compile(open(filename, 'rb').read(), filename, 'exec'), namespace)
     
      File "/home/marco3/Bureau/crypto-tyrtamos/decrypto1.py", line 16, in <module>
        chb2 = base64.b64decode(chb64)
     
      File "/usr/lib/python3.4/base64.py", line 90, in b64decode
        return binascii.a2b_base64(s)
     
    Error: Incorrect padding
    Tu as déjà passé du temps là-dessus et la discussion étant résolue, je comprendrai que tu ne poursuive pas les investigations...
    Pas d'aide par mp.

  17. #17
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour marco056,

    Citation Envoyé par marco056 Voir le message
    Tu as déjà passé du temps là-dessus et la discussion étant résolue, je comprendrai que tu ne poursuive pas les investigations...
    Justement, de ce fait, il serait invraisemblable que je reste sur un doute de ce genre!

    Et bien je ne retrouve pas ton erreur! L'erreur de padding se produit quand le nombre d'octets à décoder par b64decode n'est pas correct. En effet, base64 encode 3 octets en 4, et ajoute des caractères de "bourrage" si nécessaire à la fin (en général '='). Et le décodage s'attend donc à retrouver le bon nombre d'octets à décoder, et dans le cas contraire, on a "Error: Incorrect padding".

    Alors, j'ai repris tes données de départ en copier-coller: le message et les 2 nombres pnp et graine, et j'ai appliqué tout le calcul: le message a bien été retrouvé sans erreur.

    Il était d'ailleurs nécessaire que je reprenne ton message parce qu'il n'était pas identique au mien: les 4 lignes vides ont un espace de plus, ce qui fait 4 caractères supplémentaires! Probablement un effet du copier-coller.

    Bref, voilà le séquence complète de calcul:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    import base64
     
    from bibcrypto_bbs import genpremier_bbs, gengraine_bbs, crypte_bbs, chainemultilignes
     
    pnp = 13734931187711276240905875422758400723560161235222022575577662002244154920133808175433850600475010166058185149184125828746241653578777351052744554965160209215223302029754334996393657854503701329322370447079872064194752299335484473697775788054954113925722397109980402217992458748786699603309670631523625181317862126125013154862206361247663996318351651469761918888897184786472456410317301222318667558698117083543087637277283128578379122958652886383967234090302654577376015531622672354913476542476998384926068290652557498551013866277160386167281196120551676724052751392746079204797111237649587650124339862980387840509657
    graine = 18538780
     
    msg = """Article premier - Les hommes naissent et demeurent libres et égaux en droits. Les distinctions sociales ne peuvent être fondées que sur l'utilité commune.
     
    Article II - Le but de toute association politique est la conservation des droits naturels et imprescriptibles de l'homme. Ces droits sont la liberté, la propriété, la sûreté, et la résistance à l'oppression.
     
    Article III - Le principe de toute souveraineté réside essentiellement dans la nation. Nul corps, nul individu ne peut exercer d'autorité qui n'en émane expressément.
     
    Article IV - La liberté consiste à faire tout ce qui ne nuit pas à autrui: ainsi l'exercice des droits naturels de chaque homme n'a de bornes que celles qui assurent aux autres membres de la société la jouissance de ces mêmes droits. Ces bornes ne peuvent être déterminées que par la loi.
     
    Article V - La loi n'a le droit de défendre que les actions nuisibles à la société. Tout ce qui n'est pas défendu par la loi ne peut être empêché, et nul ne peut être contraint à faire ce qu'elle n'ordonne pas.
    """
     
    # conversion du message en bytes
    msgb = bytes(msg, 'utf-8')
     
    # cryptage (msgb et chb sont de type bytes)
    chb = crypte_bbs(msgb, graine, pnp)
     
    # encodage en texte imprimable (chb et chb64 sont de type bytes)
    chb64 = base64.b64encode(chb)
    print(str(chb64, 'ascii'))
    print(len(chb64)) # 1432 => divisible par 4: ok!
    print()
     
    # conversion en str
    ch64 = str(chb64, 'ascii')
    # calcul de la version multilignes
    ch64_multi = chainemultilignes(ch64)
    print(ch64_multi)
     
    #============================================================================
     
    # retour de la version multiligne à la version monoligne
    ch64_2 = eval(ch64_multi.split(' = ')[1].strip())
    print("==>", ch64_2)
    if ch64_2==ch64:
        print("réussi: message crypté encodé base64 retrouvé")
    else:
        print("erreur: message crypté encodé base64 NON retrouvé")    
    print()
     
    # conversion en bytes
    chb64_2 = bytes(ch64_2, 'ascii')
     
    # on retrouve le texte crypté (chb_2 est de type bytes)
    chb_2 = base64.b64decode(chb64_2) 
     
    # on décrypte (chb et msgb2 sont de type bytes)
    msgb_2 = crypte_bbs(chb_2, graine, pnp)
     
    # on convertit de bytes en str pour retrouver le message initial
    msg_2 = str(msgb_2, 'utf-8')
    print(msg_2)
    if msg_2==msg:
        print("réussi: message retrouvé à l'identique")
    else:
        print("erreur: message non retrouvé!")
    Ce qui affiche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    UXJ0YPJndHzMa92u/aMdNlsCgjuCrvC2yt4Um0PeYZN+bO9kGDM7qXTv2hoY6sL7zCLe5rBIdmESEo7KfurK+YsaGo+bX/nT1TSEE944u75BenjY+ng3UWTpqPqCX7UwVk5so22fhx4TPgHtGRoDVOakfIYwu6oBENJdokuchYcMCLWkLfopnTflFYd8Am6Z4dIgzO7//l0eDDQDjax2/a/DGJByzgytab3xg+hH/uW+1tooCdPluROi5XBgWykF5L4Esu14AmU+2ox526YwTlRwnXkP1RSWt3YF7rAJ+i/oN+YuF3hCRvVWnIqOgunFIPS5ml0yoR79iqyzmbcAOhvFObxAwipt5+z4OloBHuAEwxdYZXCIMeioHjeHmArXPXbXuDO+fR5bOCYeq0yLHcHf3b3dUFbJaxOtTOrAQvlIStOV5r4NNuVhnxUJyr0vKJGjSvzEjwYzRSTKv18N7J/MbGA1d84qRrlayTEpr7bheA+iZHDg8R0FuaqJVjMXEF6SbXPVH2nbPIrBhJ2gLyN736LipXwctdwA085rMx83WuGdJ6ummSZ+7odVtd0aViZkuGx/Om7MFP+Brl55VuvU8ti1cBKX+JGEmKXC+kakFX38OcZ2p1uJGKgea3kYhwkM8z8QOvIPZV0Zrw4DcvSLTu7s6QXjY1uPhp1vo9D5IJikMxbiKrbNTPfu39m/YAUl5ma2Wx5tTMKVH4fnh4vn+RzNBmXBwWDOGlb9inRKcSDI4o0DtmLSK+WnYpHQMmSpKttE8JR4PCkVKbLBoAvTYmtzR/2qb2E9xjBaXvfeR2twtesnhkJi1ip/p0InQdTcOR1TCytAPD6c0xGTMzdfFjpIlap8UNRDQZXRpyJkZgyoTJJctpDq+oH/rgEj1hWUaXluCHrzey39HvfX7qw2hdH+G/MmfIfJvxPjp1khJ2ltTWhE6aIFDShOI4cGQrBbILmQBctwLaxBVR/RFJ6kD5aOlVleTZ8+Q956G2iCt60YwJcwxK2mQjnwjB0YCBqcavctFWOZHmSYeQdLi1yBBkNyznpcYwOYCCW/JYD18uBFhxJ9aYhTbal9qbocE3YsAv7/reobIbVDosgsV4IzwiOC3Kff3jis1G8yLqrZ3AgCG9mgf3nEW6o0az04YIfEpJMClAkjAAlqBlneiQHpXMIdVtI5FC7eXq33CJYjcj8AJnCKm2+nGgm1APrjiAyOdfuYszTDuhXtNOIKDX/aWO9jMmgWEZ4g0WL1tSD/IdXXP26C0U5TXVUPCdu2QYDsuHFDLQ9fdJwBeH6zg7feWL0E0NOGDa0O5fC3ehLC4IOkkXuQgbD66M3IJ49VGXV7oY8kphBIOQM5JpyAxfdaU04hoNxnsQFey9IDVmYOq/NWf2nE0Fp3OEyNuLGpOCDVBRaS+H6XXk81h5UUqjgP
    1432
     
    ch = "UXJ0YPJndHzMa92u/aMdNlsCgjuCrvC2yt4Um0PeYZN+bO9kGDM7qXTv2hoY6sL7zCLe5rB\
    IdmESEo7KfurK+YsaGo+bX/nT1TSEE944u75BenjY+ng3UWTpqPqCX7UwVk5so22fhx4TPgHtGRoD\
    VOakfIYwu6oBENJdokuchYcMCLWkLfopnTflFYd8Am6Z4dIgzO7//l0eDDQDjax2/a/DGJByzgyta\
    b3xg+hH/uW+1tooCdPluROi5XBgWykF5L4Esu14AmU+2ox526YwTlRwnXkP1RSWt3YF7rAJ+i/oN+\
    YuF3hCRvVWnIqOgunFIPS5ml0yoR79iqyzmbcAOhvFObxAwipt5+z4OloBHuAEwxdYZXCIMeioHje\
    HmArXPXbXuDO+fR5bOCYeq0yLHcHf3b3dUFbJaxOtTOrAQvlIStOV5r4NNuVhnxUJyr0vKJGjSvzE\
    jwYzRSTKv18N7J/MbGA1d84qRrlayTEpr7bheA+iZHDg8R0FuaqJVjMXEF6SbXPVH2nbPIrBhJ2gL\
    yN736LipXwctdwA085rMx83WuGdJ6ummSZ+7odVtd0aViZkuGx/Om7MFP+Brl55VuvU8ti1cBKX+J\
    GEmKXC+kakFX38OcZ2p1uJGKgea3kYhwkM8z8QOvIPZV0Zrw4DcvSLTu7s6QXjY1uPhp1vo9D5IJi\
    kMxbiKrbNTPfu39m/YAUl5ma2Wx5tTMKVH4fnh4vn+RzNBmXBwWDOGlb9inRKcSDI4o0DtmLSK+Wn\
    YpHQMmSpKttE8JR4PCkVKbLBoAvTYmtzR/2qb2E9xjBaXvfeR2twtesnhkJi1ip/p0InQdTcOR1TC\
    ytAPD6c0xGTMzdfFjpIlap8UNRDQZXRpyJkZgyoTJJctpDq+oH/rgEj1hWUaXluCHrzey39HvfX7q\
    w2hdH+G/MmfIfJvxPjp1khJ2ltTWhE6aIFDShOI4cGQrBbILmQBctwLaxBVR/RFJ6kD5aOlVleTZ8\
    +Q956G2iCt60YwJcwxK2mQjnwjB0YCBqcavctFWOZHmSYeQdLi1yBBkNyznpcYwOYCCW/JYD18uBF\
    hxJ9aYhTbal9qbocE3YsAv7/reobIbVDosgsV4IzwiOC3Kff3jis1G8yLqrZ3AgCG9mgf3nEW6o0a\
    z04YIfEpJMClAkjAAlqBlneiQHpXMIdVtI5FC7eXq33CJYjcj8AJnCKm2+nGgm1APrjiAyOdfuYsz\
    TDuhXtNOIKDX/aWO9jMmgWEZ4g0WL1tSD/IdXXP26C0U5TXVUPCdu2QYDsuHFDLQ9fdJwBeH6zg7f\
    eWL0E0NOGDa0O5fC3ehLC4IOkkXuQgbD66M3IJ49VGXV7oY8kphBIOQM5JpyAxfdaU04hoNxnsQFe\
    y9IDVmYOq/NWf2nE0Fp3OEyNuLGpOCDVBRaS+H6XXk81h5UUqjgP"
     
    ==> UXJ0YPJndHzMa92u/aMdNlsCgjuCrvC2yt4Um0PeYZN+bO9kGDM7qXTv2hoY6sL7zCLe5rBIdmESEo7KfurK+YsaGo+bX/nT1TSEE944u75BenjY+ng3UWTpqPqCX7UwVk5so22fhx4TPgHtGRoDVOakfIYwu6oBENJdokuchYcMCLWkLfopnTflFYd8Am6Z4dIgzO7//l0eDDQDjax2/a/DGJByzgytab3xg+hH/uW+1tooCdPluROi5XBgWykF5L4Esu14AmU+2ox526YwTlRwnXkP1RSWt3YF7rAJ+i/oN+YuF3hCRvVWnIqOgunFIPS5ml0yoR79iqyzmbcAOhvFObxAwipt5+z4OloBHuAEwxdYZXCIMeioHjeHmArXPXbXuDO+fR5bOCYeq0yLHcHf3b3dUFbJaxOtTOrAQvlIStOV5r4NNuVhnxUJyr0vKJGjSvzEjwYzRSTKv18N7J/MbGA1d84qRrlayTEpr7bheA+iZHDg8R0FuaqJVjMXEF6SbXPVH2nbPIrBhJ2gLyN736LipXwctdwA085rMx83WuGdJ6ummSZ+7odVtd0aViZkuGx/Om7MFP+Brl55VuvU8ti1cBKX+JGEmKXC+kakFX38OcZ2p1uJGKgea3kYhwkM8z8QOvIPZV0Zrw4DcvSLTu7s6QXjY1uPhp1vo9D5IJikMxbiKrbNTPfu39m/YAUl5ma2Wx5tTMKVH4fnh4vn+RzNBmXBwWDOGlb9inRKcSDI4o0DtmLSK+WnYpHQMmSpKttE8JR4PCkVKbLBoAvTYmtzR/2qb2E9xjBaXvfeR2twtesnhkJi1ip/p0InQdTcOR1TCytAPD6c0xGTMzdfFjpIlap8UNRDQZXRpyJkZgyoTJJctpDq+oH/rgEj1hWUaXluCHrzey39HvfX7qw2hdH+G/MmfIfJvxPjp1khJ2ltTWhE6aIFDShOI4cGQrBbILmQBctwLaxBVR/RFJ6kD5aOlVleTZ8+Q956G2iCt60YwJcwxK2mQjnwjB0YCBqcavctFWOZHmSYeQdLi1yBBkNyznpcYwOYCCW/JYD18uBFhxJ9aYhTbal9qbocE3YsAv7/reobIbVDosgsV4IzwiOC3Kff3jis1G8yLqrZ3AgCG9mgf3nEW6o0az04YIfEpJMClAkjAAlqBlneiQHpXMIdVtI5FC7eXq33CJYjcj8AJnCKm2+nGgm1APrjiAyOdfuYszTDuhXtNOIKDX/aWO9jMmgWEZ4g0WL1tSD/IdXXP26C0U5TXVUPCdu2QYDsuHFDLQ9fdJwBeH6zg7feWL0E0NOGDa0O5fC3ehLC4IOkkXuQgbD66M3IJ49VGXV7oY8kphBIOQM5JpyAxfdaU04hoNxnsQFey9IDVmYOq/NWf2nE0Fp3OEyNuLGpOCDVBRaS+H6XXk81h5UUqjgP
    réussi: message crypté encodé base64 retrouvé
     
    Article premier - Les hommes naissent et demeurent libres et égaux en droits. Les distinctions sociales ne peuvent être fondées que sur l'utilité commune.
     
    Article II - Le but de toute association politique est la conservation des droits naturels et imprescriptibles de l'homme. Ces droits sont la liberté, la propriété, la sûreté, et la résistance à l'oppression.
     
    Article III - Le principe de toute souveraineté réside essentiellement dans la nation. Nul corps, nul individu ne peut exercer d'autorité qui n'en émane expressément.
     
    Article IV - La liberté consiste à faire tout ce qui ne nuit pas à autrui: ainsi l'exercice des droits naturels de chaque homme n'a de bornes que celles qui assurent aux autres membres de la société la jouissance de ces mêmes droits. Ces bornes ne peuvent être déterminées que par la loi.
     
    Article V - La loi n'a le droit de défendre que les actions nuisibles à la société. Tout ce qui n'est pas défendu par la loi ne peut être empêché, et nul ne peut être contraint à faire ce qu'elle n'ordonne pas.
     
    réussi: message retrouvé à l'identique
    J'ai bien vérifié que la chaine encodée base64 retrouvée par mon calcul est identique à la tienne et se décode sans erreur. De plus, elle est divisible par 4 (1432 % 4 => 0), et je ne vois pas pourquoi base64 verrait une erreur!

    Bref, je ne comprends pas comment tu as pu avoir une erreur et pas moi sur les mêmes données: pourrais-tu chercher de ton côté?
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  18. #18
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Merci tyrtamos.
    J'ai regardé et je pense que j'ai du m'emmêler entre les bytes et les str.
    Ton dernier programme fonctionne parfaitement chez moi et c'est donc de ma faute.
    Je creuse la question dans la semaine et je reviens indiquer mon erreur...
    Pas d'aide par mp.

  19. #19
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Ok, j'ai trouvé mon erreur :
    C'était la ligne 42 de mon premier programme :
    était en trop.
    Désolé pour le surplus de travail...
    Pas d'aide par mp.

  20. #20
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par marco056 Voir le message
    Désolé pour le surplus de travail...
    Pas de problème! Ça arrive à tout le monde, et je peux très bien avoir raté un truc! N'hésite surtout pas la prochaine fois!

    Je profite du message pour indiquer que sur le module bibliothèque "bibcrypto_bbs", il y a aussi une fonction "cryptefichier_bbs" qui permet de crypter directement des fichiers. Ainsi, avec les 2 nombres nécessaires (pnp et graine), on peut fabriquer un fichier crypté d'un texte, d'un programme, d'une image, d'une vidéo, etc... et de l'envoyer par email en pièce jointe à quelqu'un qui saura la décrypter... Et dans ce cas-là, on n'a pas besoin de base64.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. générateur de nombre aléatoire
    Par ndefta love dans le forum C++Builder
    Réponses: 3
    Dernier message: 07/12/2006, 22h21
  2. générateur de nombres pseudo-aléatoire
    Par salseropom dans le forum C
    Réponses: 3
    Dernier message: 22/08/2006, 13h21
  3. Générateur de nombres aléatoires
    Par Grand sorcier dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 30/07/2006, 22h44
  4. Générateurs de nombres aléatoires
    Par Cheps dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 12/06/2006, 00h37
  5. Générateur de nombres pseudo-aléatoires
    Par gege2061 dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 25/08/2005, 13h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo