je voudrais écrire une chaine de caractères dans un fichier texte, mais
sans que l'on puisse voir ce qui a été écrit dedans avec le bloc notes
par exemple...
L'idée que j'ai eu est la suivante:
opérer un décalage sur les caractères qu'on veut mettre dans le fichier
texte:
ofstream fileout;
char c;
fileout.open(nom_out,ios::out | ios::binary);
while (//...
{
c << 1;
fileout << c;
}
fileout.close();
Et là effectivement je n'ai plus des caractères dans le fichier mais une
succession de chiffres...
Seulement lorsque je veux lire ce qui est écrit dans le fichier, le
décalage dans l'autre sens ne fonctionne pas (j'imagine que c'est normal,
mais je ne sais pas pourquoi)
Comment je peux faire ce "cryptage" de ma chaine de caractères?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Pierre Maurette
Michael a écrit:
Bonjour à tous,
je voudrais écrire une chaine de caractères dans un fichier texte, mais sans que l'on puisse voir ce qui a été écrit dedans avec le bloc notes par exemple...
L'idée que j'ai eu est la suivante:
opérer un décalage sur les caractères qu'on veut mettre dans le fichier texte:
ofstream fileout; char c;
fileout.open(nom_out,ios::out | ios::binary);
while (//... { c << 1; fileout << c; }
fileout.close();
Et là effectivement je n'ai plus des caractères dans le fichier mais une succession de chiffres...
Seulement lorsque je veux lire ce qui est écrit dans le fichier, le décalage dans l'autre sens ne fonctionne pas (j'imagine que c'est normal, mais je ne sais pas pourquoi) Sur de l'ascii vrai (char 8 bits, bit 7 à 0) ça pourrait marcher, mais
en déclarant ou en transtypant c en unsigned.
Comment je peux faire ce "cryptage" de ma chaine de caractères? Je tiens compte de vos guillemets, et considère que vous ne cherchez
pas à ce que votre cryptage résiste plus que quelques minutes. Deux voies: dans le même ordre d'idée que votre décalage, un OU EXCLUSIF qui a l'avantage de crypter et décrypter avec la même opération: #define CODE 'M' c ^= CODE; N'importe quelle valeur de char convient pour CODE, il suffit d'utiliser le même à l'écriture et à la lecture. Le texte est à sauver en tant que binaire une fois "crypté". Vous pouvez également chercher "rot13" sur Google (ce n'est pas du cryptage, mais du masquage de lecture). L'avantage, c'est que sauf erreur de ma part ça reste du texte, le problème c'est que ça se reconnaît à loeil, et que tous les lecteurs de news le déchiffrent. -- Pïerre
Michael <michael@no.com> a écrit:
Bonjour à tous,
je voudrais écrire une chaine de caractères dans un fichier texte, mais
sans que l'on puisse voir ce qui a été écrit dedans avec le bloc notes
par exemple...
L'idée que j'ai eu est la suivante:
opérer un décalage sur les caractères qu'on veut mettre dans le fichier
texte:
ofstream fileout;
char c;
fileout.open(nom_out,ios::out | ios::binary);
while (//...
{
c << 1;
fileout << c;
}
fileout.close();
Et là effectivement je n'ai plus des caractères dans le fichier mais une
succession de chiffres...
Seulement lorsque je veux lire ce qui est écrit dans le fichier, le
décalage dans l'autre sens ne fonctionne pas (j'imagine que c'est normal,
mais je ne sais pas pourquoi)
Sur de l'ascii vrai (char 8 bits, bit 7 à 0) ça pourrait marcher, mais
en déclarant ou en transtypant c en unsigned.
Comment je peux faire ce "cryptage" de ma chaine de caractères?
Je tiens compte de vos guillemets, et considère que vous ne cherchez
pas à ce que votre cryptage résiste plus que quelques minutes. Deux
voies: dans le même ordre d'idée que votre décalage, un OU EXCLUSIF
qui a l'avantage de crypter et décrypter avec la même opération:
#define CODE 'M'
c ^= CODE;
N'importe quelle valeur de char convient pour CODE, il suffit
d'utiliser le même à l'écriture et à la lecture. Le texte est à sauver
en tant que binaire une fois "crypté".
Vous pouvez également chercher "rot13" sur Google (ce n'est pas du
cryptage, mais du masquage de lecture). L'avantage, c'est que sauf
erreur de ma part ça reste du texte, le problème c'est que ça se
reconnaît à loeil, et que tous les lecteurs de news le déchiffrent.
--
Pïerre
je voudrais écrire une chaine de caractères dans un fichier texte, mais sans que l'on puisse voir ce qui a été écrit dedans avec le bloc notes par exemple...
L'idée que j'ai eu est la suivante:
opérer un décalage sur les caractères qu'on veut mettre dans le fichier texte:
ofstream fileout; char c;
fileout.open(nom_out,ios::out | ios::binary);
while (//... { c << 1; fileout << c; }
fileout.close();
Et là effectivement je n'ai plus des caractères dans le fichier mais une succession de chiffres...
Seulement lorsque je veux lire ce qui est écrit dans le fichier, le décalage dans l'autre sens ne fonctionne pas (j'imagine que c'est normal, mais je ne sais pas pourquoi) Sur de l'ascii vrai (char 8 bits, bit 7 à 0) ça pourrait marcher, mais
en déclarant ou en transtypant c en unsigned.
Comment je peux faire ce "cryptage" de ma chaine de caractères? Je tiens compte de vos guillemets, et considère que vous ne cherchez
pas à ce que votre cryptage résiste plus que quelques minutes. Deux voies: dans le même ordre d'idée que votre décalage, un OU EXCLUSIF qui a l'avantage de crypter et décrypter avec la même opération: #define CODE 'M' c ^= CODE; N'importe quelle valeur de char convient pour CODE, il suffit d'utiliser le même à l'écriture et à la lecture. Le texte est à sauver en tant que binaire une fois "crypté". Vous pouvez également chercher "rot13" sur Google (ce n'est pas du cryptage, mais du masquage de lecture). L'avantage, c'est que sauf erreur de ma part ça reste du texte, le problème c'est que ça se reconnaît à loeil, et que tous les lecteurs de news le déchiffrent. -- Pïerre
Arnaud Meurgues
Michael wrote:
while (//... { c << 1; fileout << c; } Seulement lorsque je veux lire ce qui est écrit dans le fichier, le décalage dans l'autre sens ne fonctionne pas (j'imagine que c'est normal, mais je ne sais pas pourquoi)
C'est assez normal, effectivement : en décalant, on « pousse dehors » le bit de poids fort qui pouvait être 0 ou 1. Or il n'y a aucun moyen de savoir duquel il s'agissait avant décalage. Donc on ne peut pas retrouver le caractère originel (on a toujours un choix de deux caractères, un avec 0 comme bit de poids fort et l'autre avec un 1).
-- Arnaud (Supprimez les geneurs pour me répondre)
Michael wrote:
while (//...
{
c << 1;
fileout << c;
}
Seulement lorsque je veux lire ce qui est écrit dans le fichier, le
décalage dans l'autre sens ne fonctionne pas (j'imagine que c'est normal,
mais je ne sais pas pourquoi)
C'est assez normal, effectivement : en décalant, on « pousse dehors » le
bit de poids fort qui pouvait être 0 ou 1. Or il n'y a aucun moyen de
savoir duquel il s'agissait avant décalage. Donc on ne peut pas
retrouver le caractère originel (on a toujours un choix de deux
caractères, un avec 0 comme bit de poids fort et l'autre avec un 1).
--
Arnaud
(Supprimez les geneurs pour me répondre)
while (//... { c << 1; fileout << c; } Seulement lorsque je veux lire ce qui est écrit dans le fichier, le décalage dans l'autre sens ne fonctionne pas (j'imagine que c'est normal, mais je ne sais pas pourquoi)
C'est assez normal, effectivement : en décalant, on « pousse dehors » le bit de poids fort qui pouvait être 0 ou 1. Or il n'y a aucun moyen de savoir duquel il s'agissait avant décalage. Donc on ne peut pas retrouver le caractère originel (on a toujours un choix de deux caractères, un avec 0 comme bit de poids fort et l'autre avec un 1).
-- Arnaud (Supprimez les geneurs pour me répondre)
Andre Heinen
On 17 Nov 2004 13:35:12 GMT, Michael wrote:
Comment je peux faire ce "cryptage" de ma chaine de caractères?
La solution la plus simple est certainement celle de Pierre. Si, cependant, tu préfères garder l'idée de décalage, tu peux récupérer (avant décalage) le bit de poids fort, et ensuite (après décalage) le remettre à la place du bit de poids faible. Comme ça, tu pourras le restaurer. Voir les opérateurs & et |.
Tu t'exposes cependant à des problèmes de portabilité. Tout d'abord, c<<1 a un comportement indéterminé si c est signé et si son bit de poids fort est à 1: tu dois donc utiliser des unsigned char. Pour convertir tes char en unsigned char, une conversion explicite est préférable à une conversion implicite. Ensuite, lorsque tu récupéreras le bit de poids fort, pense que tu n'as pas de garantie qu'un caractère soit codé sur 8 bits. Par exemple, c&128 est une mauvaise solution. Pour connaître le nombre de bits, voir numeric_limits<char>. (Et pour rappel, rien ne sert de tester sizeof(char).)
-- Andre Heinen My address, rot13-encoded: n qbg urvara ng rhebcrnayvax qbg pbz
On 17 Nov 2004 13:35:12 GMT, Michael <michael@no.com> wrote:
Comment je peux faire ce "cryptage" de ma chaine de caractères?
La solution la plus simple est certainement celle de Pierre. Si,
cependant, tu préfères garder l'idée de décalage, tu peux
récupérer (avant décalage) le bit de poids fort, et ensuite
(après décalage) le remettre à la place du bit de poids faible.
Comme ça, tu pourras le restaurer. Voir les opérateurs & et |.
Tu t'exposes cependant à des problèmes de portabilité. Tout
d'abord, c<<1 a un comportement indéterminé si c est signé et si
son bit de poids fort est à 1: tu dois donc utiliser des unsigned
char. Pour convertir tes char en unsigned char, une conversion
explicite est préférable à une conversion implicite. Ensuite,
lorsque tu récupéreras le bit de poids fort, pense que tu n'as
pas de garantie qu'un caractère soit codé sur 8 bits. Par
exemple, c&128 est une mauvaise solution. Pour connaître le
nombre de bits, voir numeric_limits<char>. (Et pour rappel, rien
ne sert de tester sizeof(char).)
--
Andre Heinen
My address, rot13-encoded: n qbg urvara ng rhebcrnayvax qbg pbz
Comment je peux faire ce "cryptage" de ma chaine de caractères?
La solution la plus simple est certainement celle de Pierre. Si, cependant, tu préfères garder l'idée de décalage, tu peux récupérer (avant décalage) le bit de poids fort, et ensuite (après décalage) le remettre à la place du bit de poids faible. Comme ça, tu pourras le restaurer. Voir les opérateurs & et |.
Tu t'exposes cependant à des problèmes de portabilité. Tout d'abord, c<<1 a un comportement indéterminé si c est signé et si son bit de poids fort est à 1: tu dois donc utiliser des unsigned char. Pour convertir tes char en unsigned char, une conversion explicite est préférable à une conversion implicite. Ensuite, lorsque tu récupéreras le bit de poids fort, pense que tu n'as pas de garantie qu'un caractère soit codé sur 8 bits. Par exemple, c&128 est une mauvaise solution. Pour connaître le nombre de bits, voir numeric_limits<char>. (Et pour rappel, rien ne sert de tester sizeof(char).)
-- Andre Heinen My address, rot13-encoded: n qbg urvara ng rhebcrnayvax qbg pbz
Pierre Maurette
Andre Heinen a écrit:
On 17 Nov 2004 13:35:12 GMT, Michael wrote:
Comment je peux faire ce "cryptage" de ma chaine de caractères?
La solution la plus simple est certainement celle de Pierre. Si, cependant, tu préfères garder l'idée de décalage, tu peux récupérer (avant décalage) le bit de poids fort, et ensuite (après décalage) le remettre à la place du bit de poids faible. Comme ça, tu pourras le restaurer. Voir les opérateurs & et |.
Tu t'exposes cependant à des problèmes de portabilité. Tant qu'à faire dans le non portable jovial ;-) (en x86):
#define DECALAGE 3 /* bla bla*/ char c = 'A'; __asm ror c, DECALAGE /* crypte */
__asm rol c, DECALAGE /* décrypte */
Le XOR sur 1 char est vraiment trop simple (on voit les lettres doubles, par exemple). On pourrait essayer: tab[0] ^= CODE; for(i = 1; i < tailleTotale; ++i) tab[i] ^= tab[i - 1]; (même code cryptage et décryptage). -- Pierre
Andre Heinen <nospam@nospam.invalid> a écrit:
On 17 Nov 2004 13:35:12 GMT, Michael <michael@no.com> wrote:
Comment je peux faire ce "cryptage" de ma chaine de caractères?
La solution la plus simple est certainement celle de Pierre. Si,
cependant, tu préfères garder l'idée de décalage, tu peux
récupérer (avant décalage) le bit de poids fort, et ensuite
(après décalage) le remettre à la place du bit de poids faible.
Comme ça, tu pourras le restaurer. Voir les opérateurs & et |.
Tu t'exposes cependant à des problèmes de portabilité.
Tant qu'à faire dans le non portable jovial ;-) (en x86):
#define DECALAGE 3
/* bla bla*/
char c = 'A';
__asm ror c, DECALAGE /* crypte */
__asm rol c, DECALAGE /* décrypte */
Le XOR sur 1 char est vraiment trop simple (on voit les lettres
doubles, par exemple). On pourrait essayer:
tab[0] ^= CODE;
for(i = 1; i < tailleTotale; ++i) tab[i] ^= tab[i - 1];
(même code cryptage et décryptage).
--
Pierre
Comment je peux faire ce "cryptage" de ma chaine de caractères?
La solution la plus simple est certainement celle de Pierre. Si, cependant, tu préfères garder l'idée de décalage, tu peux récupérer (avant décalage) le bit de poids fort, et ensuite (après décalage) le remettre à la place du bit de poids faible. Comme ça, tu pourras le restaurer. Voir les opérateurs & et |.
Tu t'exposes cependant à des problèmes de portabilité. Tant qu'à faire dans le non portable jovial ;-) (en x86):
#define DECALAGE 3 /* bla bla*/ char c = 'A'; __asm ror c, DECALAGE /* crypte */
__asm rol c, DECALAGE /* décrypte */
Le XOR sur 1 char est vraiment trop simple (on voit les lettres doubles, par exemple). On pourrait essayer: tab[0] ^= CODE; for(i = 1; i < tailleTotale; ++i) tab[i] ^= tab[i - 1]; (même code cryptage et décryptage). -- Pierre
Fabien LE LEZ
On 17 Nov 2004 13:35:12 GMT, Michael :
je voudrais écrire une chaine de caractères dans un fichier texte, mais sans que l'on puisse voir ce qui a été écrit dedans avec le bloc notes par exemple...
Un petit cryptage DES serait peut-être pas mal : efficace (tant que la clé reste secrète bien sûr), facile à implémenter, et rapide.
-- ;-)
On 17 Nov 2004 13:35:12 GMT, Michael <michael@no.com>:
je voudrais écrire une chaine de caractères dans un fichier texte, mais
sans que l'on puisse voir ce qui a été écrit dedans avec le bloc notes
par exemple...
Un petit cryptage DES serait peut-être pas mal : efficace (tant que la
clé reste secrète bien sûr), facile à implémenter, et rapide.
je voudrais écrire une chaine de caractères dans un fichier texte, mais sans que l'on puisse voir ce qui a été écrit dedans avec le bloc notes par exemple...
Un petit cryptage DES serait peut-être pas mal : efficace (tant que la clé reste secrète bien sûr), facile à implémenter, et rapide.
-- ;-)
Michael
Un petit cryptage DES serait peut-être pas mal : efficace (tant que la clé reste secrète bien sûr), facile à implémenter, et rapide.
Tu n'aurais pas un exemple de code de cryptage DES?
Je ne trouve rien sur le net pour le moment...
Un petit cryptage DES serait peut-être pas mal : efficace (tant que la
clé reste secrète bien sûr), facile à implémenter, et rapide.
Tu n'aurais pas un exemple de code de cryptage DES?
Tu n'aurais pas un exemple de code de cryptage DES?
<http://perso.edulang.com/cryptage_des.zip> Contenu non garanti. Note : il me semble que DES n'offre qu'une sécurité assez moyenne, un peu comme MD5. Mais j'imagine que tu n'en demandes pas plus.
-- ;-)
On 17 Nov 2004 20:38:11 GMT, Michael <michael@no.com>:
Tu n'aurais pas un exemple de code de cryptage DES?
<http://perso.edulang.com/cryptage_des.zip>
Contenu non garanti.
Note : il me semble que DES n'offre qu'une sécurité assez moyenne, un
peu comme MD5. Mais j'imagine que tu n'en demandes pas plus.
Tu n'aurais pas un exemple de code de cryptage DES?
<http://perso.edulang.com/cryptage_des.zip> Contenu non garanti. Note : il me semble que DES n'offre qu'une sécurité assez moyenne, un peu comme MD5. Mais j'imagine que tu n'en demandes pas plus.
-- ;-)
kanze
Michael wrote in message news:<419b5390$0$6413$...
je voudrais écrire une chaine de caractères dans un fichier texte, mais sans que l'on puisse voir ce qui a été écrit dedans avec le bloc notes par exemple...
L'idée que j'ai eu est la suivante:
opérer un décalage sur les caractères qu'on veut mettre dans le fichier texte:
ofstream fileout; char c;
fileout.open(nom_out,ios::out | ios::binary);
while (//... { c << 1; fileout << c; }
fileout.close();
Et là effectivement je n'ai plus des caractères dans le fichier mais une succession de chiffres...
Seulement lorsque je veux lire ce qui est écrit dans le fichier, le décalage dans l'autre sens ne fonctionne pas (j'imagine que c'est normal, mais je ne sais pas pourquoi)
Comment je peux faire ce "cryptage" de ma chaine de caractères?
Sans savoir le but véritable, c'est quasiment impossible à suggérer une bonne solution. Si le but, c'est seulement d'empécher une lecture accidentelle (un « spoiler », ou du texte qui risque d'offenser), rot13 est sans doute ce qu'il y a de plus facile. Si on veut un peu de sécurité, mais qu'on n'est pas géner par le fait que n'importe qui, avec un peu d'effort, pourrait décrypter, un xor sur la chaîne est ce qu'il y a du plus simple : si on tient à ce que le résultat soit aussi des « caractères », on peut y ajouter quelque chose comme base64 ou uuencode sur le résultat, et pour un peu plus de sécurité, on peut faire varier le valeur qui sert dans l'xor. (Initialise un générateur connu de nombres aléatoire, puis se sert d'une nouvelle valeur chaque fois, par exemple.)
Au délà, il y a des solutions plus compliquées, avec DES ou PGP, mais même dans ces cas, il ne faut pas oublier la possibilité de simplement désassembler ton code pour y trouver la clé. Si tu n'es pas protégé contre cette possibilité, ce n'est pas la peine d'être trop compliqué.
-- James Kanze GABI Software http://www.gabi-soft.fr Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Michael <michael@no.com> wrote in message
news:<419b5390$0$6413$626a14ce@news.free.fr>...
je voudrais écrire une chaine de caractères dans un fichier texte,
mais sans que l'on puisse voir ce qui a été écrit dedans avec le bloc
notes par exemple...
L'idée que j'ai eu est la suivante:
opérer un décalage sur les caractères qu'on veut mettre dans le
fichier texte:
ofstream fileout;
char c;
fileout.open(nom_out,ios::out | ios::binary);
while (//...
{
c << 1;
fileout << c;
}
fileout.close();
Et là effectivement je n'ai plus des caractères dans le fichier mais
une succession de chiffres...
Seulement lorsque je veux lire ce qui est écrit dans le fichier, le
décalage dans l'autre sens ne fonctionne pas (j'imagine que c'est
normal, mais je ne sais pas pourquoi)
Comment je peux faire ce "cryptage" de ma chaine de caractères?
Sans savoir le but véritable, c'est quasiment impossible à suggérer une
bonne solution. Si le but, c'est seulement d'empécher une lecture
accidentelle (un « spoiler », ou du texte qui risque d'offenser), rot13
est sans doute ce qu'il y a de plus facile. Si on veut un peu de
sécurité, mais qu'on n'est pas géner par le fait que n'importe qui, avec
un peu d'effort, pourrait décrypter, un xor sur la chaîne est ce qu'il y
a du plus simple : si on tient à ce que le résultat soit aussi des
« caractères », on peut y ajouter quelque chose comme base64 ou uuencode
sur le résultat, et pour un peu plus de sécurité, on peut faire varier
le valeur qui sert dans l'xor. (Initialise un générateur connu de
nombres aléatoire, puis se sert d'une nouvelle valeur chaque fois, par
exemple.)
Au délà, il y a des solutions plus compliquées, avec DES ou PGP, mais
même dans ces cas, il ne faut pas oublier la possibilité de simplement
désassembler ton code pour y trouver la clé. Si tu n'es pas protégé
contre cette possibilité, ce n'est pas la peine d'être trop compliqué.
--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Michael wrote in message news:<419b5390$0$6413$...
je voudrais écrire une chaine de caractères dans un fichier texte, mais sans que l'on puisse voir ce qui a été écrit dedans avec le bloc notes par exemple...
L'idée que j'ai eu est la suivante:
opérer un décalage sur les caractères qu'on veut mettre dans le fichier texte:
ofstream fileout; char c;
fileout.open(nom_out,ios::out | ios::binary);
while (//... { c << 1; fileout << c; }
fileout.close();
Et là effectivement je n'ai plus des caractères dans le fichier mais une succession de chiffres...
Seulement lorsque je veux lire ce qui est écrit dans le fichier, le décalage dans l'autre sens ne fonctionne pas (j'imagine que c'est normal, mais je ne sais pas pourquoi)
Comment je peux faire ce "cryptage" de ma chaine de caractères?
Sans savoir le but véritable, c'est quasiment impossible à suggérer une bonne solution. Si le but, c'est seulement d'empécher une lecture accidentelle (un « spoiler », ou du texte qui risque d'offenser), rot13 est sans doute ce qu'il y a de plus facile. Si on veut un peu de sécurité, mais qu'on n'est pas géner par le fait que n'importe qui, avec un peu d'effort, pourrait décrypter, un xor sur la chaîne est ce qu'il y a du plus simple : si on tient à ce que le résultat soit aussi des « caractères », on peut y ajouter quelque chose comme base64 ou uuencode sur le résultat, et pour un peu plus de sécurité, on peut faire varier le valeur qui sert dans l'xor. (Initialise un générateur connu de nombres aléatoire, puis se sert d'une nouvelle valeur chaque fois, par exemple.)
Au délà, il y a des solutions plus compliquées, avec DES ou PGP, mais même dans ces cas, il ne faut pas oublier la possibilité de simplement désassembler ton code pour y trouver la clé. Si tu n'es pas protégé contre cette possibilité, ce n'est pas la peine d'être trop compliqué.
-- James Kanze GABI Software http://www.gabi-soft.fr Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34