On m'a demandé d'implémenter l'algorithme de chiffrement suivant. Le cryptage est un peu vague mais au moins ça a un peu de sens mais je n'ai aucune idée du fonctionnement du décryptage! Comme il est dit, pour le décryptage, la substitution inverse devrait avoir lieu. Comme vous pouvez le voir dans cet exemple 'chou', Comment savoir que b
a répété deux fois ou a
s'est déjà produit! Peut-être y a-t-il un indice que je ne peux pas le voir ou que je me trompe quelque part.
J'ai pris l'image de l'exigence afin que je puisse aussi vous montrer la table. Appréciez toute explication ou algorithme.Comment fonctionne cet algorithme de chiffrement?
Répondre
Vous êtes chargé avec un chiffrement par substitution simple. Pour chiffrer un texte, recherchez tous les caractères de la première ligne et remplacez-les par le caractère de la deuxième ligne, de sorte que a-> c, b-> a, c-> b, etc. Pour déchiffrer un texte, recherchez tous les caractères du deuxième ligne et remplacez-le par le caractère de la première ligne, donc a-> b, b-> c, c-> a, etc. Comme devnull a souligné la commande à rechercher est tr
. L'exemple dans vos devoirs (?) Peut être réalisé par
tr abcdefghijklmnopqrstuvwxyz cabgedfhijklmnopqrstuvwxyz # encryption
tr cabgedfhijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz # decryption
Pour construire la table dont vous avez besoin pour calculer la deuxième ligne (la première est toujours un z). Pour autant que j'interprète la tâche, vous démarrez le mot-clé et supprimez chaque occurrence d'un caractère mais le premier, donc abcadc
devient abcd
et rlxxdllllq
devient rlxdq
. Ces caractères construisent le début de la deuxième ligne de votre table. Vous remplissez maintenant avec les caractères restants de l'alphabet dans l'ordre alphabétique. Vous pouvez donc obtenir le deuxième mot pour tr
en concaténant le mot-clé singularisé avec le résultat des caractères de mot-clé singularisés retirés de abcd
... xyz
. Comme tr
a également une fonctionnalité de suppression, cela devrait être simple.
Cela ressemble à des devoirs si je viens d'ajouter quelques conseils comment ça marche pas de code complet réel ...
1.substitution
- premier mot-clé converti pour être de lettres distinctes que
supprimer toutes les lettres qui a été utilisé avant (2 boucles imbriquées) fera
cabbage -> cabge // b,a removed
pas w faire la table de substitution de l'alphabet
abcdefghijklmnopqrstuvwxyz // plain text alphabet(input unencrypted alphabet) ------------------------- cabge // keyword ---d-f-hijklmnopqrstuvwxyz // unused letters dfhijklmnopqrstuvwxyz // unused letters merged together ------------------------- cabgedfhijklmnopqrstuvwxyz // output text alphabet (output encrypted alphabet)
2.encryption
- lire tout texte et convertir une lettre de l'alphabet non crypté crypté
quelque chose comme ceci:
char enc[]="cabgedfhijklmnopqrstuvwxyz"; char in,out; // loop for input text reading to in out=enc[int(in-'a')]; // and writing back out
3.décryptage
créer le déchiffrement de table alphabet
abcdefghijklmnopqrstuvwxyz // plain text alphabet cabgedfhijklmnopqrstuvwxyz // enc table // now find the letter for decryption in enc and write the plain text value at the same position // a->b, b->c, c->a ... z->z also 2 nested loops will do it abcdefghijklmnopqrstuvwxyz // plain text alphabet bcafegdhijklmnopqrstuvwxyz // dec table
decrypt maintenant de la même manière que Crypter utiliser juste la table décembre au lieu de enc
char dec[]="bcafegdhijklmnopqrstuvwxyz"; char in,out; // loop for input text reading to in out=dec[int(in-'a')]; // and writing back out
[Notes]
- N'oubliez pas d'ajouter si vous voulez gérer des lettres autres que 'a' - 'z'
Je pense que l'autre réponse pour crypter et décrypter est plus facile et j'ai testé que je n'ai pas besoin de deux tables pour crypter et décrypter une table est assez bon. En tout cas merci pour votre remplacement de temps vraiment aidé. – Bernard
Si vous n'utilisez qu'une seule table, vous avez un chiffrement ou un déchiffrement plus lent (vous avez besoin d'une boucle de recherche supplémentaire pour chaque caractère), mais vous épargnez de la mémoire à la place. Les deux approches sont valables alors choisissez ce qui est mieux pour votre tâche ... – Spektre
- 1. comment fonctionne cet algorithme?
- 2. Comment fonctionne cet algorithme ReverseString?
- 3. Où cet algorithme de chiffrement/déchiffrement se passe-t-il?
- 4. Est-ce que quelqu'un reconnaît cet algorithme de chiffrement?
- 5. Comment fonctionne cet algorithme d'approximation de division?
- 6. Comment fonctionne cet algorithme de reverse-engineering?
- 7. Comment déclarer cet algorithme?
- 8. algorithme de chiffrement Delphi
- 9. Mon algorithme de chiffrement
- 10. algorithme de chiffrement de chiffrement et de chiffrement de flux
- 11. Comment développer cet algorithme?
- 12. javascript algorithme de chiffrement césar
- 13. Algorithme de chiffrement de bloc
- 14. Pseudocode de cet algorithme
- 15. chiffrement: algorithme RSA
- 16. algorithme de chiffrement pour l'application
- 17. Algorithme de chiffrement personnalisé Python
- 18. Algorithme simple de chiffrement asymétrique
- 19. algorithme de chiffrement C++ caesar
- 20. Quelqu'un peut-il expliquer comment fonctionne cet algorithme de division?
- 21. Comment résoudre cet algorithme correspondant?
- 22. Algorithme de chiffrement Caeser en PHP
- 23. Comment faire cet algorithme stable
- 24. Complexité temporelle de cet algorithme
- 25. Comment accélérer cet algorithme de comparaison d'objets?
- 26. Implémentation de cet algorithme de chiffrement de mot de passe Java en PHP
- 27. Pourquoi adobe choisit-il cet algorithme de chiffrement pour les polices de type 1?
- 28. Comment implémenter cet algorithme de recommandation?
- 29. Comment résoudre cet algorithme de chaîne?
- 30. Comment prouver l'exactitude de cet algorithme?
Vous avez simplement besoin de mapper un caractère à l'autre. L'AFAICT, que 'b' soit répété ou non, ou qu'il soit précédé de' a' ne devrait pas avoir d'importance. – devnull
Je me demande après avoir cartographié ces lettres. Comment puis-je le déchiffrer pour obtenir le mot d'origine? – Bernard
Vous pourriez vouloir regarder 'tr'. Voir 'man tr'. – devnull