7
votes

Cryptez simplement une chaîne en C

J'essaie de crypter une chaîne de requête sur un jeu que je fais lors de l'ouverture d'une URL. Cela ne doit pas nécessairement être compliqué, car je travaille depuis un moteur de jeu, il doit être aussi simple que possible. Il a tendance à prélever si je reçois un niveau trop bas.

J'ai déjà créé la chaîne de requête, j'ai juste besoin de prendre chaque char de lui et de soustraire 15 de la Char pour le crypter légèrement. Je veux juste faire un cryptage simple qui dissuadera la plupart des utilisateurs.

J'aimerais pouvoir donner un exemple de code, mais je ne suis pas trop expérimenté en C, et je ne suis même pas sûr de partir où commencer. L'API du moteur de jeu rend généralement tout simple pour moi.


2 commentaires

Xor chaque octet avec une valeur arbitraire pour crypter, faites la même chose déchiffrer


Par souci d'âmes pauvres qui visiteront cette question à la recherche d'un moyen simple de chiffrer une chaîne et d'essayer de copier et collez du code des réponses au hasard, je parlerai cela à voix haute. Le codage n'est pas un cryptage. L'obscurité n'est pas du cryptage. Certaines des réponses de cette question ne sont pas du tout cryptage. Attention s'il vous plaît.


7 Réponses :


5
votes

Vous pouvez le faire avec une fonction très simple:

void encrypt(char *s)
{
    int i, l = strlen(s);
    for(i = 0; i < l; i++)
        s[i] -= 15;
}


0 commentaires

6
votes
void doTerribleEncryptionMethod(char * arr, int arrSize)
{
    int i;
    for(i = 0; i < arrSize; i++)
    {
      arr[i] -= 15;
    }
}
Notice the function name. What you want to do is silly, and pretty worthless.

5 commentaires

C'est juste pour un tableau de bord en ligne. Une fois que le score est reçu via la chaîne de requête, il en avant presque instantanément. La chaîne de requête n'est vue que pendant moins d'une seconde. Je voulais juste dissuader l'utilisateur moyen qui veut ajouter un faux score ou quelque chose. C'est terrible mais il convient au travail que je pense


Peu importe combien de secondes la chaîne est vue. Peu importe que 99% des gens ne l'obtiennent pas. Il ne faut que 1 utilisateur pour bousiller votre tableau de bord, n'est-ce pas?


Faites ce que vous voulez. Je suis heureux d'aider et vous avez été prévenu. Continuer.


Dûment noté, je peux toujours l'améliorer plus tard. Le jeu n'est que la qualité alpha en ce moment et surtout que je veux juste que quelque chose puisse obtenir le code du tableau de bord. Quelle est la puissance de la méthode XOR?


Pas excessivement sécurisé, mais sans toutefois mieux que rotatif de 15. Assurez-vous simplement de XOR tous les caractères avec un numéro différent ou une rotation simple.



9
votes

Votre "cryptage" ne trompe personne.

Il existe de bonnes implémentations d'algorithmes de cryptage bien connus et sécurisés disponibles en ligne. P>

Par exemple: Twofish P>

EDIT: STRY> P>

Exemple de mise en œuvre de XOR : P>

void encrypt(char *array, int array_size)
{
    int i;
    char secret[8] = { 22, 53, 44, 71, 66, 177, 253, 122 };
    for(i = 0; i < array_size; i++)
        array[i] ^= secret[i];
}


0 commentaires

-2
votes

Vous pouvez utiliser une variante de base64 avec un alphabet personnalisé ou juste un alphabet mélangé. Ce n'est pas vraiment sécurisé, mais dans votre cas, c'est probablement suffisant. L'algorithme est largement utilisé, il vous sera donc facile de trouver une implémentation dans laquelle vous pouvez fournir un alphabet personnalisé.

Le point bonus est que tout ce que vous mettez dans la chaîne de requête, la forme codée consistera en caractères URL valides, si vous choisissez l'alphabet de manière appropriée.


3 commentaires

J'ai fait beaucoup de recherches et je pense que vous avez raison. J'ai quelque chose d'aller mais alors certaines choses ont baisé l'URL. Existe-t-il des ressources avec certaines fonctions simplistes C base64?


Google.com/search?q=base64+Implementalation+c . Les implémentations que j'ai vues sont assez simples à comprendre.


Le problème avec l'obfuscation-masquerading-as-cryptage est qu'il donne un faux sentiment de sécurité. Un jour, quelqu'un s'appuiera sur cet être «sécurisé» et dirigera quelque chose d'important sur celui-ci.



18
votes

Aucune de ces réponses ne constitue vraiment une forme de cryptage raisonnable.

Ce que vous voulez réellement faire, utilise une forme d'un cryptage authentifié et une forme d'algorithme de dérivation de clé sécurisée. Ma recommandation personnelle est libsodium . Il fournit de très bonnes valeurs par défaut et une API relativement difficile de se tromper. P>

Il y a plusieurs façons différentes de faire ceci: p>

  1. Cryptage de clé secrète avec une clé aléatoire cryptage authentifié li>
  2. Cryptage de clé secrète avec une clé dérivée d'une phrase secrète Dérivation de clé li>
  3. cryptage hybride avec un accord clé. Cryptage de clé publique Li> OL>

    Toutes ces possibilités sont intégrées à la libsodium et mises en œuvre avec une facilité relative. p>

    Les exemples de code suivants sont pris directement à partir du Documentation de Libsodium . P>

    pour 1: P>

    #define MESSAGE (const unsigned char *) "test"
    #define MESSAGE_LEN 4
    #define CIPHERTEXT_LEN (crypto_box_MACBYTES + MESSAGE_LEN)
    
    unsigned char alice_publickey[crypto_box_PUBLICKEYBYTES];
    unsigned char alice_secretkey[crypto_box_SECRETKEYBYTES];
    crypto_box_keypair(alice_publickey, alice_secretkey);
    
    unsigned char bob_publickey[crypto_box_PUBLICKEYBYTES];
    unsigned char bob_secretkey[crypto_box_SECRETKEYBYTES];
    crypto_box_keypair(bob_publickey, bob_secretkey);
    
    unsigned char nonce[crypto_box_NONCEBYTES];
    unsigned char ciphertext[CIPHERTEXT_LEN];
    randombytes_buf(nonce, sizeof nonce);
    if (crypto_box_easy(ciphertext, MESSAGE, MESSAGE_LEN, nonce,
                        bob_publickey, alice_secretkey) != 0) {
        /* error */
    }
    
    unsigned char decrypted[MESSAGE_LEN];
    if (crypto_box_open_easy(decrypted, ciphertext, CIPHERTEXT_LEN, nonce,
                             alice_publickey, bob_secretkey) != 0) {
        /* message for Bob pretending to be from Alice has been forged! */
    }
    


0 commentaires

1
votes

Sonofra a déjà proposé la bonne réponse .

Mais si vous avez l'intention d'utiliser quelque chose de terrible pour obscur une chaîne sans crypter it, la bibliothèque GNU C fournit un MEMFROB (3) déjà écrit et facilement réversible.


0 commentaires

0
votes

Si vous voulez, vous pouvez simplement Xor les octets
en itérant à travers le tableau et en utilisant ^ = = Cela déchiffre et chiffre

#include <string.h>
char* xorit(char* str, int key){ // any number for key except 
  for(int i=0; i<strlen(str);i++){
      str[i] ^= key; 
  }
  return str;
}


0 commentaires