Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

dans la langue de molière

14 réponses
Avatar
swan lee
bonjour à tous,

j'aimerai crypter un fichier avec un algorithme de type blowfish.
pas de problème, sauf pour nos accents...
pouvez vous m'aiguiller sur une façon de faire pour que ceux-ci ne
passent pas à l'as dans la fonction de cryptage.

merci par avance,
swan

4 réponses

1 2
Avatar
Eric Levenez
Le 20/12/08 15:30, dans <494d0170$0$24525$, « swan
lee » a écrit :

alors, il faut aussi rajouter
#ifdef WIN32
typedef signed char int8_t;
typedef short int int16_t;
typedef int int32_t;
typedef __int64 int64_t;
typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;
typedef unsigned int uint32_t;
typedef unsigned __int64 uint64_t;

typedef uint8_t u_int8_t;
typedef uint16_t u_int16_t;
typedef uint32_t u_int32_t;
typedef uint64_t u_int64_t;
typedef unsigned short u_short;
typedef unsigned char u_char;
#endif



Même avec ces lignes en plus cela ne compile pas car n'étant pas sous
Microsoft Windows, WIN32 n'est pas défini, et donc ton code est toujours
celui publié initialement. Mais même en enlevant le ifdef, cela ne marche
pas, rien que par le "__int64" non défini (et rappel, il ne faut pas
utiliser une variable commençant pas "_ car elles sont réservées par le
compilateur).

L'include stdint.h permet d'utiliser toute une série de types (si
disponibles sur l'architecture cible), ceux justement même que tu définis
(uintN_t) pour les re-redéfinir avec encore un nouveau type (u_intN_t).

Comme il a été dit, un include de stdio.h n'est pas un luxe non plus pour
tes printf. Alors en corrigeant tout cela, il reste encore une erreur sur la
ligne :

BlowFish_init( &x, "tAMERE", 6);

où tu passes une chaîne signée à une fonction qui attend du non signé.

Il y a aussi la boucle

for( i = 0; i < l; i++){

qui, hors son formatage aléatoire (comme le reste du code), compare un signé
et un non signé.

Comme ton code n'a pas de commentaire. Peux-tu expliquer ce qu'il est sensé
faire, ce qui ne marche pas chez toi, et ce que tu voudrais qu'il fasse
exactement...

Si ce code est sensé traiter une suite d'octets binaire, en quoi serait-il
affecté par le contenu de ces octets, à savoir un encodage de caractère
particulier en ASCII, EBCDIC, ISO-8859, UTF-8 ou autre ?

De plus je ne suis pas sûr que ta ligne

unsigned char a[] = "phrase avec à accent ";

soit portable car sa compilation dépendant du type d'encodage des accents
utilisés par l'éditeur de texte ayant servi à saisir le code. Sur ma machine
le "à" sera codé sur 2 octets en UTF-8, alors que sur d'autres ce même
caractère sera codé sur un octet en ISO-8859-1, voire en Windows-trucmuche.

La ligne

printf("%s", b);

est hautement suspecte car elle semble envoyer sur la console un flux
binaire sans aucun contrôle. Normalement une console TTY ou une émulation de
console interprète certains caractères de contrôle pour faire des actions
comme modifier l'affichage, lancer une impression...

--
Éric Lévénez
FAQ de fclc : <http://www.levenez.com/lang/c/faq/>
Avatar
Patrick 'Zener' Brunet
Bonjour.

"Sylvain SF" a écrit dans le message
de news 494af955$0$4081$
swan lee a écrit :

j'aimerai crypter un fichier avec un algorithme de type blowfish.



*chiffrer* dans la langue de Molière.




Récréation: sans oublier "souffle-poisson" :o)

Plus sérieusement, j'allais faire la remarque quand j'ai lu cette dernière
réponse...

Mais en fait je me demande si c'est approprié: crypter est *techniquement*
irréaliste, mais d'un point de vue linguistique, pas moins acceptable que
décrypter, qui lui-même a un sens distinct de déchiffrer.

Je me demandais récemment (exercice de style) comment on pourrait procéder
pour effectivement crypter un message, c'est à dire le chiffrer selon un
procédé dont on ignorerait presque tout soi-même...

Il m'arrive de faire des trucs comparables: par exemple, pour faire un
document Word définitivement read-only, protéger l'accès en écriture avec un
mot de passe que je m'efforce de composer au hasard sans même le voir (sauf
qu'il faut le confirmer, alors je fais ça dans un Notepad et je le prends
dans le presse-papier, le tout sans regarder 3-)).

Mais ce n'est qu'un mot de passe, le procédé de chiffrement n'étant inconnu
que parce que non documenté.
De plus le "message" (le code de protection stocké dans le document) n'a pas
vocation à être déchiffré, c'est plutôt une clé que l'on jette après avoir
condamné la porte.
Je me demande quel genre de protocole cryptologique pourrait exploiter une
telle démarche: synthèse aléatoire d'un algorithme composite dont on ne
garderait aucune information, donc une vraie boîte noire avec sa clé,
éventuellement restreinte au seul destinataire.

Finalement ça a peut-être un sens de crypter, même sans téléphone portable.

--
Cordialement.

* Patrick BRUNET www.ipzb.fr www.ipzb-pro.com
* E-mail: lien sur http://zener131.eu/ContactMe
Avatar
Blaise Potard
Le Sat, 20 Dec 2008 10:55:44 +0100, swan lee a écrit:

[snip presque tout]

#include <stdio.h>

int main (int argc, char* argv[]) {
printf("phrase avec à accentn");
return 0;
}

Et avec ça, les accents s'affichent ?
Avatar
Antoine Leca
En news:494cc120$0$27356$, swan lee va escriure:
unsigned char a[] = "phrase avec à accent ";
unsigned char b[256];
unsigned char c[256];

BlowFish_init( &x, "tAMERE", 6);

BlowFish_encrypt( &x, a, b, sizeof( a) - 1);
printf("%s", b);printf( "n");
l = BlowFish_decrypt( &x, b, c, sizeof( b) - 1 + 8);

for( i = 0; i < l; i++) printf( "%c", c[i]);
printf( "n");



Plutôt que de vérifier avec printf, est-ce que si tu compares avec memcmp
cela ne va pas mieux ? (comparer aussi que l==sizeof a-1)

Sans compter que le printf() de b au contenu aléatoire est une fort mauvaise
idée.


Antoine
1 2