Ok, faccio scoppiare la bomba io scrivendo: "tutti@quei@momenti@andranno@perduti@nel@tempo@come@lacrime@nella@pioggia". La chiave è semplicemente "roy". Colgo l'occasione per farti i complimenti: ti seguo da molto tempo, ma non ho mai commentato finora. Trovo ammirevole il modo in cui ti interfacci con chi ti segue e il tuo impegno e la costanza nel produrre contenuti validi.
La bomba è stata disinnescata! Se hai la possibilità di condividere il codice (o il ragionamento) che hai utilizzato, ne parlo in un prossimo video per valutarne la velocità. Complimenti!
@@1001avventura Grazie! Ti ho appena inviato una mail con un link a un repl che mostra come ho fatto a trovare la soluzione, includendo spiegazione, codice, e una paginetta dinamica per risolvere il caso generico.
In passato mi ero appassionato alla crittografia ed avevo implementato, sul Commodore 64, un algoritmo che utilizzava l'OR esclusivo. Dunque un algoritmo simmetrico che era reversibile, quindi crittografava e decrittografava mediante lo stesso codice di programmazione. L'assembly del 6502 supporta l'operatore "eor" che implementa nativamente l'or esclusivo (xor) tra due operandi. Sul basic standard del C64 tale operatore non è disponibile ma si può ovviare con una operazione di emulazione: xor = (x or y) and not (x and y). Per rimembrare il passato ho scritto il semplice codice in allegato. La stringa crittografata è scritta tra apici in quanto l'operazione boolean tra il carattere del testo e il corrispondente carattere della chiave potrebbe ricadere nei famosi "control codes" tipici dei computer della famiglia Commodore e dunque la stampa della stringa potrebbe essere illeggibile poiché potrebbe eseguire alcune funzioni di layout del C64, come pulizia dello schermo, spostamento del cursore, ecc. Probabilmente si potrebbe ovviare stampando i codici ascii numericamente e non attraverso la rappresentazione grafica (chr$). A presto. 10 rem crypto algorithm with exclusive or (eor in assembly 6502) 20 rem in basic emulated by (x OR y) AND NOT (x AND y) 30 input "testo: ";t$ 40 input "chiave: ";k$ 45 lt = len(t$) 50 lk = len(k$) 60 z$ = chr$(34) 70 ct=1 80 for i=1 to lt 90 t=asc(mid$(t$,i,1)) 100 k=asc(mid$(k$,ct,1)) 110 z = ((t or k) and not (t and k)) 120 z$ = z$ + chr$(z) 130 ct=ct+1 140 if ct>lk then ct=1 150 next 160 z$ = z$ + chr$(34) 170 print z$
Complimenti! Siete addirittura tre che mi avete detto di averci provato (e ci siete pure riusciti). Pensavo che nessuno accettasse la sfida. Grazie per l'email
Salve, mi permetto di mettere qui una versione TASM (piccola e semplice) del cifrario di Cesare. Magari puo' tornare utile per il corso in assembly X86. P.S: Per quanto riguarda la crittografazione in generale si potrebbe fare accenno anche alla Steganografia. Complimenti. Luca Rigamonti .MODEL small .STACK .DATA TestoInChiaro DB "Mille e un'avventura",0Dh,0Ah,'$' TestoCifrato DB 32 DUP (?),0Dh,0Ah,'$' ShiftCesare EQU 3 .CODE MAIN PROC FAR MOV AX, @data MOV DS, AX MOV SI, OFFSET TestoInChiaro MOV AX, DS MOV ES, AX ; Let ES = DS MOV DI, OFFSET TestoCifrato CLD MOV CX, 32 @@Loop1: LODSB ADD AL, ShiftCesare MOV [ES:DI], AL INC DI LOOP @@Loop1 MOV DX, OFFSET TestoInChiaro MOV AH, 9 INT 21h MOV DX, OFFSET TestoCifrato MOV AH, 9 INT 21h TerminateProgram: MOV AX, 04C00h INT 21h MAIN ENDP END MAIN
Ok, faccio scoppiare la bomba io scrivendo: "tutti@quei@momenti@andranno@perduti@nel@tempo@come@lacrime@nella@pioggia". La chiave è semplicemente "roy". Colgo l'occasione per farti i complimenti: ti seguo da molto tempo, ma non ho mai commentato finora. Trovo ammirevole il modo in cui ti interfacci con chi ti segue e il tuo impegno e la costanza nel produrre contenuti validi.
La bomba è stata disinnescata! Se hai la possibilità di condividere il codice (o il ragionamento) che hai utilizzato, ne parlo in un prossimo video per valutarne la velocità. Complimenti!
@@1001avventura Grazie! Ti ho appena inviato una mail con un link a un repl che mostra come ho fatto a trovare la soluzione, includendo spiegazione, codice, e una paginetta dinamica per risolvere il caso generico.
@@robertoallegra grazie mille! Mi risparmi un sacco di lavoro
In passato mi ero appassionato alla crittografia ed avevo implementato, sul Commodore 64, un algoritmo che utilizzava l'OR esclusivo. Dunque un algoritmo simmetrico che era reversibile, quindi crittografava e decrittografava mediante lo stesso codice di programmazione. L'assembly del 6502 supporta l'operatore "eor" che implementa nativamente l'or esclusivo (xor) tra due operandi.
Sul basic standard del C64 tale operatore non è disponibile ma si può ovviare con una operazione di emulazione: xor = (x or y) and not (x and y).
Per rimembrare il passato ho scritto il semplice codice in allegato. La stringa crittografata è scritta tra apici in quanto l'operazione boolean tra il carattere del testo e il corrispondente carattere della chiave potrebbe ricadere nei famosi "control codes" tipici dei computer della famiglia Commodore e dunque la stampa della stringa potrebbe essere illeggibile poiché potrebbe eseguire alcune funzioni di layout del C64, come pulizia dello schermo, spostamento del cursore, ecc. Probabilmente si potrebbe ovviare stampando i codici ascii numericamente e non attraverso la rappresentazione grafica (chr$). A presto.
10 rem crypto algorithm with exclusive or (eor in assembly 6502)
20 rem in basic emulated by (x OR y) AND NOT (x AND y)
30 input "testo: ";t$
40 input "chiave: ";k$
45 lt = len(t$)
50 lk = len(k$)
60 z$ = chr$(34)
70 ct=1
80 for i=1 to lt
90 t=asc(mid$(t$,i,1))
100 k=asc(mid$(k$,ct,1))
110 z = ((t or k) and not (t and k))
120 z$ = z$ + chr$(z)
130 ct=ct+1
140 if ct>lk then ct=1
150 next
160 z$ = z$ + chr$(34)
170 print z$
Sembra facile da implementare in Assembly. La prossima settimana si fa interessante!
E grazie per il codice
@@1001avventura Grazie a te per gli spunti sempre interessanti che proponi su questo bel canale. 👍😉
Ieri sera ero troppo cotto dalla stanchezza, comunque anch'io ci sono arrivato! Ti ho mandato la mia soluzione in email. Saluti!!! 😉
Complimenti! Siete addirittura tre che mi avete detto di averci provato (e ci siete pure riusciti). Pensavo che nessuno accettasse la sfida. Grazie per l'email
@@1001avventura Grazie a te che dimostri sempre grande apertura verso la community e questo non è da poco. Sei un grande! 💪
Buonasera, sono 2 ore che mi scervello... sono arrivato a: "wadioi". Domanda... sono sulla buona strada?
Cos'è wadioi? La chiave? È più corta.
E complimenti per Rcrypt. Non ci sarei mai arrivato senza spiegazione.
@@1001avventura Grazie🙂
ci riprovo ma non credo di farcela 😞
Salve,
mi permetto di mettere qui una versione TASM (piccola e semplice) del cifrario di Cesare.
Magari puo' tornare utile per il corso in assembly X86.
P.S: Per quanto riguarda la crittografazione in generale si potrebbe fare accenno anche alla Steganografia.
Complimenti.
Luca Rigamonti
.MODEL small
.STACK
.DATA
TestoInChiaro DB "Mille e un'avventura",0Dh,0Ah,'$'
TestoCifrato DB 32 DUP (?),0Dh,0Ah,'$'
ShiftCesare EQU 3
.CODE
MAIN PROC FAR
MOV AX, @data
MOV DS, AX
MOV SI, OFFSET TestoInChiaro
MOV AX, DS
MOV ES, AX ; Let ES = DS
MOV DI, OFFSET TestoCifrato
CLD
MOV CX, 32
@@Loop1:
LODSB
ADD AL, ShiftCesare
MOV [ES:DI], AL
INC DI
LOOP @@Loop1
MOV DX, OFFSET TestoInChiaro
MOV AH, 9
INT 21h
MOV DX, OFFSET TestoCifrato
MOV AH, 9
INT 21h
TerminateProgram:
MOV AX, 04C00h
INT 21h
MAIN ENDP
END MAIN
Grazie! Mi tornerà utile