Utiliser le code ascii en delphi [Résolu]

codepvc 24 Messages postés mercredi 29 octobre 2008Date d'inscription 13 juillet 2011 Dernière intervention - 29 oct. 2008 à 10:11 - Dernière réponse : codepvc 24 Messages postés mercredi 29 octobre 2008Date d'inscription 13 juillet 2011 Dernière intervention
- 30 oct. 2008 à 13:31
Salut à toutes et à tous,
j'ai un problème et je souhaite que vous pouvez m'aider
comment utiliser le tableau du code ascii en Delphi pour chiffrer un message


C’est-à-dire tapez un texte dans un composant Memo et afficher le texte chiffré utilisant le code Ascii dans un autre Memo,


Merci d’avance.   
Afficher la suite 

11 réponses

Répondre au sujet
Bacterius 3869 Messages postés samedi 22 décembre 2007Date d'inscription 3 juin 2016 Dernière intervention - 30 oct. 2008 à 11:00
+3
Utile
Caractère => ASCII => Binaire

Ben, ç'est pas très difficile alors ... suffit de trouver une fonction DecToBin, y'en a pas mal sur le site je crois ...

Regarde :

function DecToBin(Val: Word): String;
var
i:integer;
reste:array[1..16]of integer;
begin
for i:=1 to 16 do
reste[i]:=0;
i:=1;
while Val <> 0 do
begin
reste[i]:=Val mod 2;//le reste de la div(0 ou 1)
Val := Val div 2;//le nombre résulant de la div par 2 (128/2=64)
inc(i);//permet le passage à l'indice suivant du tableau RESTE
end;
for i:=16 downto 1 do
Result:=Result+inttostr(Reste[i]);
end;
end.


procedure AsciiToBinProcess(Input, Output: TStrings);
Var
I: Integer;
begin
Output.Clear;
for I := 1 to Length(Input.Text) do
Output.Text := Output.Text + DecToBin(ord(Input.Text[I]));
end;

Voilà !

Ah il te le fait en 16 bit ... (0-65536)
Si tu veux en 8 bit (peut-être plus convenable pour l'ASCII), tu changes l'étendue du tableau de valeurs Reste à 8, et tu changes les amplitudes des boucles à 8 au lieu de 16. Voilà !

(fonction DecToBin empruntée à MatSky - http://www.delphifr.com/codes/DECIMAL-VERS-BINAIRE_11875.aspx - , légèrement remodelée pour être convenable ici ^^

Et pour le décryptage c'est ENCORE PLUS SIMPLE !
Tu fais une boucle qui chope tous les 8 (ou 16, ça dépend du nombre de bits avec lesquels tu convertis en binaire) caractères du mémo binaire, et tu convertis cette valeur binaire en décimal. Crois-moi, c'est plus facile, j'en avais fais une mais je l'ai perdue ... ^^' mais il y en a sur le site.

Bonne chance ;)

Cordialement, Bacterius !
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Bacterius
Bacterius 3869 Messages postés samedi 22 décembre 2007Date d'inscription 3 juin 2016 Dernière intervention - 29 oct. 2008 à 16:55
0
Utile
Petit coucou rapide le temps de répondre à ce message.

ord(char) te donne le code ascii de ce caractère (exemple : ord('A') donne 65, et ord('a') te donnera 97 ...).
Voici un site avec un tableau ascii (oui les anglais partagent le même alphabet que nous :p ), je m'en sers souvent : www.asciitable.com

Voilà, le reste devrait vite se faire ... une petite boucle sur chaque caractère du mémo ...

Allez tiens :

procedure AsciiProcess(Input, Output: TStrings);
Var
I: Integer;
begin
Output.Clear;
for I := 0 to Length(Input.Text) do
Output.Text := Output.Text + IntToStr(ord(Input.Text[I]));
end;

Voilà ... en prime il te chiffrera avec un 0 devant ...
Je te laisse voir pour le déchiffrage.

Pour appeller : AsciiProcess(MonMemo1.Lines, MonMemo2.Lines);

Et voilà !!

Cordialement, Bacterius !
Commenter la réponse de Bacterius
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 29 oct. 2008 à 17:15
0
Utile
bonsoir,

tu as testé ?
ça plante sur :
IntToStr(ord(Input.Text[I]))

cantador
Commenter la réponse de cs_cantador
Bacterius 3869 Messages postés samedi 22 décembre 2007Date d'inscription 3 juin 2016 Dernière intervention - 29 oct. 2008 à 18:29
0
Utile
Oui j'ai testé et ça n'a pas planté ... en revanche ça a mis un 0 devant chaque code ascii ...
Mais je pense que c'est dû à la tentative d'accès à une variable objet ... il faudrait passer Input et Output en variable abstraite ... :

procedure AsciiProcess(Input, Output: TStrings);
Var
I: Integer;
InEx, OutEx: TStringList;
begin
InEx := TStringList.Create;
OutEx := TStringList.Create;
InEx.Text := Input.Text;
for I := 0 to Length(InEx.Text) do
OutEx.Text := OutEx.Text + IntToStr(ord(InEx.Text[I]));
Output.Text := OutEx.Text;
OutEx.Free;
InEx.Free;
end;

(Mais j'ai pas testé celle-là)

Cordialement, Bacterius !
Commenter la réponse de Bacterius
Bacterius 3869 Messages postés samedi 22 décembre 2007Date d'inscription 3 juin 2016 Dernière intervention - 29 oct. 2008 à 18:33
0
Utile
En fait non ... élément 0 inaccessible ...
Donc :

procedure AsciiProcess(Input, Output: TStrings);
Var
I: Integer;
begin
Output.Clear;
for I := 1 to Length(Input.Text) do
Output.Text := Output.Text + IntToStr(ord(Input.Text[I]));
end;

Voilà ! (petite erreur d'inattention ^^)

Cordialement, Bacterius !
Commenter la réponse de Bacterius
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 29 oct. 2008 à 19:14
0
Utile
ça marche ! incroyable !

cantador
Commenter la réponse de cs_cantador
codepvc 24 Messages postés mercredi 29 octobre 2008Date d'inscription 13 juillet 2011 Dernière intervention - 30 oct. 2008 à 07:29
0
Utile
Merci de me répondre mais peut être que j'ai pas précisé mon question, je veut utilisé le code Ascii pour trouver le message en binaire
donc comment aller du code Ascii au binaire
Merci encore une deuxième fois Bacterius et cantador
Commenter la réponse de codepvc
codepvc 24 Messages postés mercredi 29 octobre 2008Date d'inscription 13 juillet 2011 Dernière intervention - 30 oct. 2008 à 12:27
0
Utile
Bonjour
Merci Bacterius, c'est vraiment la bonne réponce, Merci de m'aider 
Commenter la réponse de codepvc
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 30 oct. 2008 à 12:38
0
Utile
si c'est pour faire un cryptage...
la protection n'est pas du tout efficace..

cantador
Commenter la réponse de cs_cantador
Bacterius 3869 Messages postés samedi 22 décembre 2007Date d'inscription 3 juin 2016 Dernière intervention - 30 oct. 2008 à 12:52
0
Utile
C'est sûr ... ^^ Il faudrait endurcir le cryptage !

Cordialement, Bacterius !
Commenter la réponse de Bacterius
codepvc 24 Messages postés mercredi 29 octobre 2008Date d'inscription 13 juillet 2011 Dernière intervention - 30 oct. 2008 à 13:31
0
Utile
je sais, mais c'est une partie seulement non pas le cryptosystème lui même
Commenter la réponse de codepvc

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.