Greasy Fork is available in English.
Obtener llave mediante las mayúsculas, contar clases M y descifrar mensajes
// ==UserScript==
// @name Laboratorio 4 Sebastian Gonzalez
// @namespace http://tampermonkey.net/
// @version 0.1
// @description Obtener llave mediante las mayúsculas, contar clases M y descifrar mensajes
// @author Sebastián González
// @match https://cripto.tiiny.site/
// @grant none
// @require https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.2.0/crypto-js.min.js#sha512-a+SUDuwNzXDvz4XrIcXHuCf089/iJAoN4lmrXJg18XnduKK6YlDHNRalv4yd1N40OKI80tFidF+rqTFKGPoWFQ==
// ==/UserScript==
(function() {
'use strict';
// Función para obtener llave
function obtenerLlave() {
const contenido = document.body.innerText;
const regex = /(?:^|[.!?]\s)([A-ZÁÉÍÓÚÑ])/g;
let matches;
const mayusculasEncontradas = [];
while ((matches = regex.exec(contenido)) !== null) {
mayusculasEncontradas.push(matches[1]);
}
if (mayusculasEncontradas.length > 0) {
const mayusculasUnicas = mayusculasEncontradas.join('');
console.log('La llave es:', mayusculasUnicas);
return mayusculasUnicas;
} else {
console.log('No se encontró la llave.');
return null;
}
}
// Función para contar mensajes cifrados y guardar los IDs
function contarMcifrados() {
const divsConClasesM = document.querySelectorAll('div[class^="M"]');
const cantidadDivs = divsConClasesM.length;
const idsMensajes = [];
divsConClasesM.forEach((div) => {
const id = div.id;
idsMensajes.push(id);
});
console.log(`Los mensajes cifrados son: ${cantidadDivs}`);
// Llamar a la función para descifrar mensajes
const llave = obtenerLlave();
if (llave) {
const mensajesDescifrados = desencriptarMatriz(idsMensajes, llave);
for (let i = 0; i < Math.min(idsMensajes.length, mensajesDescifrados.length); i++) {
console.log(`${idsMensajes[i]} ${mensajesDescifrados[i]}`);
}
// Mostrar los mensajes descifrados en el HTML
mostrarMensajesDescifrados(mensajesDescifrados);
}
}
// Función para desencriptar una matriz de valores en base64 utilizando 3DES
function desencriptarMatriz(matrizEncriptada, clave) {
return matrizEncriptada.map(function(valorEnBase64) {
var valorDecodificado = CryptoJS.enc.Base64.parse(valorEnBase64);
var key = CryptoJS.enc.Utf8.parse(clave);
var decrypted = CryptoJS.TripleDES.decrypt({
ciphertext: valorDecodificado
}, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return CryptoJS.enc.Utf8.stringify(decrypted);
});
}
// Función para mostrar mensajes descifrados en el HTML
function mostrarMensajesDescifrados(mensajesDescifrados) {
// Crear un contenedor para mostrar los mensajes descifrados
const contenedorMensajes = document.createElement('div');
contenedorMensajes.id = 'mensajesDescifradosContainer';
document.body.appendChild(contenedorMensajes);
// Mostrar cada mensaje descifrado en el contenedor
mensajesDescifrados.forEach((mensaje, index) => {
const elementoMensaje = document.createElement('p');
elementoMensaje.textContent = `${mensaje}`;
contenedorMensajes.appendChild(elementoMensaje);
});
}
// Llamar a ambas funciones al cargar la página
window.addEventListener('load', () => {
contarMcifrados();
});
})();