Volubis, le forum IBM i Index du Forum Volubis, le forum IBM i
avec les clubs Informatiques IPL et Bretagne.
 
 FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres   Groupes d'utilisateursGroupes d'utilisateurs   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

DB2 for i 7.3 - Mise à blanc de tous les index recommandés

 
Poster un nouveau sujet   Répondre au sujet    Volubis, le forum IBM i Index du Forum -> langages
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
CyrilN67



Inscrit le: 12 Juin 2018
Messages: 4

MessagePosté le: Ven 22 Nov 2019, 17:04:48    Sujet du message: (sans sujet) Répondre en citant

Bonjour,

J'ai besoin dans un traitement RPG d'utiliser un cryptage de sécurité d'un texte au format SHA256.
J'ai réussi à faire fonctionner mon programme et d'obtenir le texte au format hexadécimal.
Cependant, j'ai un problème et des valeurs différentes en comparant avec 2 convertisseurs différents en ligne dès lors que j'utilise les caractères "{" et "}".
Auriez-vous une idée de ce qui peut provoquer cela ?

Ci-dessous les résultats de mes tests :

1) Chaine origine : TEST
1er conv : 94EE059335E587E501CC4BF90613E0814F00A7B08BC7C648FD865A2AF6A22CC2
2e conv : 94EE059335E587E501CC4BF90613E0814F00A7B08BC7C648FD865A2AF6A22CC2
AS400 : 94EE059335E587E501CC4BF90613E0814F00A7B08BC7C648FD865A2AF6A22CC2

==> Test concluant car les valeurs hexadécimales sont équivalentes pour les 3.

2) Chaine origine : TEST{
1er conv : 1E36998A4998384D076A7572349A4348D5FE1E8CE2A2B8E490FEDCE3960C2C61
2e conv : 1E36998A4998384D076A7572349A4348D5FE1E8CE2A2B8E490FEDCE3960C2C61
AS400 : 4106D9FB8895849E5F7919ED26DFE15BDA83B0B904E8A73DBFFCC4F766951EE7

==> Test non concluant car la valeur hexadécimale en sortie de mon programme AS400 est différente des 2 autres.

Pour info, j'utilise la procédure "Qc3CalculateHash" exposé par le programme de service QSYS/QC3HASH du répertoire de liage 'QC2LE'.

Voici le code utilisé :

Code:

data = 'TEST{';                                       
           len = %len(%trim(data));
           alg.HashAlg = HASH_SHA256;

           //Convert from EBCDIC to ASCII (skip this step if you want Hash in EBCDIC)
           QDCXLATE(len: data: 'QTCPASC');
     
           //API to calculate the SHA256 hash
           Qc3CalculateHash( %addr(data)
                           : len
                           : 'DATA0100'
                           : alg
                           : 'ALGD0500'
                           : '0'
                           : *OMIT   
                           : hash
                           : ErrorNull );
                                     
           cvthc( $hex: hash: %len(hash)*2);
           dsply %subst($hex:1:32);
           dsply %subst($hex:33:32);   
     
           *inlr = *on;


Merci d'avance pour votre aide.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
monthi



Inscrit le: 11 Sep 2018
Messages: 42
Localisation: Paris

MessagePosté le: Sam 23 Nov 2019, 12:02:20    Sujet du message: (sans sujet) Répondre en citant

Bonjour

il vaut mieux utiliser les apis Iconv que le la table QTCPASC pour efféctué les conversion EBCDIC <--> ASCII

la table QTCPASC converti le { X'51' en © X'59' au lieu de X'7b'

Code:

Table:   QTCPASC        Bibliothèque:   QUSRSYS                       
                                                                       
Entrée  Sortie             Entrée  Sortie             Entrée  Sortie   
 hexa    hexa               hexa    hexa               hexa    hexa   
  2D      05                 3C      14                 4B      2E     
  2E      06                 3D      15                 4C      3C     
  2F      07                 3E      1A                 4D      28     
  30      1A                 3F      1A                 4E      2B     
  31      1A                 40      20                 4F      7C     
  32      16                 41      A6                 50      26     
  33      1A                 42      E1                 51      A9     

voici un exemple basée sur la demande initiale

TEST{
--> 1E36998A4998384D076A7572349A4348D5FE1E8CE2A2B8E490FEDCE3960C2C61
Code:

       ctl-opt dftactgrp(*no);
       //*******************************************************
       // Data-structures
       //********************************************************
       // ds pour Erreur APi
       Dcl-ds APIError;
         suAPIAvail uns(10) INZ(%size(APIError));
         suAPIRtnd  uns(10) iNZ(0);
         saAPIMsgId char(7);
         *n char(1);
         saAPIMsgDta char(256);
       end-ds;
       // Descripteur  pour api iconv et iconv_close
       dcl-ds ToAscii ;
         ICORV_A bindec(9);
         ICOC_A  bindec(9) DIM(00012);
       end-ds;
       // tocode pour api QtqIconvOpen
       Dcl-ds  Qascii ;
         asciiCP int(10) inz(819);
         asciiCA int(10) inz(0);
         asciiSA int(10) inz(0);
         asciiSS int(10) inz(1);
         asciiIL int(10) inz(0);
         asciiEO int(10) inz(1);
         *n char(8) inz(*allx'00');
       end-ds;
       // Fromcode pour api QtqIconvOpen
       Dcl-ds  Qebcdic ;
         ebcdicCP int(10) inz(0);
         ebcdicCA int(10) inz(0);
         ebcdicSA int(10) inz(0);
         ebcdicSS int(10) inz(1);
         ebcdicIL int(10) inz(0);
         ebcdicEO int(10) inz(1);
         *n char(8) inz(*allx'00');
       end-ds;
       // ds format DATA0200 pour api Qc3CalculateHash
       Dcl-ds data0200;
         datap pointer;
         lgdata int(10) inz;
         *n char(12) inz(*loval);
       end-ds;
       //*******************************************************
       // Prototypes
       //********************************************************
       //Calculate Hash
       dcl-pr Qc3CalculateHash  extproc('Qc3CalculateHash');
        *n char(65535) options(*varsize) const;
         *n int(10) const;
         *n char(8) const;
         *n int(10) const;
         *n char(8) const;
         *n char(1) const;
         *n char(10) const options(*omit);
         *n char(64) options(*varsize);
         *n char(512) options(*varsize);
       end-pr;
       //Code Conversion Allocation API
       Dcl-pr IConvOpen char(52) ExtProc('QtqIconvOpen');
         *n pointer Value options(*string);
         *n pointer Value options(*string);
       end-pr;
       // code connversion
       Dcl-pr IConv int(10) ExtProc('iconv');
         *n char(52) Value;
         *n pointer;
         *n uns(10);
         *n pointer;
         *n uns(10);
       end-pr;
       //Code Conversion Deallocation
       Dcl-pr IConvClose int(10) ExtProc('iconv_close');
         *n char(52) Value;
       end-pr;
       //Convert Hex to Character
       Dcl-pr cvthc EXTPROC('cvthc');
         *n pointer VALUE;
         *n pointer VALUE;
         *n int(10) VALUE;
       end-pr;
       //*******************************************************
       // Zones isolée
       //********************************************************
       dcl-s data varchar(100); //données a cryptée
       dcl-s hash char(32);     // données cryptés
       dcl-s ebcptr pointer;    // pointeur sur donnée a crypter pour conversion
                                // Ebcdic--> Ascii
       dcl-s inBytesLeft uns(10); // longueur données a convertir
       dcl-s outBytesLeft uns(10); // longeur des donnée recevant la conversion
       dcl-s hash_hex char(64);    // donnée cryptée en hex
       //*********************************************************
       // programme principal
       //********************************************************
       data='TEST{';

       inBytesLeft=%len(data);
       outBytesLeft=inBytesLeft;
       ebcptr=%addr(data:*data);
       // conversion Ebcdic--> ascii
       ToAscii=IConvOpen(%addr(Qascii):%addr(Qebcdic));
       IConv(ToAscii:ebcptr:inBytesLeft:ebcptr:outBytesLeft);
       IConvClose(ToAscii);
       // chargement valeur DATA0200
       datap=%addr(data:*data);
       lgdata=%len(data);
       // cryptage SHA_253 --> type : 3
       Qc3CalculateHash(data0200:1:'DATA0200':3:'ALGD0500':'0':*OMIT:hash:
         apierror);
       // traduction en Hex de la donnée cryptée
       cvthc(%addr(hash_hex):%addr(hash):64);
       // affichage pour control
       dsply %subst(hash_hex:1:32);
       dsply %subst(hash_hex:33:32);
       *inlr=*on;


[/code]
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
cmasse
Site Admin


Inscrit le: 14 Fév 2007
Messages: 716
Localisation: Nantes

MessagePosté le: Lun 25 Nov 2019, 08:25:15    Sujet du message: iconv Répondre en citant

Parfaitement d'accord !

voir, aussi l'exemple IBM (attention qui utilise le CCSID 37) https://www.ibm.com/support/pages/qc3calculatehmac-api-example
_________________
Christian Massé (Volubis.fr)
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
CyrilN67



Inscrit le: 12 Juin 2018
Messages: 4

MessagePosté le: Lun 25 Nov 2019, 11:32:51    Sujet du message: iconv Répondre en citant

Merci beaucoup pour vos réponses. Je viens d'essayer et cela fonctionne parfaitement bien.
Bonne journée.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Volubis, le forum IBM i Index du Forum -> langages Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com

Anti Bot Question MOD - phpBB MOD against Spam Bots