We Chall
Sfide di sicurezza informatica e WeChall solutions.
WeChall Writeups
Crypto - Caesar I
Solved
Crypto - Caesar I
SolvedConsegna
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;
}
Crypto - Transposition
Solved
Crypto - Transposition
SolvedConsegna
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.