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

C++ Discussion :

d�claration de variables de 16, 32 et 128 bits


Sujet :

C++

  1. #1
    Membre habitu�
    Inscrit en
    D�cembre 2004
    Messages
    10
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2004
    Messages : 10
    Par d�faut d�claration de variables de 16, 32 et 128 bits
    bonsoir
    Je suis en train d'essayer de faire une impl�mentation de l'algo de chiffrfement IDEA en C++.
    Mon probl�me est que je dois manipuler des blocs de 16,32 et 128 bits, mais je sais pas quel type de donn�es utiliser pour mes variables pour �tre sur qu'ils auront exactement la taille que je veux quelle que soit la machine.


    J'ai trouv� qu'il y avait des types Byte word et dword est t il possible de fixer leur taille en bits, et comment est ce que je dois les utiliser, mon compilateur C++ Builder 5 me donne une erreur.

    Pour les types char et unsigned char, est ce qu'ils sont toujours d�fnis sur 8 bits quel que soit le compilateur et la machine?

    Int => 32 bits?
    short => 16 bits?


    Merci de vos r�ponses.

  2. #2
    Membre averti
    Homme Profil pro
    Ing�nieur d�veloppement mat�riel �lectronique
    Inscrit en
    F�vrier 2004
    Messages
    35
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement mat�riel �lectronique

    Informations forums :
    Inscription : F�vrier 2004
    Messages : 35
    Par d�faut
    salut,avec borland tu as les type unsigned __int8, unsigned __int16 et unsigned __int32, pour plus de bit je ne sais pas.

  3. #3
    Membre exp�riment�
    Profil pro
    Enculeur de mouches
    Inscrit en
    Septembre 2003
    Messages
    133
    D�tails du profil
    Informations personnelles :
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activit� : Enculeur de mouches

    Informations forums :
    Inscription : Septembre 2003
    Messages : 133
    Par d�faut
    int ne contient pas d'information de taille en lui-m�me, cela veut dire qu'elle est variable en fonction du compilo.

    char -> 8bits
    short int -> 16bits
    long int -> 32bits
    long long int -> 64bits

    Je ne suis pas du tout s�r qu'il existe un type entier de 128bits.
    Tu peux n�anmoins d�finir une classe (une valeur cod�e sur plusieurs variables), de lui red�finir les operator (=, +, *, etc...) utiles.

  4. #4
    R�dacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de donn�es
    Inscrit en
    Juin 2004
    Messages
    5 840
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 42
    Localisation : France

    Informations professionnelles :
    Activit� : Administrateur de base de donn�es

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par d�faut
    Bonjour,
    je propose une id�e mais je n'ais aucune id�e quand � sa faisabilit�:
    allou� un bloc de taille correspondante (en C j'utiliserai malloc mais l�: : : ) et le remplir bit par bit (en esp�rant que tu n'est besoin que des valeur non sign�e sinon �a va �tre drole de jouer avec le compl�ment � 1 ).

    Bonne chance!

  5. #5
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Un char fera toujours un octet, tu peux l'utiliser comme brique de base pour faire des structures � taille fixe quelque soit l'architecture.

  6. #6
    Membre exp�riment�
    Profil pro
    Inscrit en
    Ao�t 2003
    Messages
    247
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 247
    Par d�faut
    Citation Envoy� par SKZ81
    int ne contient pas d'information de taille en lui-m�me, cela veut dire qu'elle est variable en fonction du compilo.

    char -> 8bits
    short int -> 16bits
    long int -> 32bits
    long long int -> 64bits

    Citation Envoy� par Loulou24
    Un char fera toujours un octet, tu peux l'utiliser comme brique de base pour faire des structures � taille fixe quelque soit l'architecture.


    Respectivement faux, et... faux ;-).


    Un char fait toujours 1 byte. Mais qui a dit qu'un byte valait un octet ? Certainement pas la norme en tout cas, m�me si c'est vrai dans l'�crasante majorit� des machines du monde. Par contre, la norme dit qu'il fait au moins 8 bits.


    Quand aux plages de valeur, la norme dit �a:
    sizeof char <= sizeof short int <= sizeof int <= sizeof long int


    Si mes souvenirs sont bons, la norme dit aussi que short fait au moins 8bits, int au moins 16 et long au moins 32.


    Quant � long long, ce n'est pas standard du tout.


    Donc dur de faire un algo de chiffrement portable. C'est pour cela qu'il faudra supposer et essayer de prendre en compte le plus de cas possible avec le preprocesseur. (Sauf, �videmment, si la portabilit� n'importe pas.)


    Pour g�rer les blocs de 128 bits, tu fera donc une structure contenant 4 int's par exemple. (Puisque sur la plupart des processeurs du monde, un int fait 32 bits.)
    Je ne connait pas IDEA, mais � mon avis, il ne sera pas la peine d'impl�menter les fonctions de calcul, m�me de base.

  7. #7
    Membre exp�riment�
    Profil pro
    Inscrit en
    Ao�t 2003
    Messages
    247
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 247
    Par d�faut
    Tiens, voil� ce que fait SDL pour d�finir ses types xInty. Ce qui prouve que les consid�rations de Loulou24 et de SKZ91 sont en pratique vraie. Mais ce n'est pas portable 64 bits, dans ce cas.




    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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
     
    /*
        SDL - Simple DirectMedia Layer
        Copyright (C) 1997-2004 Sam Lantinga
     
        This library is free software; you can redistribute it and/or
        modify it under the terms of the GNU Library General Public
        License as published by the Free Software Foundation; either
        version 2 of the License, or (at your option) any later version.
     
        This library is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
        Library General Public License for more details.
     
        You should have received a copy of the GNU Library General Public
        License along with this library; if not, write to the Free
        Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
     
        Sam Lantinga
        [email protected]
    */
     
    #ifdef SAVE_RCSID
    static char rcsid =
     "@(#) $Id: SDL_types.h,v 1.11 2004/01/04 16:49:08 slouken Exp $";
    #endif
     
    /* General data types used by the SDL library */
     
    #ifndef _SDL_types_h
    #define _SDL_types_h
     
    /* The number of elements in a table */
    #define SDL_TABLESIZE(table)	(sizeof(table)/sizeof(table[0]))
     
    /* Basic data types */
    typedef enum {
    	SDL_FALSE = 0,
    	SDL_TRUE  = 1
    } SDL_bool;
    typedef unsigned char	Uint8;
    typedef signed char	Sint8;
    typedef unsigned short	Uint16;
    typedef signed short	Sint16;
    typedef unsigned int	Uint32;
    typedef signed int	Sint32;
     
    /* Figure out how to support 64-bit datatypes */
    #if !defined(__STRICT_ANSI__)
    #if defined(__GNUC__) || defined(__MWERKS__) || defined(__SUNPRO_C) || defined(__DECC)
    #define SDL_HAS_64BIT_TYPE	long long
    #elif defined(_MSC_VER) /* VC++ */
    #define SDL_HAS_64BIT_TYPE	__int64
    #endif
    #endif /* !__STRICT_ANSI__ */
     
    /* The 64-bit type isn't available on EPOC/Symbian OS */
    #ifdef __SYMBIAN32__
    #undef SDL_HAS_64BIT_TYPE
    #endif
     
    /* The 64-bit datatype isn't supported on all platforms */
    #ifdef SDL_HAS_64BIT_TYPE
    #ifndef H_MMBASIC
    typedef unsigned SDL_HAS_64BIT_TYPE Uint64;
    #endif
    typedef SDL_HAS_64BIT_TYPE Sint64;
    #else
    /* This is really just a hack to prevent the compiler from complaining */
    typedef struct {
    	Uint32 hi;
    	Uint32 lo;
    } Uint64, Sint64;
    #endif
     
    /* Make sure the types really have the right sizes */
    #define SDL_COMPILE_TIME_ASSERT(name, x)               \
           typedef int SDL_dummy_ ## name[(x) * 2 - 1]
     
    SDL_COMPILE_TIME_ASSERT(uint8, sizeof(Uint8) == 1);
    SDL_COMPILE_TIME_ASSERT(sint8, sizeof(Sint8) == 1);
    SDL_COMPILE_TIME_ASSERT(uint16, sizeof(Uint16) == 2);
    SDL_COMPILE_TIME_ASSERT(sint16, sizeof(Sint16) == 2);
    SDL_COMPILE_TIME_ASSERT(uint32, sizeof(Uint32) == 4);
    SDL_COMPILE_TIME_ASSERT(sint32, sizeof(Sint32) == 4);
    SDL_COMPILE_TIME_ASSERT(uint64, sizeof(Uint64) == 8);
    SDL_COMPILE_TIME_ASSERT(sint64, sizeof(Sint64) == 8);
     
    /* Check to make sure enums are the size of ints, for structure packing.
       For both Watcom C/C++ and Borland C/C++ the compiler option that makes
       enums having the size of an int must be enabled.
       This is "-b" for Borland C/C++ and "-ei" for Watcom C/C++ (v11).
    */
    /* Enable enums always int in CodeWarrior (for MPW use "-enum int") */
    #ifdef __MWERKS__
    #pragma enumsalwaysint on
    #endif
     
    typedef enum {
    	DUMMY_ENUM_VALUE
    } SDL_DUMMY_ENUM;
     
    SDL_COMPILE_TIME_ASSERT(enum, sizeof(SDL_DUMMY_ENUM) == sizeof(int));
     
    #undef SDL_COMPILE_TIME_ASSERT
     
    /* General keyboard/mouse state definitions */
    enum { SDL_PRESSED = 0x01, SDL_RELEASED = 0x00 };
     
    #endif

  8. #8
    Membre exp�riment�
    Profil pro
    Enculeur de mouches
    Inscrit en
    Septembre 2003
    Messages
    133
    D�tails du profil
    Informations personnelles :
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activit� : Enculeur de mouches

    Informations forums :
    Inscription : Septembre 2003
    Messages : 133
    Par d�faut
    Citation Envoy� par Selenite
    Respectivement faux, et... faux ;-).


    Un char fait toujours 1 byte.
    Exact... Et autant pour moi Quoiqu'� ma d�charge byte est quand m�me tr�s souvent traduit par "octet"...
    De la m�me mani�re qu'en pratique int a pour taille celle des registres du processeur (WORD) (donc 32 bits sur une majorit� des machines actuelles (oublions les 64 pour encore 1/2 ans))
    D'ailleurs m�fiez vous dans vos codes, les jeux de caract�res 16 bits risque de mettre � mal certains modules qui on assum� (quel anglicisme!) trop vite que sizeof(char)=1...
    Je pense qu'en pratique, on va introduire un nouveau type pour g�rer �a (si on ne l'encapsule pas dans des classes et d�finitivement aux oubliettes!!).

    Et tout �a finira, j'en suis s�r, dans la norme, tout comme long long...

  9. #9
    Membre habitu�
    Inscrit en
    D�cembre 2004
    Messages
    10
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2004
    Messages : 10
    Par d�faut Impl�mentation
    Bonsoir et merci de vos r�ponses.

    Finalement, j'ai choisi d'utiliser comme base le type unsigned short qui sur machine fait 16 bits.
    Pour la portabilit�, il vaut mieux en effect avoir recours aux macros.

    Voila mon code pour une fonction de gen�ration de 52 cl�s de 16 bits � partir de la cl� donn�e par l'utilisateur qui est de 128 bits. Ces 52 cl�s sont obtenues par d�calage de la cl� initiale de 25 bits � chaque nouvelle it�ration.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void generateKey(unsigned short *userKey, unsigned short *encryptionKey) {
     int i,j;
     
     for(i=0;i<8;i++) encryptionKey[i] = userKey[i];
     for(j=8;j<52;j++) {
            if ((j%8)==0)
                    encryptionKey[j] = (encryptionKey[j-2]<<7) | (encryptionKey[j-1]>>9);
            else if ((j%8)==1)
                    encryptionKey[j] = (encryptionKey[j-2]<<7) | (encryptionKey[j-9]>>9);
            else
                    encryptionKey[j] = (encryptionKey[j-10]<<7) | (encryptionKey[j-9]>>9);
            }
    }
    Cependant j'ai trouv� un code sur inernet qui fait appremment la meme chose (sauf qu'il d�cale � gauche), mais j'ai pas bien compris son fonctionnement:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    static void en_key_idea(word16 *userkey, word16 *Z)
    {
       int i,j;
       /* shifts */
       for (j=0;j<8;j++)
          Z[j]=*userkey++;
       for (i=0;j<KEYLEN;j++)
       {
          i++;
          Z[i+7]=((Z[i&7] << 9) | (Z[i+1 & 7] >> 7));  [color=green]//Pkoi utiliser un & au lieu du modulo?[/color]
          Z+=i&8; //?
          i&=7; //?
       }
    }
    Merci

  10. #10
    Membre exp�riment�
    Profil pro
    Enculeur de mouches
    Inscrit en
    Septembre 2003
    Messages
    133
    D�tails du profil
    Informations personnelles :
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activit� : Enculeur de mouches

    Informations forums :
    Inscription : Septembre 2003
    Messages : 133
    Par d�faut Re: Impl�mentation
    Citation Envoy� par samipate
    Z[i+7]=((Z[i&7] << 9) | (Z[i+1 & 7] >> 7)); //Pkoi utiliser un & au lieu du modulo?
    Op�ration ET BINAIRE :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    ABCD WXYZ    (une variable écrite en binaire)
    &
    0000 0111    (=7)
    ---------
    0000 0XYZ
    On r�cup�re bien le reste...
    En fait x % y �quivaut � x & y si y est de la forme y=(2^n)-1

    Citation Envoy� par samipate
    Z+=i&8; //?
    m�me chose, avec 0000 1000
    Soit +=0 ou +=8 en fonction de la valeur de i

    Citation Envoy� par samipate
    i&=7; //?
    i = i&7;

    Par contre j'ai pas d�cortiquer l'algo, je vois donc pas PKOI on fait tout �a... Dzol...

  11. #11
    Membre habitu�
    Inscrit en
    D�cembre 2004
    Messages
    10
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2004
    Messages : 10
    Par d�faut Et une fonction qui fonctionne, une!!
    Merci

    J'ai enfin r�ussi � finir cette &#!@!!! de fonction de g�n�ration de cl�s, mais ce n'est qu'une partie de l'algo de chiffrement IDEA. Je risque fort d'avoir encore besoin de vos services!
    (Au fait c pour un projet � la fac)

    Pour ceux que IDEA interesse:
    http://www.uqtr.ca/~delisle/Crypto/p...blocs_idea.php

Discussions similaires

  1. [MASM32] D�claration des variables
    Par mrousse dans le forum x86 32-bits / 64-bits
    R�ponses: 2
    Dernier message: 30/09/2005, 14h30
  2. d�claration de variable public
    Par mathieu57 dans le forum MFC
    R�ponses: 5
    Dernier message: 15/09/2005, 17h36
  3. [DB2] Ordre de d�claration des variables
    Par Fatah93 dans le forum DB2
    R�ponses: 1
    Dernier message: 04/05/2005, 17h18
  4. [FLASH MX2004] D�claration de variables sous flash mx
    Par softyClochette dans le forum Flash
    R�ponses: 4
    Dernier message: 29/11/2004, 16h11
  5. R�ponses: 4
    Dernier message: 07/05/2004, 10h43

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