We Chall

Sfide di sicurezza informatica e WeChall solutions.

WeChall Writeups

Crypto - Caesar I

Solved

Consegna

La cifratura di Cesare (Caesar cipher) è una forma di cifratura a sostituzione, dove ogni lettera nel testo è spostata di un numero fisso di posizioni lungo l'alfabeto.
Nella sua forma più semplice, ogni lettera è sostituita dalla lettera che si trova un certo numero fisso di posizioni dopo di essa nell'alfabeto.
Per risolvere il testo cifrato di Cesare, è necessario conoscere il numero di posizioni (noto come "shift") utilizzato per cifrare il testo. Puoi provare tutte le possibili combinazioni di shift fino a quando il testo cifrato ha senso.
Testo cifrato da analizzare :
AOL XBPJR IYVDU MVE QBTWZ VCLY AOL SHGF KVN VM JHLZHY HUK FVBY BUPXBL ZVSBAPVU PZ ILWOYLIMIKNL

Soluzione

Il testo è cifrato con il cifrario di Cesare. Provando tutti gli shift possibili, si scopre che lo shift corretto è 7.


#include <iostream>
#include <string>
#include <cctype>

std::string decryptCaesar(const std::string& ciphertext, int shift) {
    std::string decryptedText;

    for (char c : ciphertext) {
        if (isalpha(c)) {
            char base = isupper(c) ? 'A' : 'a';
            decryptedText += (c - base - shift + 26) % 26 + base;
        } else {
            decryptedText += c;
        }
    }
    return decryptedText;
}

int main() {
    std::string ciphertext =
    "AOL XBPJR IYVDU MVE QBTWZ VCLY AOL SHGF 
    KVN VM JHLZHY HUK FVBY BUPXBL ZVSBAPVU PZ 
    ILWOYLIMIKNL";

    for (int shift = 1; shift <= 25; ++shift) {
        std::cout << "Shift " << shift << ": "
            << decryptCaesar(ciphertext, shift) << std::endl;
    }

    std::cout << "\nTesto decifrato (shift = 7):\n";
    std::cout << decryptCaesar(ciphertext, 7) << std::endl;

    return 0;
}
                                
THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG OF CAESAR AND YOUR UNIQUE SOLUTION IS BEPHREBFBDGE

Crypto - Transposition

Solved

Consegna

Sembra che i cifrari a sostituzione siano troppo semplici per te. Dalla mia esperienza personale posso dirti che i cifrari a trasposizione sono più difficile da attaccare. Comunque, in questa sfida di allenamento non dovresti avere problemi nel recuperare il testo originale.
Testo cifrato da analizzare :
cEeciznola.eP ou ielggre elim seasggoif caliemtn euqnaodl eelttre eosonn leg uits oroiden .ePsn ohc eitf rabeebp aiecera everl aut aosulizno ero:ar mppdnolrhr.p

Soluzione

il Trick qui era scambiare le lettere adiacenti : logica di scambio dei caratteri adiacenti per decifrare il cifrario a trasposizione.


#include <iostream>
#include <string>

int main() {
    // Testo cifrato
    std::string code = 
    "cEeciznola.eP ou ielggre elim seasggoif caliemtn "
    "euqnaodl  eelttre eosonn leg uits oroiden .ePsn "
    "ohc eitf rabeebp aiecera everl  aut aosulizno "
    "ero:ar mppdnolrhr.p";

    // Decifratura
    std::string decryptedText;
    for (int i = 0; i < code.length(); i += 2) {
        decryptedText += code[i + 1];
        decryptedText += code[i];
    }

    // Stampa del risultato
    std::cout << "Testo decifrato: " << decryptedText << std::endl;

    return 0;
}

//SOLUZIONE
//Eccezionale. Puoi leggere il messaggio facilmente quando le lettere sono nel giusto ordine. 
//Penso che ti farebbe piacere avere la tua soluzione ora: rpmdponrlrhp.