Aggiornamento maggiore
* Migliorato il generatore di numeri casuali * Correzioni stilistiche * Correzioni varie
This commit is contained in:
parent
451d9970f0
commit
05f8058ea1
@ -1,6 +1,6 @@
|
||||
import crittografia
|
||||
from crittografia.unicode import codifica
|
||||
|
||||
stringa = crittografia.unicode.codifica("Testo da cifrare.")
|
||||
stringa = codifica("Testo da cifrare.")
|
||||
a = stringa.rot13()
|
||||
b = stringa.vigenère(verme = "verme")
|
||||
c = stringa.vernam()
|
||||
|
@ -2,9 +2,14 @@ from crittografia.numeri import *
alfabeto = tuple("abcdefghijklmnopqrstuvwxyz"
|
||||
ordinale = dict([(k,i) for i,k in enumerate(alfabeto)])
class codifica:
|
||||
def __init__(self, valore):
|
||||
valore = str(valore)
|
||||
if valore.isnumeric(): self.numero = int(valore)
|
||||
else: self.stringa = valore
|
||||
def rot13(self):
rotazione = str.maketrans("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", "nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM")
return str.translate(self.stringa, rotazione)
def vigenère(self, verme):
|
||||
if valore.isnumeric():
|
||||
self.numero = int(valore)
|
||||
else:
|
||||
self.stringa = valore
|
||||
def rot13(self):
rotazione = str.maketrans(
|
||||
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",
|
||||
"nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM"
|
||||
)
return str.translate(self.stringa, rotazione)
def vigenère(self, verme):
|
||||
self.stringa = self.stringa.lower().replace(" ","")
cifrata = ""
for i in range(len(self.stringa)):
cifrata += alfabeto[(ordinale[self.stringa[i]] + ordinale[verme[i % len(verme)]]) % 26]
return cifrata
def gödel(self, primo):
|
||||
self.stringa = self.stringa.lower().replace(" ","")
cifrata = 1
sequenza = primi.lista(primo, len(self.stringa))
for i in range(len(self.stringa)):
cifrata *= sequenza[i]**(ordinale[self.stringa[i]] + 1)
return cifrata
def vernam(self, pad=()):
|
||||
self.stringa = self.stringa.lower().replace(" ","")
cifrata = ""
|
||||
@ -13,6 +18,9 @@ ordinale = dict([(k,i) for i,k in enumerate(alfabeto)])
class codifica:
|
||||
valore = str(valore)
|
||||
if valore.isnumeric(): self.numero = int(valore)
|
||||
else: self.stringa = str(valore)
|
||||
def rot13(self):
rotazione = str.maketrans("nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
return str.translate(self.stringa, rotazione)
def vigenère(self, verme):
|
||||
def rot13(self):
rotazione = str.maketrans(
|
||||
"nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM",
|
||||
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
)
return str.translate(self.stringa, rotazione)
def vigenère(self, verme):
|
||||
self.stringa = self.stringa.lower().replace(" ","")
decifrata = ""
for i in range(len(self.stringa)):
decifrata += (alfabeto[(ordinale[self.stringa[i]] - ordinale[verme[i % len(verme)]]) % 26])
return decifrata
def gödel(self, primo, n):
decifrata = ""
for i in primi.lista(primo,n):
lettera = -1
while self.numero % i == 0:
self.numero /= i
lettera += 1
decifrata += alfabeto[lettera % 26]
return decifrata
def vernam(self, pad):
|
||||
self.stringa = self.stringa.lower().replace(" ","")
cifrata = ""
for i in range(len(self.stringa)):
cifrata += alfabeto[(ordinale[self.stringa[i]] - pad[i]) % 26]
return cifrata
|
@ -1,11 +1,20 @@
|
||||
import math,random,itertools,pyaudio
class primi:
def primo(n):
for i in range(3, int(math.sqrt(n)) + 1,2):
if n % i == 0: return False
return True
def prossimo(n):
if n % 2 == 0: n += 1
while True:
n += 2
if primi.primo(n): yield n
def lista(p, n):
return tuple([p for p in itertools.islice(primi.prossimo(p), n)])
class generatore:
def rumore(l):
audio = pyaudio.PyAudio()
output = audio.open(format = pyaudio.paInt8, channels = 1, output=True, rate = 50000)
for i in range(int(l*100/3)):
output.write(chr(int(random.random() * 25 + 1)))
output.close()
audio.terminate()
def leggirumore(inizio, fine, stop):
|
||||
import math, random, itertools, pyaudio
opzioni = {
|
||||
"format": pyaudio.paFloat32,
|
||||
"channels": 2,
|
||||
"rate": 96000,
|
||||
"input": True,
|
||||
"frames_per_buffer": 1024
|
||||
}
class primi:
def primo(n):
for i in range(3, int(math.sqrt(n)) + 1,2):
if n % i == 0:
|
||||
return False
return True
def prossimo(n):
if n % 2 == 0: n += 1
while True:
n += 2
if primi.primo(n):
|
||||
yield n
def lista(p, n):
return tuple([p for p in itertools.islice(primi.prossimo(p), n)])
class generatore:
def caso(inizio, fine, stop):
|
||||
audio = pyaudio.PyAudio()
|
||||
input = audio.open(format = pyaudio.paInt16, channels = 2, rate = 44100, input = True, frames_per_buffer = 1024)
|
||||
dati = input.read(int(44100 / 1024 * stop * 10))
|
||||
input = audio.open(**opzioni)
|
||||
dati = input.read(opzioni["rate"]//opzioni["frames_per_buffer"] * stop//2)
|
||||
input.close()
|
||||
audio.terminate()
|
||||
dati = [i for i in dati if i != 0]
|
||||
numeri = [(i + random.randint(inizio,fine)) % (fine + abs(inizio)) + inizio for i in dati]
|
||||
dati = [i for i in dati if i in range(inizio,fine)]
|
||||
random.shuffle(dati)
|
||||
for i in range(stop):
|
||||
yield numeri[i]
|
||||
def onetimepad(l):
return tuple(generatore.leggirumore(0,2*16,l))
|
||||
yield dati[i]
|
||||
def onetimepad(l):
return tuple(generatore.caso(0,2*16,l))
|
||||
|
@ -1,14 +1,22 @@
|
||||
from crittografia.numeri import *
max = 2**(16)
class codifica:
|
||||
def __init__(self, valore):
|
||||
valore = str(valore)
|
||||
if valore.isnumeric(): self.numero = int(valore)
|
||||
if valore.isnumeric():
|
||||
self.numero = int(valore)
|
||||
else: self.stringa = valore
|
||||
def rot13(self):
rotazione = str.maketrans("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", "nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM")
return str.translate(self.stringa, rotazione)
def vigenère(self, verme):
cifrata = ""
for i in range(len(self.stringa)):
cifrata += chr((ord(self.stringa[i]) + ord(verme[i % len(verme)])) % max)
return cifrata
def gödel(self, primo):
cifrata = 1
sequenza = primi.lista(primo, len(self.stringa))
for i in range(len(self.stringa)):
cifrata *= sequenza[i]**(ord(self.stringa[i]) + 1)
return cifrata
def vernam(self, pad=()):
cifrata = ""
|
||||
def rot13(self):
rotazione = str.maketrans(
|
||||
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",
|
||||
"nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM"
|
||||
)
return str.translate(self.stringa, rotazione)
def vigenère(self, verme):
cifrata = ""
for i in range(len(self.stringa)):
cifrata += chr((ord(self.stringa[i]) + ord(verme[i % len(verme)])) % max)
return cifrata
def gödel(self, primo):
cifrata = 1
sequenza = primi.lista(primo, len(self.stringa))
for i in range(len(self.stringa)):
cifrata *= sequenza[i]**(ord(self.stringa[i]) + 1)
return cifrata
def vernam(self, pad=()):
cifrata = ""
|
||||
if pad is ():
|
||||
pad = generatore.onetimepad(len(self.stringa))
|
||||
print(pad)
for i in range(len(self.stringa)):
cifrata += chr((ord(self.stringa[i]) + pad[i]) % max)
return cifrata, pad
class decodifica:
|
||||
pad = generatore.onetimepad(len(self.stringa))
for i in range(len(self.stringa)):
cifrata += chr((ord(self.stringa[i]) + pad[i]) % max)
return cifrata, pad
class decodifica:
|
||||
def __init__(self, valore):
|
||||
valore = str(valore)
|
||||
if valore.isnumeric(): self.numero = int(valore)
|
||||
else: self.stringa = str(valore)
|
||||
def rot13(self):
rotazione = str.maketrans("nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
return str.translate(self.stringa, rotazione)
def vigenère(self, verme):
decifrata = ""
for i in range(len(self.stringa)):
decifrata += chr((ord(self.stringa[i]) - ord(verme[i % len(verme)])) % max)
return decifrata
def gödel(self, primo, n):
decifrata = ""
for i in primi.lista(primo,n):
lettera = -1
while self.numero % i == 0:
self.numero /= i
lettera += 1
decifrata += chr(lettera % max)
return decifrata
def vernam(self, pad):
cifrata = ""
for i in range(len(self.stringa)):
cifrata += chr((ord(self.stringa[i]) - pad[i]) % max)
return cifrata
|
||||
if valore.isnumeric():
|
||||
self.numero = int(valore)
|
||||
else:
|
||||
self.stringa = str(valore)
|
||||
def rot13(self):
rotazione = str.maketrans(
|
||||
"nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM",
|
||||
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
)
return str.translate(self.stringa, rotazione)
def vigenère(self, verme):
decifrata = ""
for i in range(len(self.stringa)):
decifrata += chr((ord(self.stringa[i]) - ord(verme[i % len(verme)])) % max)
return decifrata
def gödel(self, primo, n):
decifrata = ""
for i in primi.lista(primo,n):
lettera = -1
while self.numero % i == 0:
self.numero /= i
lettera += 1
decifrata += chr(lettera % max)
return decifrata
def vernam(self, pad):
cifrata = ""
for i in range(len(self.stringa)):
cifrata += chr((ord(self.stringa[i]) - pad[i]) % max)
return cifrata
|
Loading…
Reference in New Issue
Block a user