mirror of
https://github.com/BreizhHardware/chiff-affine.git
synced 2026-03-18 21:40:39 +01:00
Init
This commit is contained in:
3
BrutForce.py
Normal file
3
BrutForce.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from chiffrement import *
|
||||
from readbytetest import *
|
||||
readByteFile('data')
|
||||
65
Main V3.py
Normal file
65
Main V3.py
Normal file
@@ -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")
|
||||
8
chiffrement-affine.code-workspace
Normal file
8
chiffrement-affine.code-workspace
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"folders": [
|
||||
{
|
||||
"path": "."
|
||||
}
|
||||
],
|
||||
"settings": {}
|
||||
}
|
||||
72
chiffrement.py
Normal file
72
chiffrement.py
Normal file
@@ -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"))
|
||||
3
decryptresult
Normal file
3
decryptresult
Normal file
@@ -0,0 +1,3 @@
|
||||
fichier test lalalla
|
||||
aa
|
||||
ahouhda
|
||||
BIN
monkey.jpg
Normal file
BIN
monkey.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 177 KiB |
3
resluttest
Normal file
3
resluttest
Normal file
@@ -0,0 +1,3 @@
|
||||
ilfklhu#whvw#ododood
|
||||
dd
|
||||
dkrxkgd
|
||||
3
tescrypt.txt
Normal file
3
tescrypt.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
fichier test lalalla
|
||||
aa
|
||||
ahouhda
|
||||
Reference in New Issue
Block a user