diff --git a/BrutForce.py b/BrutForce.py new file mode 100644 index 0000000..2d4fb03 --- /dev/null +++ b/BrutForce.py @@ -0,0 +1,3 @@ +from chiffrement import * +from readbytetest import * +readByteFile('data') diff --git a/Main V3.py b/Main V3.py new file mode 100644 index 0000000..4f4ccfe --- /dev/null +++ b/Main V3.py @@ -0,0 +1,65 @@ +def cryptByteFile(filenameIn: str, keya: int, keyb: int, filenameOut = 'result') -> None: + """ Ecrit dans filenameOut, filenameIn crypté avec le chiffrement affine + """ + fdin = open(filenameIn, "rb") + fdout = open(filenameOut, "ab") + data = fdin.read(1) + while data != b'': + fdout.write(chiffrementAffineByte(data, keya, keyb)) + data = fdin.read(1) + fdin.close() + fdout.close() + + +def chiffrementAffineByte(data: bytes, keya: int, keyb: int) -> bytes: + """ Renvoie le byte data crypté avec le chiffrement affine + """ + alphabet = [] + for i in range(256): + alphabet.append(i) + x=alphabet.index(int.from_bytes(data, "little")) + y=(keya*x+keyb)%256 + return bytes([alphabet[y]]) + +def inverse(a): + """ Renvoie l'inverse du module de a et x par 256 + """ + x=0 + while (a*x%256!=1): + x += 1 + return x + +def dechiffrementAffineByte(data: bytes, keya: int, keyb: int) -> bytes: + """ Renvoie le byte data décrypté avec le chiffrement affine + """ + alphabet = [] + for i in range(256): + alphabet.append(i) + x=alphabet.index(int.from_bytes(data, "little")) + y=(inverse(keya)*(x-keyb))%256 + return bytes([alphabet[y]]) + + +def decryptByteFile(filenameIn: str, keya: int, keyb: int, filenameOut = 'result') -> None: + """ Ecrit dans filenameOut, filenameIn décrypté avec le chiffrement affine + """ + fdin = open(filenameIn, "rb") + fdout = open(filenameOut, "ab") + data = fdin.read(1) + while data != b'': + fdout.write(dechiffrementAffineByte(data, keya, keyb)) + data = fdin.read(1) + fdin.close() + fdout.close() + +#bytes([1]) + + +#Jeu de test +print(chiffrementAffineByte(b'\xd8', 1, 3)) +#cryptByteFile('tescrypt.txt', 1, 3, "resluttest") +#cryptByteFile('data', 1, 3) +#cryptByteFile('monkey.jpg', 1, 3) +print(dechiffrementAffineByte(b'\xd8', 1, 3)) +decryptByteFile('resluttest', 1, 3, "decryptresult") +#decryptByteFile('result', 1, 3, "decryptmonkey.jpg") \ No newline at end of file diff --git a/README.md b/README.md index 5ab2f8a..e58060f 100644 --- a/README.md +++ b/README.md @@ -1 +1,2 @@ -Hello \ No newline at end of file +Hello +This project is a school project \ No newline at end of file diff --git a/chiffrement-affine.code-workspace b/chiffrement-affine.code-workspace new file mode 100644 index 0000000..876a149 --- /dev/null +++ b/chiffrement-affine.code-workspace @@ -0,0 +1,8 @@ +{ + "folders": [ + { + "path": "." + } + ], + "settings": {} +} \ No newline at end of file diff --git a/chiffrement.py b/chiffrement.py new file mode 100644 index 0000000..0743391 --- /dev/null +++ b/chiffrement.py @@ -0,0 +1,72 @@ +#R = machin.read(1) +#if not R = \00 +def pgcd(a,b): + while b!=0: + a,b=b,a%b + return a +def chiffrementAffine(a,b,L): + alphabet=["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"] + x=alphabet.index(L) + y=(a*x+b)%26 + return alphabet[y] +def inverse(a): + x=0 + while (a*x%26!=1): + x=x+1 + return x +def dechiffrementAffine(a,b,L): + alphabet=["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"] + x=alphabet.index(L) + y=(inverse(a)*(x-b))%26 + return alphabet[y] + + +def crypt(M,a,b): + if (pgcd(a,26)==1): + mot = [] + for i in range(0,len(M)): + mot.append(chiffrementAffine(a,b,M[i])) + return "".join(mot) + else: + return "Chiffrement impossible. Veuillez choisir un nombre a premier avec 26." + +def decrypt(M,a,b): + if (pgcd(a,26)==1): + mot = [] + for i in range(0,len(M)): + mot.append(dechiffrementAffine(a,b,M[i])) + return "".join(mot) + else: + return "Déchiffrement impossible. Le nombre a n'est pas premier avec 26." +def readByteFile(A: str): + with open(A, "rb") as f: + with open("result.txt", "a+") as o: + byte = f.read(1) + while (byte := f.read(1)): + o.write(str(byte)) +def decouper(F: str): + fd = open("result.txt", "r").readlines() + for line in fd: + line = line.sp + + +def cryptFichier(A: str, a,b): + X = openBytesFile(A) + fdout = open("resulttest.txt", "wb") + for i in range(len(X)): + fdout.write(X[i]) + crypt(fdout, a, b) + +def openBytesFile(A: str): + opened = [] + fdin = open(A, "rb") + data = fdin.read(1) + while data != b'': + opened.append(data) + data = fdin.read(1) + fdin.close() + return opened + +print(chiffrementAffine(1, 3, 'P')) +print(crypt("JAIMELESFRITESALAFRITEUSES", 1, 3)) +print(openBytesFile("testcrypt.txt")) diff --git a/data b/data new file mode 100644 index 0000000..fcfd475 --- /dev/null +++ b/data @@ -0,0 +1 @@ +e1d1v +N˪&p_=˪_&e=p& 11+ ņ1+=&p_v&=_e=&pѪpѩ=pN˪&p_=˪p&˪vѪv'ep&eepe=&pѪ==N'e&=epѪvѪvѪ&p=NNe=&pѪ===N'ev=e=&pѪ=ܪN'eNѪv'e&_NѪevp=pvѪ_p&_˪&Nة__=pv'epe=e=&pѪܪN˪_&e=p˪vp_=&N˪epv˪vѪNepv=eNe=&pѪ=ee&NѪp_=N_=˪&p=H=e=&pѪ==N'=&p=сpv˪_&e=pe=&pѪ===Ѫ=&p=ѪvѪ_сpe=&pѪ=v'ep&eeѪv=e=&pѪѪ_p==pѪe==1=Ne=&pѪ=N'=&p=ѪѪ_e=&pѪ==_p˪=NN=pvvѪ=ee=&pѪ===_=сp_e=сe=&pѪ=ܪN'_ѪvѪсe=&pѪܪ˪vѪp_Ѫ&˪v'e=&pѪ=_NѪepvѪv˪e˛=ppeN˪v',_=˪NeN_Ѫ_pNe_p_Ѫ=NNѪ,e=e=&e&p,_=e=&pѪ==NѪeѪ_e=сe=&pѪ===N'ee&&NѪep=e=&pѪ=NevѪeee=&pѪ_ee=&pѪ=Ne_&ѪvѪ7=&pe=&pѪ==NѪeNN&vѪNepNe=_e=&pѪ===NѪpvHI_e=&pѪ=ܪNѪe=NN_e=&pѪܪ_p&_e=&pѪ=Ne&⛢Ѫv'epe=e=&pѪ==Ne,ѩѪv'e&_e=&pѪ===p&_pe=&pѪ=NeeѪʪN'=ѩ&e=&pѪ=Neve=&pѪ=eNe=˪&,peGe=e=&pѪ==vpvѪp_pсpe=&pѪ===_p&&Ѫ&e&pe=&pѪ=ܪ_=N&&pe=&vѪN'=ѩ&v'epe=˪&vغ_p&_e=&pѪܪNe=&&_˪N˪e&˪_&p=e=&pѪ=pXѪvѪee=&pѪ==NѪp&vѪ=Neve=&pѪ===_&e˪Ѫvpepe&_˪&p_e_؛=ѩ&e=&pѪ=Ѫ==_e=&pѪNNѪepv=eNe=&pѪN=NѪ=ѪvѪNep_NNe=&pѪN==NѪ=v'e_e=&pѪN===N'epѪv_N_=pIp_e=&pѪN=ܪvѪN'&=N=&v˪&evѪ_XNe=&pѪNܪѪ_eNe=&pѪN=NѪe&=_e=&Ipe=e=&pѪN==NѪ_=Nv˪_&e=pe=&pѪN===e,,e=pѪvѪ,e=NNe=&pѪN=,e&eN=&e=&pѪNep=Ѫv',ppѪee_сpe=&pѪN=_,,==pe=&pѪN==pѩ=pѪ_pѪvѪe&==&e=&pѪN===vс=Ѫ_pѪvѪe&==&e=&pѪN=ܪ&p_==Ѫ_pѪvѪe&==&e=&pѪNܪe&p=Ѫ_pѪvѪe&==&e=&pѪN===Ѫ_pѪvѪe&==&e=&pѪN==_vѪ&pev=ѪNe=e=&pѪN===e=_e=&pѪN=Ѫ=Ѫee=&ʪ_p&˩_&NѪke_c&|2e=&pѪN,pee=&pѪN=NѪ_&v˪epN=&˪vѪ&e=&pѪN==vсep=&˪vѪv_e=&pѪN===Ѫ_&&Ѫv'ee=&pѪN=ܪN'_Ѫee&ep_e=&pѪNܪNѪѩ&e=&pѪN=N'ђ&=_e=&pѪN==_N=_؛=N_=&p_v&=_=MŪdd*1Л+u'1dŝ+d*Ū Bu1пMŮ11+1{B1{B1+Ъ dB+11N+=1 ŝB+֪+Ъ1+] 1+1'eІdd Н ]+II{ 1+d1І11+<1+1{11]u1 1+1+؆1dŝ1d*֝1Ū<]Н]+d+Ů1Ъŝ1dЪ+ d+خd窛*Ū+1II*e +1 {B111p1N11 1+]+11+1 Іŝ{B1 <1{Ū1 ++d11{d+1<ņ1C 1d1d1d11+֛]<ŝةdd1ddd'1++1ŝ1{d1dŮM+11{1{Н1ؿ<111 1{d1d1ŝ'M1d