Exercices
Exercice 1⚓︎
Utilisation des biblitohèques cryptographiques du module sympy
.
Documentation : https://docs.sympy.org/latest/modules/crypto.html
Décoder la phrase RYTVJKGCLJWRTZCVRMVTLEDFULCVHLZWRZKKFLKRMFKIVGCRTV
, sachant qu'elle a été chiffrée par décalage.
correction
1 2 3 4 5 6 7 |
|
Exercice 2⚓︎
Chiffrage affine
Principe du chiffrage affine :
- Chaque lettre est codée par son rang, en commençant à 0 (A->0, B->1, ..., Z->25)
- On applique à chaque rang la transformation affine \(f(x) = (ax+b)\, \%26\)
où \(a\) et \(b\) sont deux nombres entiers. Attention, a doit être premier avec 26.
Q1. Codez votre fonction affine(msg, a, b)
correction
1 2 3 4 5 6 7 8 9 10 11 |
|
Q2. Comparez vos résultats avec ceux obtenus par la fonction encipher_affine()
de sympy
.
Q3. Décodez la phrase UCGXLODCMOXPMFMSRJCFQOGTCRSUSXC
, sachant qu'elle contient le mot TRAVAIL
et que \(a\) et \(b\) sont inférieurs à 20.
correction
1 2 3 4 5 6 7 8 9 |
|
Exercice 3⚓︎
Cryptographie RSA presque à la main
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
- Analysez le programme ci-dessous pour y retrouver chaque étape du chiffrement RSA.
- Exécutez le programme et regardez en console le contenu des différentes variables.
- Observez les deux lignes qui contiennent les opérations de chiffrement et de déchiffrement : que faut-il changer pour chiffrer avec la clé privée et déchiffrer avec la clé publique ?
correction
Q3. Il suffit d'inverser e
et d
dans les lignes 20 et 21.
Exercice 4⚓︎
En vous servant du code précédent, déchiffrez le message 58152918114477529438769495136495430966050302170947748011925859233600631318929939319619808279389222131229963717435870597641010567365311762267359794338657867540621133550787677728203831932548041236152866441194127191404729294628415184239755221703677388875259927092794165578604353985011899152968982365630138088486380827379488939561996226754182
sachant que :
- \(e\) vaut 65537.
- \(p\) et \(q\) sont respectivement les 13èmes et 14èmes nombres de Mersenne.
correction
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
Exercice 5⚓︎
module RSA dans les règles de l'art
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
import binascii
keyPair = RSA.generate(1024)
pubKey = keyPair.publickey()
pubKeyPEM = pubKey.exportKey()
privKeyPEM = keyPair.exportKey()
msg = b'vive la crypto en NSI !'
encryptor = PKCS1_OAEP.new(pubKey)
encrypted = encryptor.encrypt(msg)
print("Encrypted:", binascii.hexlify(encrypted))
decryptor = PKCS1_OAEP.new(keyPair)
decrypted = decryptor.decrypt(encrypted)
print('Decrypted:', decrypted)