GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Showroom SA:MP => Discussion démarrée par: Ssk le 20 Novembre 2009, 17:30:23
-
Salut tout le monde je vous donne aujourd' hui le code qui va revolutionner le Pawn ( arg j ai oublier la negation ^^ )
une fonctionne qui crypte en Rot un proceder tres simple
Seulement parmet de changer une lettre par la lettre qui est x fois plus que elle lol ( mal expliquer mais voila )
Par exemple
x notre lettre on fait
x vaut la lettre a
rot vaut 13
donc
x + rot = la lettre n ^^
allez on s en fou des explication
forward Crypter(Texte[],Rot);
public Crypter(Texte[],Rot)
{
new i = 0;
Rot %= 26; // yeah sim ^^
while(Texte[i] != '\0')
{
if(Texte[i] >= 'a' && Texte[i] <= 'z')
{
if(Texte[i] + Rot > 'z')
{
Texte[i] += (Rot - 26);
}
else if(Texte[i] + Rot < 'a')
{
Texte[i] += (Rot + 26);
}
else
{
Texte[i] += Rot;
}
}
else if(Texte[i] >= 'A' && Texte[i] <= 'Z')
{
if(Texte[i] + Rot > 'Z')
{
Texte[i] += (Rot - 26);
}
else if(Texte[i] + Rot < 'A')
{
Texte[i] += (Rot + 26);
}
else
{
Texte[i] += Rot;
}
}
i++;
}
}
Pour crypter par exemple sim en ROT 13 faites
new str[10] = "sim";
Crypter(str,13);
a la fin
vous aurez
fvz a la place de sim cool non ?
en plus c' est facilement decryptable ( donc inutile lol )
pour decrypter vous avez juste a mettez l inverse du rot que vous avez mis au depart ^^
PS: SURTOUT NE JAMAIS METTRE UN ROT DE 0 OU DE 26 SINON (essayez pour voir ^^)
PS2: ceci n' est pas une vrai fonction coder pour crypter c etait juste un excercice que moi et sim avont fait en C lol puis j ai transpose le code en pawn ^^
Si vous voulez le code en C le voila
void Crypter(char Texte[],int Rot)
{
int i = 0;
Rot %= 26;
while(Texte[i] != '\0')
{
if(Texte[i] >= 'a' && Texte[i] <= 'z')
{
if(Texte[i] + Rot > 'z')
{
Texte[i] += (Rot - 26);
}
else if(Texte[i] + Rot < 'a')
{
Texte[i] += (Rot + 26);
}
else
{
Texte[i] += Rot;
}
}
else if(Texte[i] >= 'A' && Texte[i] <= 'Z')
{
if(Texte[i] + Rot > 'Z')
{
Texte[i] += (Rot - 26);
}
else if(Texte[i] + Rot < 'A')
{
Texte[i] += (Rot + 26);
}
else
{
Texte[i] += Rot;
}
}
i++;
}
}
mise en page pourrit je sais ^^
Merci a SIM ^^ qui ma dit de mettre Rot %= 26; xD
-
beau boulot
-
GG
Cela peux servir au cryptage des mots de passe ? (( Si c'est pas sa, j'ai mal compris ))
++
FS'
-
c'est un delire il me semble en gros rien capter :lmfao
-
Salut,
c'est une fonction qui sert à crypter un texte, peut importe lequel, comme vous pouvez le deviner, cette technique n'est pas la plus sécuritaire mais c rapide et simple
ps. on a tester et ca fonction très bien^^
++Sim++
-
GG
Cela peux servir au cryptage des mots de passe ? (( Si c'est pas sa, j'ai mal compris ))
++
FS'
Vu que ça peut être facilement décrypté, je le déconseille. Si tu veux bien protéger tes mots de passe (mais vraiment bien de chez bien X)), tu peux utiliser un hash haut niveau (512bits), utilise le plugin Whirlpool de Y_Less. Sinon y a le MD5 ou le SHA1 qui sont plus court =)
++
R@f
-
Utilise pas pour le cryptage de Mdp lol
c' etait juste un délire mdr ^^
-
Utilise pas pour le cryptage de Mdp lol
c' etait juste un délire mdr ^^
Comme si j'allais le faire
Rooh, et moi qui allait te faire confiance !
++
FS'
-
Juste le titre fait comprendre que c' est une joke ^^
Le rot [lol] j' aurais pu mettre ROT mais rot c' est plus fun et le tag Lol ^^
-
Voici la version abrégée du bout de script de sazuke :
Crypter2 (Texte[],Rot)
{
new i = 0;
Rot %= 26;
while(Texte[i] != '\0')
{
if(Texte[i] >= 'a' && Texte[i] <= 'z')
{
Texte[i] = (((Texte[i]+Rot)-'a')%26)+'a';
}
else if(Texte[i] >= 'A' && Texte[i] <= 'Z')
{
Texte[i] = (((Texte[i]+Rot)-'A')%26)+'A';
}
i++;
}
}
Sinon, voici les fonctions de cryptage/décryptage que j'ai écrite pour Lalu's Stunt (avec une clef de 2040 bits que je ne donne pas ici bien évidement) :
new Cle[255+1]="<ICI IL FAUT METTRE 255 CARACTERES CHOISIS AU HASARD PAR EXEMPLE fHçè_y'ébJsdf....>";
/************************************
* FONCTION DE CRYPTAGE D'UNE CHAINE *
************************************/
CrypterChaine (Chaine[])
{
new Index;
new IndexCar;
new IndexCle;
new Car;
while (Chaine[Index] >= ' ')
{
IndexCar=Chaine[Index]-' ';
IndexCle=Cle[Index%256]-' ';
Car = (IndexCar+IndexCle)%95;
Chaine[Index] = Car+' ';
Index++;
}
}
/**************************************
* FONCTION DE DECRYPTAGE D'UNE CHAINE *
**************************************/
DecrypterChaine (Chaine[])
{
new Index;
new IndexCar;
new IndexCle;
new Car;
while (Chaine[Index] >=' ')
{
IndexCar=Chaine[Index]-' ';
IndexCle=Cle[Index%256]-' ';
Car = (IndexCar+95-IndexCle)%95;
Chaine[Index] = Car+' ';
Index++;
}
}
L'avantage de ces fonctions est qu'elles cryptent en donnant une chaîne de caractères qui ne contient que des caractères imprimables donc facilement stockable dans un fichier texte.
Elles fonctionnent un peu sur le même principe que la fonction de sazuke mais le décalage (rot) est donné par un des caractères de la clé et le rebouclage se fait les caractère imprimables (entre l'espace (32) et le caractère de code ASCII 127). D'ailleurs on remarquera que 127-32=95 ....
Ces fonctions ne doivent donc pas être utilisées pour crypter/décrypter des caractères accentués.
Sinon, le hashage (MD5) n'est pas réversible, il n'est pas possible de retrouver la chaîne originale avec un hash MD5. Il ne peut donc pas être utilisé si on a besoin de décrypter.
++
Syg
-
OMG j' avoue le nombre de lignes a considerablement baisser lol
-
OMG j' avoue le nombre de lignes a considerablement baisser lol
Oui mais le code est devenu compliqué à comprendre (même si il fait exactement la même chose que le tien).
D'ailleurs, comme le modulo est fait dans le calcul du caractère crypté, on peut même supprimer la ligne
Rot %= 26;
++
Syg
-
J' ai tester tes deux fonction de crypting decrypting seul celle du Crypting fonctionne ^^
Mais ca a l air bon ^^
Pour
Sasuke78200
voila le resultat ^^
gCgkWKNPD@@
Et Syg ^^
gsO
-
Si tu passes la chaîne cryptée à la fonction de décryptage, tu retrouve la chaîne de départ.
Bien évidement, la clé de cryptage et de décryptage doit être la même.
D'ailleurs, je vois que ta clé est mauvaise car une même lettre ne devrait pas être codée de la même façon :
Sasuke78200
gCgkWKNPD@@
++
Syg
-
gCg
=
sas
C' est pareil ici aussi ^^
-
Non, ce n'est pas pareil, il y a un S et un s (majuscule, minuscule), ce n'est pas le même caractère.
Je suis peut-être vieux mais tu ne m'auras pas comme ça :)
++
Syg
-
Ouaip ta raison ^^
j ai fait une erreur sur le forum au lieu de mettre
sasuke78200
j ai mis
Sasuke78200 ^^
Tu peut toujours essayez ca donnera ca ^^
-
Par contre, il ne faut pas que la clef contienne de caractères accentués car ils ne sont pas gérés par mes fonctions (il faudrait les modifier pour qu'ils soient pris en compte).
Voici un script avec une clef qui fonctionne :
#include <a_samp>
new Cle[255+1]="jfierijIOjfrzpijJIPGJPRI02HFsodfhp4hofh8802novcbopuihbdfPOUHJBDSOGUIH24808HFHJE89FJE93JN5043Nsdfg56s5gs6g4wfb6qeg8wIhgpizrelnfpiGZRrets5654fgGDS6548sergRGRZH34sfh6sf2h4RSFHZRjfierijIOjfrzpijJIPGJPRI02HFsodfhp4hofh8802novcbopuihbdfPOUHJBDSOGUIH24808HFHJE8";
CrypterChaine (Chaine[])
{
new Index;
new IndexCar;
new IndexCle;
new Car;
while (Chaine[Index] >= ' ')
{
IndexCar=Chaine[Index]-' ';
IndexCle=Cle[Index%256]-' ';
Car = (IndexCar+IndexCle)%95;
Chaine[Index] = Car+' ';
Index++;
}
}
DecrypterChaine (Chaine[])
{
new Index;
new IndexCar;
new IndexCle;
new Car;
while (Chaine[Index] >=' ')
{
IndexCar=Chaine[Index]-' ';
IndexCle=Cle[Index%256]-' ';
Car = (IndexCar+95-IndexCle)%95;
Chaine[Index] = Car+' ';
Index++;
}
}
main ()
{
new Texte[128] = "sasuke28700";
printf ("Chaine originale : <%s>", Texte);
CrypterChaine (Texte);
printf ("Chaine cryptee : <%s>", Texte);
DecrypterChaine (Texte);
printf ("Chaine decryptee : <%s>", Texte);
}
public OnGameModeInit ()
{
return 1;
}
Et voici le résultat de ce mode :
[16:43:18] Chaine originale : <sasuke78200>
[16:43:18] Chaine cryptee : <^H][^O"aazv>
[16:43:18] Chaine decryptee : <sasuke78200>
++
Syg
-
Ah mdr je n' utiliser pas le code de la bonne facon ^^
Quel gros noob je suis
#include <a_samp>
new Cle[255+1]="sasuke78200";
main()
{
}
public OnGameModeInit()
{
CrypterChaine (Cle);
printf("%s",Cle);
}
/************************************
* FONCTION DE CRYPTAGE D'UNE CHAINE *
************************************/
CrypterChaine (Chaine[])
{
new Index;
new IndexCar;
new IndexCle;
new Car;
while (Chaine[Index] >= ' ')
{
IndexCar=Chaine[Index]-' ';
IndexCle=Cle[Index%256]-' ';
Car = (IndexCar+IndexCle)%95;
Chaine[Index] = Car+' ';
Index++;
}
}
/**************************************
* FONCTION DE DECRYPTAGE D'UNE CHAINE *
**************************************/
DecrypterChaine (Chaine[])
{
new Index;
new IndexCar;
new IndexCle;
new Car;
while (Chaine[Index] >=' ')
{
IndexCar=Chaine[Index]-' ';
IndexCle=Cle[Index%256]-' ';
Car = (IndexCar+95-IndexCle)%95;
Chaine[Index] = Car+' ';
Index++;
}
}
Voila mon code ^^
et le resultat
gCgkWKNPD@@
-
D'un autre côté, ça peut être drôle de crypté une chaîne avec la chaîne elle-même comme propre clef.
Le problème c'est pour le décryptage .... il faut connaître le clef.
++
Syg