Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Exercice] Cryptage (débutant)

Ascii47

    9 août 2011 à 10:49:09

    Bonjour à tous, je vous propose un petit exercice, pas trop dur et concret et qui n'utilise que la bibliothèque string.

    Le système Rot13 permet d'encrypter facilement des chaines de texte mais reste assez facile à contourner.Il existe une variante nommée Ascii 47, reposant sur la table Ascii, et effectuant un décalage de 47 caractères.

    Je vous propose donc de réaliser une fonction effectuant l'encodage d'une chaîne en Ascii47 :)
    Je vous proposerais ma solution après un premier post, histoire de maintenir le suspens.

    J'obtiens un dialoge du genre:
    hello world
    >>96==@ H@C=5


    PS: référence sur l'Ascii.L'Ascii47 utilise les caractères allant de 33 à 126.
    • Partager sur Facebook
    • Partager sur Twitter
      9 août 2011 à 13:28:06

      J'ai fait un petit truc, je pense qu'on peut faire mieux. :)

      # -*- coding: UTF-8 -*-
      
      def ascii47(s):
          res = ''
          for c in s:
              c = ord(c)
              if c + 47 > 126:
                  res += chr(c - 47)
              else:
                  res += chr(c + 47)
          return res
      
      print ascii47(raw_input())
      

      Edit: Correction d'un coquille. :-°
      • Partager sur Facebook
      • Partager sur Twitter
        9 août 2011 à 14:39:30

        Ca m'a l'air de marcher ;) C'est une solution possible.Voici la mienne (2 lignes ^^)
        from string import maketrans
        print raw_input().translate(maketrans("".join(map(chr, range(33, 127))) , "".join(map(chr, range(33 + 47, 127))) + "".join(map(chr, range(33, 33 + 47))) ))
        
        • Partager sur Facebook
        • Partager sur Twitter
          9 août 2011 à 15:10:08

          J'ai corrigé mon code, il y avait un petit problème en fait. :-°
          Ton code en 2 lignes c'est pas un peu tiré par les cheveux ? :-°
          Ya beaucoup de trucs comme ça en python ? :lol:
          Je vais essayer de comprendre ton code. lol
          • Partager sur Facebook
          • Partager sur Twitter
            9 août 2011 à 18:27:59

            Pour le fun :
            s = "hello world"
            
            def f(x):
              a, b = ord(x) + 47, ord(x) - 47
              return chr(a) if (a <= 126) else chr(b)
            
            print ''.join(map(f, s))
            
            • Partager sur Facebook
            • Partager sur Twitter
              9 août 2011 à 19:38:10

              Citation : Pouet_forever

              Ton code en 2 lignes c'est pas un peu tiré par les cheveux ?
              Ya beaucoup de trucs comme ça en python ?



              Hum,j'avoue, c'était pour faire "comme les pros" en un minimum de place :)
              Je fais plus compréhensible:

              from string import maketrans
              
              nocrypt = "".join(map(chr, range(33, 127)))
              crypt =  "".join(map(chr, range(33 + rot, 127))) + "".join(map(chr, range(33, 33 + rot)))
              
              rot = 47
              
              def encrypt(input, rot):
               encryption = maketrans(nocrypt, crypt)
               output_crypt = input.translate(encryption)
               return output_crypt
               
               
              print encrypt(raw_input(), 47)
              
              • Partager sur Facebook
              • Partager sur Twitter
                9 août 2011 à 21:03:16

                def ascii47(s):
                    trans = lambda x : x + 47 if x < 80 else x - 47 
                    return "".join([chr(trans(ord(c))) for c in s])
                


                Python pousse au crime, tout de même. :-°
                • Partager sur Facebook
                • Partager sur Twitter
                Zeste de Savoir, le site qui en a dans le citron !
                  9 août 2011 à 23:10:21

                  print raw_input().translate(bytearray(range(33)+range(80,127)+range(33,80)+range(127,256)))
                  

                  hello world
                  96==@ H@C=5
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Python c'est bon, mangez-en. 

                  [Exercice] Cryptage (débutant)

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown