las versiones 3 son las buenas
This commit is contained in:
commit
85db74f482
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
/.venv
|
47
leerlicencia.py
Normal file
47
leerlicencia.py
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
import gnupg
|
||||||
|
|
||||||
|
def leer_descifrar_y_verificar_licencia(archivo_licencia, passphrase):
|
||||||
|
# Inicializar GPG
|
||||||
|
gpg = gnupg.GPG()
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Leer el contenido cifrado del archivo
|
||||||
|
with open(archivo_licencia, 'rb') as f:
|
||||||
|
contenido_cifrado = f.read()
|
||||||
|
|
||||||
|
# Descifrar el contenido
|
||||||
|
descifrado = gpg.decrypt(contenido_cifrado, passphrase=passphrase)
|
||||||
|
|
||||||
|
if not descifrado.ok:
|
||||||
|
print(f"Error al descifrar los datos: {descifrado.status}")
|
||||||
|
return
|
||||||
|
|
||||||
|
print("Datos descifrados correctamente.")
|
||||||
|
|
||||||
|
# Los datos descifrados contienen la licencia firmada
|
||||||
|
datos_descifrados = descifrado.data.decode('utf-8')
|
||||||
|
|
||||||
|
# Verificar la firma
|
||||||
|
verificacion = gpg.verify(datos_descifrados)
|
||||||
|
|
||||||
|
if not verificacion:
|
||||||
|
print("La firma de la licencia no es válida.")
|
||||||
|
else:
|
||||||
|
print("La firma de la licencia es válida.")
|
||||||
|
|
||||||
|
# Imprimir los datos de la licencia
|
||||||
|
print("Datos de la licencia:")
|
||||||
|
print(datos_descifrados)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error al leer, descifrar o verificar los datos: {str(e)}")
|
||||||
|
|
||||||
|
# Archivo de licencia a leer y descifrar
|
||||||
|
archivo_licencia = 'licencia.cbs'
|
||||||
|
|
||||||
|
# Frase de paso para descifrar
|
||||||
|
passphrase = '172999'
|
||||||
|
|
||||||
|
# Llamar a la función para leer, descifrar y verificar la licencia
|
||||||
|
leer_descifrar_y_verificar_licencia(archivo_licencia, passphrase)
|
||||||
|
|
127
leerlicencia2.py
Normal file
127
leerlicencia2.py
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
import gnupg
|
||||||
|
import json
|
||||||
|
import pyodbc
|
||||||
|
|
||||||
|
# Función para obtener conexión a MSSQL
|
||||||
|
def obtener_conexion():
|
||||||
|
return pyodbc.connect(
|
||||||
|
'DRIVER={ODBC Driver 18 for SQL Server};'
|
||||||
|
'SERVER=140.82.58.83,14338;'
|
||||||
|
'DATABASE=licencias;'
|
||||||
|
'UID=sa;'
|
||||||
|
'PWD=hG0eT6P9CDXQmbVQ3S4IHPX5drBMVxog;'
|
||||||
|
'TrustServerCertificate=yes'
|
||||||
|
)
|
||||||
|
|
||||||
|
def leer_descifrar_y_validar_licencia(archivo_licencia, passphrase):
|
||||||
|
# Inicializar GPG
|
||||||
|
gpg = gnupg.GPG()
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Leer el archivo cifrado
|
||||||
|
with open(archivo_licencia, 'rb') as f:
|
||||||
|
contenido_cifrado = f.read()
|
||||||
|
|
||||||
|
# Descifrar los datos
|
||||||
|
descifrado = gpg.decrypt(contenido_cifrado, passphrase=passphrase)
|
||||||
|
|
||||||
|
if not descifrado.ok:
|
||||||
|
print(f"Error al descifrar los datos: {descifrado.status}")
|
||||||
|
return
|
||||||
|
|
||||||
|
print("Licencia descifrada correctamente.")
|
||||||
|
|
||||||
|
# Verificar la firma de los datos
|
||||||
|
verificacion = gpg.verify(descifrado.data)
|
||||||
|
|
||||||
|
if verificacion:
|
||||||
|
print("La firma de la licencia es válida.")
|
||||||
|
else:
|
||||||
|
print("La firma de la licencia no es válida.")
|
||||||
|
print(f"Detalles de la verificación de la firma: {verificacion.stderr}")
|
||||||
|
return
|
||||||
|
|
||||||
|
# Extraer los datos JSON de la parte firmada
|
||||||
|
datos_firmados = descifrado.data.decode('utf-8')
|
||||||
|
|
||||||
|
# Los datos firmados con PGP suelen tener la forma:
|
||||||
|
# -----BEGIN PGP SIGNED MESSAGE-----
|
||||||
|
# Hash: SHA512
|
||||||
|
#
|
||||||
|
# {
|
||||||
|
# "software": "MINDS",
|
||||||
|
# ...
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# Debemos eliminar los encabezados PGP para obtener el JSON puro.
|
||||||
|
|
||||||
|
# Buscar el comienzo del JSON real (después de los encabezados PGP)
|
||||||
|
json_inicio = datos_firmados.find("{")
|
||||||
|
json_final = datos_firmados.rfind("}")
|
||||||
|
|
||||||
|
if json_inicio == -1 or json_final == -1:
|
||||||
|
print("No se pudo encontrar el bloque JSON en los datos firmados.")
|
||||||
|
return
|
||||||
|
|
||||||
|
# Extraer el bloque JSON
|
||||||
|
datos_licencia_json = datos_firmados[json_inicio:json_final + 1]
|
||||||
|
|
||||||
|
# Convertir el JSON a un diccionario de Python
|
||||||
|
datos_licencia = json.loads(datos_licencia_json)
|
||||||
|
|
||||||
|
print("Datos de la licencia:")
|
||||||
|
print(datos_licencia)
|
||||||
|
|
||||||
|
# Verificar los datos contra la base de datos
|
||||||
|
if verificar_datos_contra_bd(datos_licencia):
|
||||||
|
print("La licencia es válida y coincide con los datos en la base de datos.")
|
||||||
|
else:
|
||||||
|
print("La licencia no coincide con los datos almacenados en la base de datos.")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error al leer, descifrar y validar la licencia: {str(e)}")
|
||||||
|
|
||||||
|
def verificar_datos_contra_bd(datos_licencia):
|
||||||
|
try:
|
||||||
|
# Conectar a la base de datos MSSQL
|
||||||
|
conn = obtener_conexion()
|
||||||
|
cursor = conn.cursor()
|
||||||
|
|
||||||
|
# Consultar los datos de la licencia en la base de datos
|
||||||
|
cursor.execute('''
|
||||||
|
SELECT * FROM licencias
|
||||||
|
WHERE software = ?
|
||||||
|
AND version = ?
|
||||||
|
AND license_key = ?
|
||||||
|
AND expiry_date = ?
|
||||||
|
AND licensed_to = ?
|
||||||
|
''', (
|
||||||
|
datos_licencia['software'],
|
||||||
|
datos_licencia['version'],
|
||||||
|
datos_licencia['license_key'],
|
||||||
|
datos_licencia['expiry_date'],
|
||||||
|
datos_licencia['licensed_to']
|
||||||
|
))
|
||||||
|
|
||||||
|
# Obtener el resultado de la consulta
|
||||||
|
resultado = cursor.fetchone()
|
||||||
|
conn.close()
|
||||||
|
|
||||||
|
# Verificar si se encontraron coincidencias
|
||||||
|
return resultado is not None
|
||||||
|
|
||||||
|
except pyodbc.Error as e:
|
||||||
|
print(f"Error al verificar la licencia en la base de datos: {str(e)}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
# Archivo de licencia cifrado
|
||||||
|
archivo_licencia = 'licencia.cbs'
|
||||||
|
|
||||||
|
# Frase de paso para descifrar
|
||||||
|
passphrase = '172999'
|
||||||
|
|
||||||
|
# Llamar a la función para leer, descifrar y validar la licencia
|
||||||
|
leer_descifrar_y_validar_licencia(archivo_licencia, passphrase)
|
||||||
|
|
||||||
|
|
||||||
|
|
126
leerlicencia3.py
Normal file
126
leerlicencia3.py
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
import gnupg
|
||||||
|
import json
|
||||||
|
import pyodbc
|
||||||
|
import argparse
|
||||||
|
|
||||||
|
# Función para obtener conexión a MSSQL
|
||||||
|
def obtener_conexion():
|
||||||
|
return pyodbc.connect(
|
||||||
|
'DRIVER={ODBC Driver 18 for SQL Server};'
|
||||||
|
'SERVER=140.82.58.83,14338;'
|
||||||
|
'DATABASE=licencias;'
|
||||||
|
'UID=sa;'
|
||||||
|
'PWD=hG0eT6P9CDXQmbVQ3S4IHPX5drBMVxog;'
|
||||||
|
'TrustServerCertificate=yes'
|
||||||
|
)
|
||||||
|
|
||||||
|
def leer_descifrar_y_validar_licencia(archivo_licencia, ambiente_esperado):
|
||||||
|
# Inicializar GPG
|
||||||
|
gpg = gnupg.GPG()
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Leer el archivo cifrado
|
||||||
|
with open(archivo_licencia, 'rb') as f:
|
||||||
|
contenido_cifrado = f.read()
|
||||||
|
|
||||||
|
# Descifrar los datos usando la clave privada de la YubiKey
|
||||||
|
descifrado = gpg.decrypt(contenido_cifrado, passphrase='172999')
|
||||||
|
|
||||||
|
if not descifrado.ok:
|
||||||
|
print(f"Error al descifrar los datos: {descifrado.status}")
|
||||||
|
return
|
||||||
|
|
||||||
|
print("Licencia descifrada correctamente.")
|
||||||
|
|
||||||
|
# Verificar la firma de los datos
|
||||||
|
verificacion = gpg.verify(descifrado.data)
|
||||||
|
|
||||||
|
if verificacion.valid:
|
||||||
|
print("La firma de la licencia es válida.")
|
||||||
|
else:
|
||||||
|
print("La firma de la licencia no es válida.")
|
||||||
|
print(f"Detalles de la verificación de la firma: {verificacion.stderr}")
|
||||||
|
return
|
||||||
|
|
||||||
|
# Extraer los datos JSON de la parte firmada
|
||||||
|
datos_firmados = descifrado.data.decode('utf-8')
|
||||||
|
|
||||||
|
# Buscar el comienzo del JSON real (después de los encabezados PGP)
|
||||||
|
json_inicio = datos_firmados.find("{")
|
||||||
|
json_final = datos_firmados.rfind("}")
|
||||||
|
|
||||||
|
if json_inicio == -1 or json_final == -1:
|
||||||
|
print("No se pudo encontrar el bloque JSON en los datos firmados.")
|
||||||
|
return
|
||||||
|
|
||||||
|
# Extraer el bloque JSON
|
||||||
|
datos_licencia_json = datos_firmados[json_inicio:json_final + 1]
|
||||||
|
|
||||||
|
# Convertir el JSON a un diccionario de Python
|
||||||
|
datos_licencia = json.loads(datos_licencia_json)
|
||||||
|
|
||||||
|
print("Datos de la licencia:")
|
||||||
|
print(datos_licencia)
|
||||||
|
|
||||||
|
# Verificar los datos contra la base de datos
|
||||||
|
if verificar_datos_contra_bd(datos_licencia):
|
||||||
|
print("La licencia es válida y coincide con los datos en la base de datos.")
|
||||||
|
|
||||||
|
# Verificar el tipo de ambiente
|
||||||
|
if datos_licencia.get('environment') == ambiente_esperado:
|
||||||
|
print(f"La licencia es válida para el ambiente '{ambiente_esperado}'.")
|
||||||
|
else:
|
||||||
|
print(f"La licencia no es válida para el ambiente '{ambiente_esperado}'. Encontrado: {datos_licencia.get('environment')}")
|
||||||
|
else:
|
||||||
|
print("La licencia no coincide con los datos almacenados en la base de datos.")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error al leer, descifrar y validar la licencia: {str(e)}")
|
||||||
|
|
||||||
|
def verificar_datos_contra_bd(datos_licencia):
|
||||||
|
try:
|
||||||
|
# Conectar a la base de datos MSSQL
|
||||||
|
conn = obtener_conexion()
|
||||||
|
cursor = conn.cursor()
|
||||||
|
|
||||||
|
# Consultar los datos de la licencia en la base de datos
|
||||||
|
cursor.execute('''
|
||||||
|
SELECT * FROM licencias
|
||||||
|
WHERE software = ?
|
||||||
|
AND version = ?
|
||||||
|
AND license_key = ?
|
||||||
|
AND expiry_date = ?
|
||||||
|
AND licensed_to = ?
|
||||||
|
AND environment = ?
|
||||||
|
''', (
|
||||||
|
datos_licencia['software'],
|
||||||
|
datos_licencia['version'],
|
||||||
|
datos_licencia['license_key'],
|
||||||
|
datos_licencia['expiry_date'],
|
||||||
|
datos_licencia['licensed_to'],
|
||||||
|
datos_licencia['environment']
|
||||||
|
))
|
||||||
|
|
||||||
|
# Obtener el resultado de la consulta
|
||||||
|
resultado = cursor.fetchone()
|
||||||
|
conn.close()
|
||||||
|
|
||||||
|
# Verificar si se encontraron coincidencias
|
||||||
|
return resultado is not None
|
||||||
|
|
||||||
|
except pyodbc.Error as e:
|
||||||
|
print(f"Error al verificar la licencia en la base de datos: {str(e)}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
# Configuración del analizador de argumentos
|
||||||
|
parser = argparse.ArgumentParser(description='Leer, descifrar y validar una licencia.')
|
||||||
|
parser.add_argument('archivo_licencia', type=str, help='Ruta del archivo de licencia cifrado')
|
||||||
|
parser.add_argument('ambiente', type=str, choices=['QA', 'Production'], help='Ambiente esperado de la licencia')
|
||||||
|
|
||||||
|
# Parsear los argumentos
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
# Llamar a la función para leer, descifrar y validar la licencia
|
||||||
|
leer_descifrar_y_validar_licencia(args.archivo_licencia, args.ambiente)
|
||||||
|
|
||||||
|
|
13
licencia.cbs
Normal file
13
licencia.cbs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
-----BEGIN PGP MESSAGE-----
|
||||||
|
|
||||||
|
jA0ECQMItYzVDXWX8s730sCxAaLP33uhsaSdKDEmAH1AWnUc16KWpGq7B/tjopN4
|
||||||
|
VbfUrqAHQm3I2rypI1Tqj031YK7JBd/8sLIsJ7oopi/pcgF+qgeECb6NEAKEGn1x
|
||||||
|
bTF8v8OJuPifJWlS1aw6EzbUg8xGHez3i0cNvVARpwm3DYdLFUps4CLINcPpyEZb
|
||||||
|
fwYaBXarxDNsdAGHR3yPPUmgP85lst0wR3gI3z3VOlZj2SA+6zcPsFfXZoi5pHbT
|
||||||
|
jaH9r1OBTpHpdqwxBleEUAwCQB5IpIV43TG7uWZ64gbJ54FhGPsJAUpYPzZMKsJK
|
||||||
|
BMefKjUA0laOTN6O3MLw3l0LTAhxjh1bVNgYSEL3QWwbbouyi9YurLbosFp1jovU
|
||||||
|
xbdvg5hAPrVW3cMWE/F3MAeIYBZecBPr6AT+pBCyFWXqUSXDmA0BmCYTRq/65tjG
|
||||||
|
g7n4MGKWlbghQXad4WhDwyvrNxJ70kZShUpXNrrpuC9v1WgF7NvjI3baBo0GraJT
|
||||||
|
gn72
|
||||||
|
=gsrq
|
||||||
|
-----END PGP MESSAGE-----
|
55
licencia.py
Normal file
55
licencia.py
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
import gnupg
|
||||||
|
import json
|
||||||
|
|
||||||
|
def firmar_y_cifrar_licencia(datos_licencia, passphrase):
|
||||||
|
# Inicializar GPG
|
||||||
|
gpg = gnupg.GPG()
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Convertir los datos de la licencia a JSON
|
||||||
|
datos_licencia_json = json.dumps(datos_licencia, indent=4)
|
||||||
|
|
||||||
|
# Firmar los datos de la licencia
|
||||||
|
firma = gpg.sign(message=datos_licencia_json, detach=False, passphrase=passphrase)
|
||||||
|
|
||||||
|
if not firma:
|
||||||
|
print("Error al firmar los datos.")
|
||||||
|
return
|
||||||
|
|
||||||
|
print("Datos firmados correctamente.")
|
||||||
|
|
||||||
|
# Convertir los datos firmados a bytes
|
||||||
|
datos_firmados = str(firma).encode('utf-8')
|
||||||
|
|
||||||
|
# Cifrar los datos firmados
|
||||||
|
cifrado = gpg.encrypt(data=datos_firmados, recipients=None, symmetric=True, passphrase=passphrase)
|
||||||
|
|
||||||
|
if not cifrado:
|
||||||
|
print("Error al cifrar los datos.")
|
||||||
|
return
|
||||||
|
|
||||||
|
# Guardar los datos cifrados en un archivo
|
||||||
|
archivo_salida = 'licencia.cbs'
|
||||||
|
with open(archivo_salida, 'wb') as f:
|
||||||
|
f.write(cifrado.data)
|
||||||
|
|
||||||
|
print(f"Datos cifrados y guardados en '{archivo_salida}' correctamente.")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error al firmar y cifrar los datos: {str(e)}")
|
||||||
|
|
||||||
|
# Datos de la licencia a firmar y cifrar
|
||||||
|
datos_licencia = {
|
||||||
|
"software": "MINDS",
|
||||||
|
"version": "1.0",
|
||||||
|
"license_key": "ABCD-EFGH-IJKL-MNOP",
|
||||||
|
"expiry_date": "2025-06-17",
|
||||||
|
"licensed_to": "USUARIO FAKE"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Frase de paso para acceder a la clave privada y para cifrar
|
||||||
|
passphrase = '172999'
|
||||||
|
|
||||||
|
# Llamar a la función para firmar y cifrar la licencia
|
||||||
|
firmar_y_cifrar_licencia(datos_licencia, passphrase)
|
||||||
|
|
98
licencia2.py
Normal file
98
licencia2.py
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
import gnupg
|
||||||
|
import json
|
||||||
|
import pyodbc
|
||||||
|
|
||||||
|
# Función para obtener conexión a MSSQL
|
||||||
|
def obtener_conexion():
|
||||||
|
return pyodbc.connect(
|
||||||
|
'DRIVER={ODBC Driver 18 for SQL Server};'
|
||||||
|
'SERVER=140.82.58.83,14338;'
|
||||||
|
'DATABASE=licencias;'
|
||||||
|
'UID=sa;'
|
||||||
|
'PWD=hG0eT6P9CDXQmbVQ3S4IHPX5drBMVxog;'
|
||||||
|
'TrustServerCertificate=yes'
|
||||||
|
)
|
||||||
|
|
||||||
|
def firmar_y_cifrar_licencia(datos_licencia, passphrase):
|
||||||
|
# Inicializar GPG
|
||||||
|
gpg = gnupg.GPG()
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Convertir los datos de la licencia a JSON
|
||||||
|
datos_licencia_json = json.dumps(datos_licencia, indent=4)
|
||||||
|
|
||||||
|
# Firmar los datos de la licencia
|
||||||
|
firma = gpg.sign(message=datos_licencia_json, detach=False, passphrase=passphrase)
|
||||||
|
|
||||||
|
if not firma:
|
||||||
|
print("Error al firmar los datos.")
|
||||||
|
return
|
||||||
|
|
||||||
|
print("Datos firmados correctamente.")
|
||||||
|
|
||||||
|
# Convertir los datos firmados a bytes
|
||||||
|
datos_firmados = str(firma).encode('utf-8')
|
||||||
|
|
||||||
|
# Cifrar los datos firmados
|
||||||
|
cifrado = gpg.encrypt(data=datos_firmados, recipients=None, symmetric=True, passphrase=passphrase)
|
||||||
|
|
||||||
|
if not cifrado.ok:
|
||||||
|
print(f"Error al cifrar los datos: {cifrado.status}")
|
||||||
|
return
|
||||||
|
|
||||||
|
# Guardar los datos cifrados en un archivo
|
||||||
|
archivo_salida = 'licencia.cbs'
|
||||||
|
with open(archivo_salida, 'wb') as f:
|
||||||
|
f.write(cifrado.data)
|
||||||
|
|
||||||
|
print(f"Datos cifrados y guardados en '{archivo_salida}' correctamente.")
|
||||||
|
|
||||||
|
# Almacenar los datos de la licencia en la base de datos MSSQL
|
||||||
|
almacenar_licencia_en_db(datos_licencia)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error al firmar y cifrar los datos: {str(e)}")
|
||||||
|
|
||||||
|
def almacenar_licencia_en_db(datos_licencia):
|
||||||
|
try:
|
||||||
|
# Conectar a la base de datos MSSQL
|
||||||
|
conn = obtener_conexion()
|
||||||
|
cursor = conn.cursor()
|
||||||
|
|
||||||
|
# Insertar los datos de la licencia en la tabla
|
||||||
|
cursor.execute('''
|
||||||
|
INSERT INTO licencias (software, version, license_key, expiry_date, licensed_to)
|
||||||
|
VALUES (?, ?, ?, ?, ?)
|
||||||
|
''', (
|
||||||
|
datos_licencia['software'],
|
||||||
|
datos_licencia['version'],
|
||||||
|
datos_licencia['license_key'],
|
||||||
|
datos_licencia['expiry_date'],
|
||||||
|
datos_licencia['licensed_to']
|
||||||
|
))
|
||||||
|
|
||||||
|
# Confirmar los cambios y cerrar la conexión
|
||||||
|
conn.commit()
|
||||||
|
conn.close()
|
||||||
|
|
||||||
|
print("Datos de la licencia almacenados en la base de datos correctamente.")
|
||||||
|
|
||||||
|
except pyodbc.Error as e:
|
||||||
|
print(f"Error al almacenar la licencia en la base de datos: {str(e)}")
|
||||||
|
|
||||||
|
# Datos de la licencia a firmar y cifrar
|
||||||
|
datos_licencia = {
|
||||||
|
"software": "MINDS",
|
||||||
|
"version": "1.0",
|
||||||
|
"license_key": "ABCD-EFGH-IJKL-MNOP",
|
||||||
|
"expiry_date": "2025-06-17",
|
||||||
|
"licensed_to": "USUARIO FAKE"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Frase de paso para acceder a la clave privada y para cifrar
|
||||||
|
passphrase = '172999'
|
||||||
|
|
||||||
|
# Llamar a la función para firmar y cifrar la licencia
|
||||||
|
firmar_y_cifrar_licencia(datos_licencia, passphrase)
|
||||||
|
|
||||||
|
|
88
licencia3.py
Normal file
88
licencia3.py
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
import gnupg
|
||||||
|
import json
|
||||||
|
import pyodbc
|
||||||
|
import secrets
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
# Inicializar GPG
|
||||||
|
gpg = gnupg.GPG()
|
||||||
|
|
||||||
|
# Generar una clave de licencia aleatoria
|
||||||
|
def generar_clave_licencia():
|
||||||
|
return secrets.token_urlsafe(16) # Genera una cadena aleatoria de 16 caracteres URL-safe
|
||||||
|
|
||||||
|
# Crear una nueva licencia con una clave aleatoria
|
||||||
|
def crear_licencia(environment):
|
||||||
|
datos_licencia = {
|
||||||
|
"software": "MINDS",
|
||||||
|
"version": "1.0",
|
||||||
|
"license_key": generar_clave_licencia(), # Clave de licencia aleatoria
|
||||||
|
"expiry_date": "2025-06-17",
|
||||||
|
"licensed_to": "USUARIO FAKE",
|
||||||
|
"environment": environment
|
||||||
|
}
|
||||||
|
|
||||||
|
# Convertir los datos a JSON
|
||||||
|
datos_json = json.dumps(datos_licencia, indent=4)
|
||||||
|
|
||||||
|
# Firmar los datos con la YubiKey
|
||||||
|
firma = gpg.sign(datos_json, passphrase='172999')
|
||||||
|
|
||||||
|
if not firma:
|
||||||
|
print("Error al firmar los datos.")
|
||||||
|
exit()
|
||||||
|
|
||||||
|
# Datos firmados convertidos a cadena
|
||||||
|
datos_firmados = str(firma)
|
||||||
|
|
||||||
|
# Cifrar los datos firmados usando cifrado asimétrico
|
||||||
|
cifrado = gpg.encrypt(datos_firmados, recipients=None, symmetric=True, passphrase='172999')
|
||||||
|
|
||||||
|
if not cifrado.ok:
|
||||||
|
print(f"Error al cifrar los datos: {cifrado.status}")
|
||||||
|
exit()
|
||||||
|
|
||||||
|
# Guardar los datos cifrados en un archivo
|
||||||
|
archivo_licencia = f'licencia{environment.lower()}.cbs'
|
||||||
|
with open(archivo_licencia, 'wb') as f:
|
||||||
|
f.write(cifrado.data)
|
||||||
|
|
||||||
|
print("Datos firmados correctamente.")
|
||||||
|
print(f"Datos cifrados y guardados en '{archivo_licencia}' correctamente.")
|
||||||
|
|
||||||
|
# Almacenar los datos en la base de datos
|
||||||
|
try:
|
||||||
|
conn = pyodbc.connect(
|
||||||
|
'DRIVER={ODBC Driver 18 for SQL Server};'
|
||||||
|
'SERVER=140.82.58.83,14338;'
|
||||||
|
'DATABASE=licencias;'
|
||||||
|
'UID=sa;'
|
||||||
|
'PWD=hG0eT6P9CDXQmbVQ3S4IHPX5drBMVxog;'
|
||||||
|
'TrustServerCertificate=yes'
|
||||||
|
)
|
||||||
|
cursor = conn.cursor()
|
||||||
|
|
||||||
|
cursor.execute('''
|
||||||
|
INSERT INTO licencias (software, version, license_key, expiry_date, licensed_to, environment)
|
||||||
|
VALUES (?, ?, ?, ?, ?, ?)
|
||||||
|
''', (
|
||||||
|
datos_licencia['software'],
|
||||||
|
datos_licencia['version'],
|
||||||
|
datos_licencia['license_key'],
|
||||||
|
datos_licencia['expiry_date'],
|
||||||
|
datos_licencia['licensed_to'],
|
||||||
|
datos_licencia['environment']
|
||||||
|
))
|
||||||
|
|
||||||
|
conn.commit()
|
||||||
|
conn.close()
|
||||||
|
print("Licencia almacenada en la base de datos correctamente.")
|
||||||
|
|
||||||
|
except pyodbc.Error as e:
|
||||||
|
print(f"Error al almacenar la licencia en la base de datos: {str(e)}")
|
||||||
|
|
||||||
|
# Generar licencia para QA
|
||||||
|
crear_licencia('QA')
|
||||||
|
|
||||||
|
# Generar licencia para Production
|
||||||
|
crear_licencia('Production')
|
13
licenciaproduction.cbs
Normal file
13
licenciaproduction.cbs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
-----BEGIN PGP MESSAGE-----
|
||||||
|
|
||||||
|
jA0ECQMIfA04dIN73U720sDIAVQpbTv/aI4WYB5Yn5rBQhJrlvefv4FNeNNnmSXT
|
||||||
|
PJ23A+Diw00BGJilpwM+APaBAlCl68N/FoE1/T7h/YJ/iXns1tJ19hOSmGEy3oOl
|
||||||
|
bh5ZckJ7I4O1W30tTnD0B4WjXFJinvhqA/5fuggCYbMpNaCsRI4imQj6AwFKTkOe
|
||||||
|
y0uEXwPoDjNVc75SpezCRrFG/1DRa/oHutvo9M3wH4PSHRLyLSLsYeDTUcnrJPGl
|
||||||
|
093u487tOuW4qoxc1ouLWJ2uN40lRgp62rnuoP/W3wY1mYEPCb0wEBWMuWGcGmsr
|
||||||
|
vdcow4/ZILWHqEIiBQxPVecZ9B2uKJUBa+nf9PS4RbHFG06/069WdXIIl3vane5T
|
||||||
|
ci6am+E7jDdTSxNE5qwIRtChlzeMOaiPoLMH3nQRJoQEFLzRhpDF7WY3FmhSNf1s
|
||||||
|
Gu3zxQ65ekHTPeox23hAd12zD1vOyc/kf+xYHpJsT8ZR41sPVRV7+vYAS3E5t3Uq
|
||||||
|
rShydZZBqq22ArldUOAq9QyBHKj3SCtBxqE=
|
||||||
|
=ziRe
|
||||||
|
-----END PGP MESSAGE-----
|
13
licenciaqa.cbs
Normal file
13
licenciaqa.cbs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
-----BEGIN PGP MESSAGE-----
|
||||||
|
|
||||||
|
jA0ECQMIFRf5KGxidqL20sDCAad/AfSgfWYSAIi6ebidEr3qIJJI66xvabrLHLAS
|
||||||
|
A7hTzND9CK/kjwNdm9Rs20vkFeE0ibuDycLR9Xt6fjei+Jyw6zq0+aXRwLm8Ovl1
|
||||||
|
u1p0rDg3ptcFEbPizmV5zjcjNueAxNePB9Xa9nMI7BObJ0Z4JuoKnfgJzGOSaCA1
|
||||||
|
2DNWHXwjfh0ziEqHbj7yAazULlfjV5lIXv1XZ9hWFPig9HsMQv0gexvTb++/0ces
|
||||||
|
GZRAkctkSAjBBgwLjV44CV0gGRoOCC1wNRiOAg3UgfO0fCAwvOQGdKcRFxbIv6oZ
|
||||||
|
SXHVACSCLEdWauM7kgC4MgNje3eJJjAJd+8wTLnFcpUvJ1ZavY/mv9T/ZVow3UaW
|
||||||
|
Fs0BZ9M+DGoY18UDPEtmGLmFkIgjGXIDwj3BdV8KMZoOfOKKp/CgWQRuGTq3eSKs
|
||||||
|
DJacewt1QqM5UgwEdwAzsRe0vjnyR2UU/eHCSFxDYu/6K4HlvQijP/To8DNggbeB
|
||||||
|
oP3HhJ/P0ZIlzPojV4LLtz87F50=
|
||||||
|
=rHhN
|
||||||
|
-----END PGP MESSAGE-----
|
Loading…
Reference in New Issue
Block a user