Cryptomania 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- cryptokit/__init__.py +0 -0
- cryptokit/binary.py +10 -0
- cryptokit/caesar.py +30 -0
- cryptokit/hash.py +11 -0
- cryptokit/hex.py +10 -0
- cryptokit/rot13.py +21 -0
- cryptokit/template.py +18 -0
- cryptokit/vigenere.py +39 -0
- cryptomania-0.1.0.dist-info/METADATA +81 -0
- cryptomania-0.1.0.dist-info/RECORD +12 -0
- cryptomania-0.1.0.dist-info/WHEEL +5 -0
- cryptomania-0.1.0.dist-info/top_level.txt +1 -0
cryptokit/__init__.py
ADDED
|
File without changes
|
cryptokit/binary.py
ADDED
cryptokit/caesar.py
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
from .template import CryptoTemplate
|
|
2
|
+
from string import ascii_lowercase, ascii_uppercase
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Caesar(CryptoTemplate):
|
|
6
|
+
def __init__(self, message, shifts):
|
|
7
|
+
super().__init__(message)
|
|
8
|
+
self.shifts = shifts
|
|
9
|
+
self.UPPER = list(ascii_uppercase)
|
|
10
|
+
self.LOWER = list(ascii_lowercase)
|
|
11
|
+
|
|
12
|
+
if not isinstance(shifts, int):
|
|
13
|
+
raise TypeError("The Shifts Must be An Integer Variable!")
|
|
14
|
+
|
|
15
|
+
def encode(self):
|
|
16
|
+
original = self.return_original_message()
|
|
17
|
+
encoded_chars = []
|
|
18
|
+
shift = self.shifts % 26
|
|
19
|
+
|
|
20
|
+
for char in original:
|
|
21
|
+
if char.isupper():
|
|
22
|
+
index = self.UPPER.index(char)
|
|
23
|
+
encoded_chars.append(self.UPPER[(index + shift) % 26])
|
|
24
|
+
elif char.islower():
|
|
25
|
+
index = self.LOWER.index(char)
|
|
26
|
+
encoded_chars.append(self.LOWER[(index + shift) % 26])
|
|
27
|
+
else:
|
|
28
|
+
encoded_chars.append(char)
|
|
29
|
+
|
|
30
|
+
return "".join(encoded_chars)
|
cryptokit/hash.py
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from .template import CryptoTemplate
|
|
2
|
+
import hashlib
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Hash(CryptoTemplate):
|
|
6
|
+
def __init__(self, message):
|
|
7
|
+
super().__init__(message)
|
|
8
|
+
|
|
9
|
+
def encode(self):
|
|
10
|
+
original = self.return_original_message()
|
|
11
|
+
return hashlib.sha256(original.encode('utf-8')).hexdigest()
|
cryptokit/hex.py
ADDED
cryptokit/rot13.py
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from .template import CryptoTemplate
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class Rot13(CryptoTemplate):
|
|
5
|
+
def __init__(self, message):
|
|
6
|
+
super().__init__(message)
|
|
7
|
+
|
|
8
|
+
def encode(self):
|
|
9
|
+
original = self.return_original_message()
|
|
10
|
+
resultado = ""
|
|
11
|
+
for caracter in original:
|
|
12
|
+
|
|
13
|
+
if 'a' <= caracter <= 'z':
|
|
14
|
+
resultado += chr((ord(caracter) - ord('a') + 13) % 26 + ord('a'))
|
|
15
|
+
|
|
16
|
+
elif 'A' <= caracter <= 'Z':
|
|
17
|
+
resultado += chr((ord(caracter) - ord('A') + 13) % 26 + ord('A'))
|
|
18
|
+
|
|
19
|
+
else:
|
|
20
|
+
resultado += caracter
|
|
21
|
+
return resultado
|
cryptokit/template.py
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from abc import ABC, abstractmethod
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class CryptoTemplate(ABC):
|
|
5
|
+
def __init__(self, message : str):
|
|
6
|
+
self.__message = message
|
|
7
|
+
if not isinstance(self.__message, str):
|
|
8
|
+
raise TypeError("The Attributes must be its types!")
|
|
9
|
+
|
|
10
|
+
@abstractmethod
|
|
11
|
+
def encode(self):
|
|
12
|
+
pass
|
|
13
|
+
|
|
14
|
+
def return_encoded_message(self):
|
|
15
|
+
return self.encode()
|
|
16
|
+
|
|
17
|
+
def return_original_message(self):
|
|
18
|
+
return self.__message
|
cryptokit/vigenere.py
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
from .template import CryptoTemplate
|
|
2
|
+
from string import ascii_lowercase, ascii_uppercase
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Vigenere(CryptoTemplate):
|
|
6
|
+
def __init__(self, message, key):
|
|
7
|
+
super().__init__(message)
|
|
8
|
+
self.key : str = key
|
|
9
|
+
self.UPPER = list(ascii_uppercase)
|
|
10
|
+
self.LOWER = list(ascii_lowercase)
|
|
11
|
+
|
|
12
|
+
if not isinstance(key, str):
|
|
13
|
+
raise TypeError("The Shifts Must be An String Variable!")
|
|
14
|
+
|
|
15
|
+
def encode(self):
|
|
16
|
+
original = self.return_original_message()
|
|
17
|
+
resultado = []
|
|
18
|
+
self.key = self.key.upper()
|
|
19
|
+
key_idx = 0
|
|
20
|
+
|
|
21
|
+
for char in original:
|
|
22
|
+
|
|
23
|
+
if char.isalpha():
|
|
24
|
+
|
|
25
|
+
shift = ord(self.key[key_idx % len(self.key)]) - ord('A')
|
|
26
|
+
|
|
27
|
+
if char.isupper():
|
|
28
|
+
base = ord('A')
|
|
29
|
+
new_char = chr((ord(char) - base + shift) % 26 + base)
|
|
30
|
+
else:
|
|
31
|
+
base = ord('a')
|
|
32
|
+
new_char = chr((ord(char) - base + shift) % 26 + base)
|
|
33
|
+
|
|
34
|
+
resultado.append(new_char)
|
|
35
|
+
key_idx += 1
|
|
36
|
+
else:
|
|
37
|
+
resultado.append(char)
|
|
38
|
+
|
|
39
|
+
return ''.join(resultado)
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: Cryptomania
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: A library to code and encode messages and strings!
|
|
5
|
+
Requires-Python: >=3.11
|
|
6
|
+
Description-Content-Type: text/markdown
|
|
7
|
+
Requires-Dist: termcolor>=3.3.0
|
|
8
|
+
|
|
9
|
+
# CryptoMania
|
|
10
|
+
## Un sistema de encriptación de mensajes junto a su librería original
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
CryptoMania sirve para programadores que quieren encriptar sus mensajes de manera rapida y sencilla usando POO
|
|
15
|
+
|
|
16
|
+
CryptoMania posee como funciones principales encriptar en cifrados o sistemas de encriptación comúnmente conocidos como el cifrado cesar o el cifrado Hash
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# Conceptos de POO Utilizados en CryptoMania
|
|
21
|
+
|
|
22
|
+
1. Encapsulamiento
|
|
23
|
+
Linea 10 de cryptomania.py
|
|
24
|
+
```python
|
|
25
|
+
self.__message = message
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
2. Herencia
|
|
29
|
+
Se utiliza en general en la libreria de CryptoMania y en la GUI heredando esta de mainGUI.py
|
|
30
|
+
|
|
31
|
+
3. Abstracción
|
|
32
|
+
Linea 1 -> 18 de template.py
|
|
33
|
+
```python
|
|
34
|
+
from abc import ABC, abstractmethod
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class CryptoTemplate(ABC):
|
|
38
|
+
def __init__(self, message : str):
|
|
39
|
+
self.__message = message
|
|
40
|
+
if not isinstance(self.__message, str):
|
|
41
|
+
raise TypeError("The Attributes must be its types!")
|
|
42
|
+
|
|
43
|
+
@abstractmethod
|
|
44
|
+
def encode(self):
|
|
45
|
+
pass
|
|
46
|
+
|
|
47
|
+
def return_encoded_message(self):
|
|
48
|
+
return self.encode()
|
|
49
|
+
|
|
50
|
+
def return_original_message(self):
|
|
51
|
+
return self.__message
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
4. Polimorfismo
|
|
55
|
+
Se puede apreciar en el codigo anterior siendo una plantilla del resto de Metodos de encriptación
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
## Criterios de Aceptación
|
|
59
|
+
|
|
60
|
+
1. El sistema debe permitir al usuario ingresar un mensaje de texto y
|
|
61
|
+
seleccionar un método de encriptación desde el menú de consola,
|
|
62
|
+
retornando el mensaje encriptado correctamente.
|
|
63
|
+
|
|
64
|
+
2. La clase `CryptoTemplate` debe ser abstracta y no debe poder
|
|
65
|
+
instanciarse directamente; solo sus clases hijas pueden ser usadas.
|
|
66
|
+
|
|
67
|
+
3. Cada método de encriptación (César, Hash, etc.) debe implementar
|
|
68
|
+
obligatoriamente el método `encode()`, y cada implementación debe
|
|
69
|
+
producir un resultado diferente para el mismo mensaje de entrada.
|
|
70
|
+
|
|
71
|
+
4. El atributo `__message` debe estar encapsulado y no debe ser
|
|
72
|
+
accesible ni modificable directamente desde fuera de la clase;
|
|
73
|
+
solo a través de los métodos públicos definidos.
|
|
74
|
+
|
|
75
|
+
5. Si el usuario ingresa un valor que no sea string como mensaje,
|
|
76
|
+
el sistema debe lanzar un `TypeError` con un mensaje de error
|
|
77
|
+
descriptivo, sin romper la ejecución del programa.
|
|
78
|
+
|
|
79
|
+
6. El menú de consola debe incluir como mínimo las opciones de
|
|
80
|
+
encriptar un mensaje, mostrar el resultado y salir del sistema,
|
|
81
|
+
funcionando de forma controlada sin errores inesperados.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
cryptokit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
+
cryptokit/binary.py,sha256=TNkzATZWpmKExqJcTslDolOpGW82poNlFkVZf2CSEAs,288
|
|
3
|
+
cryptokit/caesar.py,sha256=dtG__vThyl25hwXbYak20-ADUHNh1I2n4s_7qO-JSnY,1021
|
|
4
|
+
cryptokit/hash.py,sha256=KAGMm9KJHgkwCr6461hIz49vb2-x90XmtUB6ofYXq7o,305
|
|
5
|
+
cryptokit/hex.py,sha256=yTmGMFV7zFYszgVAo8zRuMQwzYk3vRKnE6gPvS9SH58,266
|
|
6
|
+
cryptokit/rot13.py,sha256=mKztiDrVXSWVJFcaETjqcvXJRSdspYSAd3VMEAFaCgU,618
|
|
7
|
+
cryptokit/template.py,sha256=D_j9ArazqkS_YrztGg0hEr4xZWnG2OA8igeohOTCDi4,472
|
|
8
|
+
cryptokit/vigenere.py,sha256=N3SMzerj84KhZpkdRvmuRvCy8bbhXvmUO_BHGoLuPEU,1230
|
|
9
|
+
cryptomania-0.1.0.dist-info/METADATA,sha256=Xssq1Vjc-CVdn_TWRKT8BU4g7fAM4UPoHZalDyAjDp8,2677
|
|
10
|
+
cryptomania-0.1.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
|
|
11
|
+
cryptomania-0.1.0.dist-info/top_level.txt,sha256=0TQPyFKtXozcr1711SGe6jZsQw83NMdDRdv8FEYdyfc,10
|
|
12
|
+
cryptomania-0.1.0.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
cryptokit
|