99 lines
2.9 KiB
Python
99 lines
2.9 KiB
Python
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)
|
|
|
|
|