mirror of
https://github.com/BreizhHardware/chiff-affine.git
synced 2026-01-18 16:37:39 +01:00
Add DocString
This commit is contained in:
BIN
__pycache__/chiffrement_affine.cpython-38.pyc
Normal file
BIN
__pycache__/chiffrement_affine.cpython-38.pyc
Normal file
Binary file not shown.
@@ -28,14 +28,14 @@ def chiffrementAffineByte(data: bytes, keya: int, keyb: int) -> bytes:
|
|||||||
alphabet = []
|
alphabet = []
|
||||||
for i in range(256):
|
for i in range(256):
|
||||||
alphabet.append(i)
|
alphabet.append(i)
|
||||||
x=alphabet.index(int.from_bytes(data, "little"))
|
x = alphabet.index(int.from_bytes(data, "little"))
|
||||||
y=(keya*x+keyb)%256
|
y = (keya*x+keyb)%256
|
||||||
return bytes([alphabet[y]])
|
return bytes([alphabet[y]])
|
||||||
|
|
||||||
def inverse(a):
|
def inverse(a):
|
||||||
""" Renvoie l'inverse du module de a et x par 256
|
""" Renvoie l'inverse du module de a et x par 256
|
||||||
"""
|
"""
|
||||||
x=0
|
x = 0
|
||||||
while (a*x%256 != 1):
|
while (a*x%256 != 1):
|
||||||
x += 1
|
x += 1
|
||||||
return x
|
return x
|
||||||
@@ -46,10 +46,10 @@ def dechiffrementAffineByte(data: bytes, keya: int, keyb: int) -> bytes:
|
|||||||
alphabet = []
|
alphabet = []
|
||||||
for i in range(256):
|
for i in range(256):
|
||||||
alphabet.append(i)
|
alphabet.append(i)
|
||||||
x=alphabet.index(int.from_bytes(data, "little"))
|
x = alphabet.index(int.from_bytes(data, "little"))
|
||||||
y=(inverse(keya)*(x-keyb))%256
|
y = (inverse(keya)*(x-keyb))%256
|
||||||
return bytes([alphabet[y]])
|
return bytes([alphabet[y]])
|
||||||
|
|
||||||
|
|
||||||
def decryptByteFile(filenameIn: str, keya: int, keyb: int, filenameOut = 'result') -> None:
|
def decryptByteFile(filenameIn: str, keya: int, keyb: int, filenameOut = 'result') -> None:
|
||||||
""" Ecrit dans filenameOut, filenameIn décrypté avec le chiffrement affine
|
""" Ecrit dans filenameOut, filenameIn décrypté avec le chiffrement affine
|
||||||
@@ -69,7 +69,7 @@ def byteFreq(filenameIn: str) -> dict:
|
|||||||
""" byteDict est un dictionnaire tel que
|
""" byteDict est un dictionnaire tel que
|
||||||
* une clé est un octet
|
* une clé est un octet
|
||||||
* la valeur associée est la fréquence de ce octet.
|
* la valeur associée est la fréquence de ce octet.
|
||||||
|
|
||||||
Met à jour byteDict avec la liste de octets lbyte.
|
Met à jour byteDict avec la liste de octets lbyte.
|
||||||
"""
|
"""
|
||||||
lbyte = []
|
lbyte = []
|
||||||
@@ -97,13 +97,15 @@ def sortbyteFreq(byteFreq : dict) -> list:
|
|||||||
while k < len(byteList):
|
while k < len(byteList):
|
||||||
i = k
|
i = k
|
||||||
while i > 0 and byteList[i - 1][1] < byteList[i][1]:
|
while i > 0 and byteList[i - 1][1] < byteList[i][1]:
|
||||||
byteList[i - 1], byteList[i] = byteList[i], byteList[i - 1]
|
byteList[i - 1], byteList[i] = byteList[i], byteList[i - 1]
|
||||||
i = i - 1
|
i = i - 1
|
||||||
k = k + 1
|
k = k + 1
|
||||||
return byteList
|
return byteList
|
||||||
|
|
||||||
|
|
||||||
def findKeywrite(data: bytes, dataout: bytes, filenameOut = 'result'):
|
def findKeywrite(data: bytes, dataout: bytes, filenameOut = 'result'):
|
||||||
|
"""Ecrit dans filenameOut les couples de clé possible pour que data soit égale à dataout.
|
||||||
|
"""
|
||||||
createFile(filenameOut)
|
createFile(filenameOut)
|
||||||
fdout = open(filenameOut, "w")
|
fdout = open(filenameOut, "w")
|
||||||
for keya in range(1, 256):
|
for keya in range(1, 256):
|
||||||
@@ -119,6 +121,8 @@ def findKeywrite(data: bytes, dataout: bytes, filenameOut = 'result'):
|
|||||||
fdout.write("\n")
|
fdout.write("\n")
|
||||||
|
|
||||||
def findKeyList(data: bytes, dataout: bytes):
|
def findKeyList(data: bytes, dataout: bytes):
|
||||||
|
"""Renvoie la liste des couples de clé possible pour que data soit égale à dataout.
|
||||||
|
"""
|
||||||
L = []
|
L = []
|
||||||
for keya in range(1, 256):
|
for keya in range(1, 256):
|
||||||
if keya % 2 != 0:
|
if keya % 2 != 0:
|
||||||
@@ -130,31 +134,9 @@ def findKeyList(data: bytes, dataout: bytes):
|
|||||||
return L
|
return L
|
||||||
|
|
||||||
def comparKey(L: list, M: list) -> tuple:
|
def comparKey(L: list, M: list) -> tuple:
|
||||||
|
"""Compare les couples de clé valeur et renvoie le couple commun aux 2 listes M et L.
|
||||||
|
"""
|
||||||
for i in range(len(L)):
|
for i in range(len(L)):
|
||||||
for y in range(len(M)):
|
for y in range(len(M)):
|
||||||
if L[i] == M[y]:
|
if L[i] == M[y]:
|
||||||
return L[i]
|
return L[i]
|
||||||
|
|
||||||
#Jeu de test
|
|
||||||
|
|
||||||
|
|
||||||
#print(sortbyteFreq(byteFreq("data")))
|
|
||||||
#findKeywrite(b'\xaa', b'\x20', "keyoutspace")
|
|
||||||
#findKeywrite(b'\x31', b'\x65', "keyoute")
|
|
||||||
#print(findKeyList(b'\xaa', b'\x20'))
|
|
||||||
print(comparKey(findKeyList(b'\xaa', b'\x20'), findKeyList(b'\x31', b'\x65')))
|
|
||||||
#cryptByteFile('tescrypt.txt', 1, 3, "resulttest2")
|
|
||||||
#cryptByteFile('data', 1, 3, 'resultcryptdata')
|
|
||||||
#cryptByteFile('monkey.jpg', 1, 3)
|
|
||||||
#decryptByteFile('resulttest2', 1, 3, "decryptresult2")
|
|
||||||
#decryptByteFile('resultcryptdata', 1, 3, 'resultdecryptdata')
|
|
||||||
decryptByteFile('data', 91, 74, "decrptdatatest")
|
|
||||||
#cryptByteFile('enemy-from-the-series-arcane-league-of-legends.mp3', 45, 76, 'enemyCrypted')
|
|
||||||
#decryptByteFile('enemyCrypted', 45, 76, 'enemyDeCyted.mp3')
|
|
||||||
|
|
||||||
|
|
||||||
#nmb d'octet de e et code (b'x65')
|
|
||||||
#nmb d'octet de espace et code (b'x20')
|
|
||||||
#nmb d'octet de . et code (b'x2e')
|
|
||||||
|
|
||||||
# \x20 -> \xaa
|
|
||||||
File diff suppressed because it is too large
Load Diff
20
jeudetest.py
Normal file
20
jeudetest.py
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
from chiffrement_affine import *
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
print(sortbyteFreq(byteFreq("data")))
|
||||||
|
#findKeywrite(b'\xaa', b'\x20', "keyoutspace")
|
||||||
|
#findKeywrite(b'\x31', b'\x65', "keyoute")
|
||||||
|
#print(findKeyList(b'\xaa', b'\x20'))
|
||||||
|
print(comparKey(findKeyList(b'\xaa', b'\x20'), findKeyList(b'\x31', b'\x65')))
|
||||||
|
#cryptByteFile('tescrypt.txt', 1, 3, "resulttest2")
|
||||||
|
#cryptByteFile('data', 1, 3, 'resultcryptdata')
|
||||||
|
#cryptByteFile('monkey.jpg', 1, 3)
|
||||||
|
#decryptByteFile('resulttest2', 1, 3, "decryptresult2")
|
||||||
|
#decryptByteFile('resultcryptdata', 1, 3, 'resultdecryptdata')
|
||||||
|
decryptByteFile('data',
|
||||||
|
comparKey(findKeyList(b'\xaa', b'\x20'), findKeyList(b'\x31', b'\x65'))[0],
|
||||||
|
comparKey(findKeyList(b'\xaa', b'\x20'), findKeyList(b'\x31', b'\x65'))[1],
|
||||||
|
"dataDecrypted")
|
||||||
|
#cryptByteFile('enemy-from-the-series-arcane-league-of-legends.mp3', 45, 76, 'enemyCrypted')
|
||||||
|
#decryptByteFile('enemyCrypted', 45, 76, 'enemyDeCyted.mp3')
|
||||||
Reference in New Issue
Block a user