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

 Delphi Discussion :

Base 64 Décoder Email avec D6 et Windows11 64Bits.


Sujet :

Delphi

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 449
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 449
    Points : 1 335
    Points
    1 335
    Par défaut Base 64 Décoder Email avec D6 et Windows11 64Bits.
    Bonjour à toutes et à tous,

    Avec Outlook Windows 11 je reçois beaucoup d'emails avec une grande partie codée en Base 64.

    Ils sont naturellement bloqué et je peus vérifier la source.

    En D6 j'avais un code qui apparemment ne fonctionne pas avec ce cryptage :

    Une partie du texte codé de l'email :

    PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOnZtbCIgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWlj
    cm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIj4NCiAgICA8aGVhZD4NCiAgICAgICAgPCEtLSBOQU1F
    OiBBTk5PVU5DRSAtLT4NCiAgICAgICAgPCEtLVtpZiBndGUgbXNvIDE1XT4NCiAgICAgICAgPHht
    bD4NCiAgICAgICAgICAgIDxvOk9mZmljZURvY3VtZW50U2V0dGluZ3M+DQogICAgICAgICAgICA8
    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    const
      Codes64 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/';
     
    function Encode64(S: string): string;
    var
      i: Integer;
      a: Integer;
      x: Integer;
      b: Integer;
    begin
      Result := '';
      a := 0;
      b := 0;
      for i := 1 to Length(s) do
      begin
        x := Ord(s[i]);
        b := b * 256 + x;
        a := a + 8;
        while a >= 6 do
        begin
          a := a - 6;
          x := b div (1 shl a);
          b := b mod (1 shl a);
          Result := Result + Codes64[x + 1];
        end;
      end;
      if a > 0 then
      begin
        x := b shl (6 - a);
        Result := Result + Codes64[x + 1];
      end;
    end;
     
    function Decode64(S: string): string;
    var
      i: Integer;
      a: Integer;
      x: Integer;
      b: Integer;
    begin
      Result := '';
      a := 0;
      b := 0;
      for i := 1 to Length(s) do
      begin
        x := Pos(s[i], codes64) - 1;
        if x >= 0 then
        begin
          b := b * 64 + x;
          a := a + 6;
          if a >= 8 then
          begin
            a := a - 8;
            x := b shr a;
            b := b mod (1 shl a);
            x := x mod 256;
            Result := Result + chr(x);
          end;
        end
        else
          Exit;
      end;
    end;
     
    procedure TForm1.BDecoderClick(Sender: TObject);
    begin
    Decode64(memo2.text);
    end;
     
    procedure TForm1.BEncoderClick(Sender: TObject);
    begin
    Encode64(memo1.text);
    end;
     
    end.
    Sur ce site pas de problème "https://www.base64decode.org/fr/"

    Si quelqu'un avait une autre solution plus performante en D6, merci d'avance.

    @+,

    cincap

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 577
    Points : 25 225
    Points
    25 225
    Par défaut
    Si c'est un MIME, LoadFromStream d'un TIdMessage si ça existe déjà en D6, c'est le format .eml et non le format .msg

    Avec Indy, tu fois voir les fonction de decodage base64
    Mais tu as les fonctions standards de la RTL comme EncdDecd.Decode(EncdStream, DecdStream) dans EncdDecd, il existe aussi DecodeString


    Ce qui est lent dans tes fonctions c'est "Result := Result +", la taille de buffer entrée-sortie est calculable : Len(Base64) * 3 / 4 = Len(Result)
    Un SetLength initial, l'utilisation d'un PChar incrémenté après chaque affectaton, le gain sur D6 serait important sinon avec FastMM c'est nettement moins nécessaire et EncdDecd.pas étant orienté Stream (même avec des String) est déjà écrite par une bufferisation.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 474
    Points : 3 097
    Points
    3 097
    J-L aka Papy pour les amis

Discussions similaires

  1. Envoi d'email avec SAS base
    Par hammamr dans le forum SAS Base
    Réponses: 11
    Dernier message: 15/02/2011, 17h31
  2. projet de base Interbase 7.5 avec images
    Par KRis dans le forum InterBase
    Réponses: 8
    Dernier message: 13/06/2005, 10h17
  3. Envoie de EMail avec un formulaire
    Par LibrairieSI dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 28/02/2005, 14h31
  4. exploiter une base de données excel avec delphi
    Par budylove dans le forum Bases de données
    Réponses: 2
    Dernier message: 01/02/2005, 19h37
  5. Type pour données de type email avec @
    Par jeff37 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 26/01/2004, 14h50

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