Le chiffre de César ou code de César est un chiffrement par décalage : une des méthodes connues d'encryptage la plus simple et la plus connue. Elle consiste en une substitution de lettres par une autre plus loin dans l'alphabet. Par exemple, si l'on utilise un décalage de 3, A serait remplacé par D, B deviendrait E, et ainsi de suite.
Plus aucun jeu, plus aucune énigme, plus aucune chasse au trésor ne vous résisteront !
Ecrire à l'auteur de dCode
Annonces sponsorisées :
Le programme est capable de détecter automatiquement le décalage utilisé.
Le chiffrement est en fait une simple substitution monoalphabétique, c'est-à-dire qu'une lettre est repalcée par une seule autre.
Le code de césar a la particularité qu'il est basé sur un simple décalage de l'alphabet et, ainsi, si on note A = 1, B = 2, ..., Z = 26, que l'on ajoute une constante et que l'on conserve le résultat modulo 26. On obtient le texte codé.
On appelle la constante, la clé ou le décalage. Certains appellent la clé la lettre correspondant au A du texte clair.
Par exemple, le décalage par défaut est de 3, la lettre A devient D, que l'on nomme la clé.
Le principe du déchiffrement est le même que le chiffrement, sauf que l'on soustrait une constante modulo 26.
La méthode brute-force est la plus simple à utiliser, il suffit d?essayer toutes les clés possibles (il y en a seulement 25).
Pour trouver la solution presque à coup sur, il suffit de faire une analyse des fréquences des solutions pour chaque clé, celle qui se rapproche le plus des fréquences des lettres en français est la plus probable.
Si le message est trop court, les fréquences théoriques risque de diverger de celles du message.
Le chiffre d'Auguste est le nom donné au code de César avec un décalage de 1.
Dans ce codage, L vaut N (Hèlène LN), celà correspond à un décalage de 2.
Dans ce codage, E vaut I (Oeufs pourris, E pour I), K vaut O (KO : Knock Out), P vaut T (Pété PT) et R vaut V (Hervé RV), celà correspond à un décalage de 4.
Dans ce codage, J vaut O (JO : jeux olympiques), celà correspond à un décalage de 5.
Dans ce codage, A vaut G (Agé AG), F vaut L (Eiffel FL), P vaut V (Procès Verbal PV) et W vaut C (WC : Water Closet), celà correspond à un décalage de 6.
Dans ce codage, A vaut K (Avocat), celà correspond à un décalage de 10.
Dans ce codage, H vaut T (HT) et J vaut V (JV), celà correspond à un décalage de 12.
Le ROT13 est le nom donné au code de César avec un décalage de 13.
Dans ce codage, R vaut G (Hergé Renseignements Généraux RG), D vaut S (Déesse DS) et A vaut P (happé), celà correspond à un décalage de 15.
Dans ce codage, K vaut C (Cassé KC) et M vaut E (Meuuuh ME), celà correspond à un décalage de 18.
Dans ce codage, A vaut T (a voté), celà correspond à un décalage de 19.
Cette méthode doit son nom à Jules César, qui utilisait cette technique pour certaines de ses correspondances, notamment militaires. Il écrivait par exemple à Ciceron en remplaçant chaque lettre par celle située 3 rangs plus loin dans l'alphabet.
C'est une technique de chiffrement par substitution, c'est-à-dire que chaque lettre du texte en clair est remplacée par une autre lettre à distance fixe dans l'alphabet. Pour le décoder, il suffit de tester les 26 possibilités de décalage.
Il s'agit du chiffre de César avec une décalage de 13. Ce code permet d'être réversible, en effet en rechiffrant par la même méthode (en décalant à nouveau de 13) on retrouve le texte original.
DFTBS, EGUCT, FHVDU, GIWEV, HJXFW, IKYGX, JLZHY, KMAIZ, LNBJA, MOCKB, NPDLC, OQEMD, PRFNE, QSGOF, RTHPG, SUIQH, TVJRI, UWKSJ, VXLTK, WYMUL, XZNVM, YAOWN, ZBPXO, ACQYP, BDRZQ
def decaler(caractere, decalage):
if caractere.islower():
return chr(((ord(caractere)-97+decalage) % 26 )+97)
elif caractere.isupper():
return chr(((ord(caractere)-65+decalage) % 26 )+65)
else:
return caractere # non alphabétique
def cesar(phrase, shift):
message = ""
for caractere in phrase:
message += decaler(caractere, shift)
return message
texte_clair = "Alea jacta est!"
texte_code = cesar(texte_clair, 3)
print texte_clair, "devient", texte_code
public class Caesar {
public static final char[] alpha = {'A','B','C','D','E','F','G','H','I','J','K','L','M', 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
protected char[] texte_code = new char[26];
protected char[] texte_clair = new char[26];
public Caesar(Integer decalage) {
for (int i=0; i < 26; i++)
texte_code[i] = alpha[(i + decalage) % 26];
for (int i=0; i < 26; i++)
texte_clair[texte_code[i] - 'A'] = alpha[i];
}
public String codage(String secret) {
char[] message = secret.toCharArray();
for (int i=0; i < message.length; i++)
if (Character.isUpperCase(message[i]))
message[i] = texte_code[message[i] - 'A'];
return new String(message);
}
public String decodage(String secret) {
char[] message = secret.toCharArray();
for (int i=0; i < message.length; i++)
if (Character.isUpperCase(message[i]))
message[i] = texte_clair[message[i] - 'A'];
return new String(message);
}
public static void main(String[] args) {
Caesar message = new Caesar();
System.out.println("Alphabet 1 = " + new String(message.texte_code));
System.out.println("Alphabet 2 = " + new String(message.texte_clair));
String secret = "CAIUS JULIUS CAESAR";
secret = message.texte_code(secret);
System.out.println(secret);
secret = message.texte_clair(secret);
System.out.println(secret);
}
}
#include
#include
void cesar_encode(int decalage, const char *texte_clair, char *texte_code);
void cesar_decode(int decalage, const char *texte_code, char *texte_clair);
int main(int argc, char *argv[]){
char *texte_clair = "Ave, Caesar, morituri te salutant !";
char *texte_code = malloc(strlen(texte_clair)+1);
char *resultat = malloc(strlen(texte_clair)+1);
cesar_encode(10, texte_clair,texte_code);
cesar_decode(10, texte_code,resultat);
printf("-->original : %s\n-->texte code : %s\n-->texte clair : %s\n", texte_clair, texte_code, resultat);
free(texte_code);
free(resultat);
system("PAUSE");
return 0;
}
void cesar_encode(int decalage, const char *texte_clair, char *texte_code){
int i, length = strlen(texte_clair);
for(i = 0; i < length; i++){
if (!isalpha(texte_clair[i])){
texte_code[i] = texte_clair[i];
}else{
texte_code[i] = (tolower(texte_clair[i]) + decalage - 'a')& + 'a';
}
}
texte_code[i] = '\0';
}
void cesar_decode(int decalage, const char *texte_code, char *texte_clair){
int i, length = strlen(texte_code);
for(i = 0; i < length; i++){
if (!isalpha(texte_code[i])){
texte_clair[i] = texte_code[i];
}else{
texte_clair[i] = (tolower(texte_code[i]) - 'a' - decalage + 26)& + 'a';
}
}
texte_clair[i] = '\0';
}
Friend Class Cesar
Private _decalage As Integer
Public Property Decalage() As Integer
Get
Return _decalage
End Get
Set(ByVal value As Integer)
_decalage = value
End Set
End Property
Public Sub New()
Me.New(3)
End Sub
Public Sub New(ByVal Decalage As Integer)
Me.Decalage = Decalage
End Sub
Public Function Encode(ByVal texteClair As String) As String
Dim texteCode As String = String.Empty
Dim caracteres(texteClair.Length) As Char
For i As Integer = 0 To texteClair.Length - 1
caracteres(i) = _ Convert.ToChar((Convert.ToInt32( Convert.ToChar(texteClair(i))) + Me.Decalage))
Next
texteCode = New String(caracteres)
Return texteCode
End Function
Public Function Decode(ByVal texteCode As String) As String
Dim texteClair As String = String.Empty
Dim caracteres(texteCode.Length) As Char
For i As Integer = 0 To texteCode.Length - 1
caracteres(i) = _ Convert.ToChar((Convert.ToInt32( Convert.ToChar(texteCode(i))) - Me.Decalage))
Next
texteClair = New String(caracteres)
Return texteClair
End Function
End Class
function CesarEncode(cle, message) {
var resultat = "";
var decalage = parseInt(cle);
message = message.toUpperCase();
var longueur = message.length;
for (var i = 0; i < longueur; i++) {
var val = message.charCodeAt(i) - 65;
if (val >= 0)
resultat += String.fromCharCode(((val + decalage) % 26) + 65);
}
return resultat;
}
dCodeur se réserve la propriété du code source du script Code César. Toute demande écrite pour un applet (déchiffrement, chiffrement, encodage, décodage, encryptage, décryptage, traduction, traducteur, conversion, solveur), une fonction (décrypter, encrypter, déchiffrer, chiffrer, décoder, code, traduire, convertir, résoudre) ou un script en langage Java, C++, PHP, Python, etc. pourra être formulée via la page contact.
© 2013 dcode.fr — Le site indispensable pour résoudre les énigmes, les jeux et les chasses au trésor. dCode