Un chiffre opère sur les unités élémentaires qui composent le message : lettres, petits groupes de lettres, ou encore bits dans les transmissions électroniques, qui sont substitués ou transposés. Il n'y a pas besoin de connaître la signification des mots que composent les lettres pour les chiffrer, il suffit de savoir, par exemple, qu'on doit décaler chaque lettre de 3 positions dans l'alphabet, si on utilise un chiffre par substitution monoalphabétique dont la clé est 3.
Dans ce cas, JE SUIS CONTENT s'écrira : MH VXLV FRQWHQW
et JE PENSE DONC JE SUIS s'écrira MH SHQVH GRQF MH VXLV.
ROT13 est un exemple d'un tel chiffrement. Le chiffre peut être plus complexe comme par exemple celui de Vigenère qui fait intervenir des substitutions polyalphabétiques. Dans ce cas, une lettre peut être remplacée par plusieurs possibilités selon sa position dans le texte et la clé.
En revanche, un code opère sur les mots ou les phrases du message, et sur leur signification. Dans le code des emoticons dérivés des smileys, par exemple,
JE SUIS CONTENT s'écrira :-) mais il sera plus difficile d'écrire JE PENSE DONC JE SUIS, car cette phrase n'est pas définie dans les tables de références usuelles des *smiley*s. Si deux personnes veulent échanger des messages où cette phrase apparaît secrètement sous forme de smiley, elles devront en définir la représentation ; de même pour tout autre mot ou phrase qu'elles souhaiteraient échanger de cette façon. L'ensemble de ces conventions peut être réuni dans un livre de code, équivalent d'un dictionnaire qui permet la conversion entre les deux représentations. Le Grand Chiffre utilisé à l'époque de Louis XIV est un exemple de code basé sur un système à répertoires.