Ritornare a testo iniziale dopo aver fatto x mod 255

Hai una curiosità o un problema con Game Maker? Domanda e ti sarà risposto!
Rispondi
Avatar utente
Xxshark888xX
Membro d'elite
Messaggi: 1497
Iscritto il: 30/05/2012, 19:17
Specialità: Un poco di tutto
Uso: GM:Studio 1.4 Pro
Località: Earth
Contatta:

Ritornare a testo iniziale dopo aver fatto x mod 255

Messaggio da Xxshark888xX »

Salve! Di nuovo con una domanda "matematica" e con questo maledetto modulo...

Comunque. Diciamo che l'utente inserisca un carattere che va oltre il valore 255 (ASCII UTF-8), (per esempio il carattere ť) e che io voglia farlo rientrare nel range 0-255. Ora naturalmente faccio 357 % 256 e il risultato sara' 101 - e.

Bene, poi io dovrei pero' restituire all'utente il carattere iniziale (ť con valore 357) partendo dal carattere modificato (e con valore 101).

Se faccio 101 + 256 ri-ottengo 357. Ma se ad esempio l'utente inserisce che ne so, ʚ (valore 666 :asd: ) e faccio 666 mod 256 = 154 poi per ritrovarlo 154 + 256, ottengo 410, ma se ri-faccio 410 + 256 allora ottengo 666. Ma come diamine faccio a sapere per quante volte dovrei moltiplicare 256?
Contatti
Steam
Facebook

Gif
Spoiler
Immagine
Immagine
Immagine
Immagine

Avatar utente
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: Ritornare a testo iniziale dopo aver fatto x mod 255

Messaggio da BaronVsCorsar »

Non puoi,
la funzione modulo non è una funzione invertibile
y= f(x)
se la funzione è invertibile esiste una f' tale che
f'(y)= x

se non è invertibile non esiste nessuna funzione con quelle caratteristiche.

Del resto come ben sai una funzione per essere invertibile deve essere biettiva, quindi tra le altre caratteristiche DEVE avere per ogni x associata UNA E UNA SOLA y, e deve esserci una sola x che da come risutlato quella specifica y.

invece se consideri il modulo 256 come una funzione, per ogni risultato (y) hai infiniti numeri che te lo possono dare (infinite x).
E' ovvio, anche senza scomodare la matematica, che se non hai altre informazioni non è possibile risalire ad una x "giusta".

Del resto alle 17 di pomeriggio ti dico che ho comprato una caramella 112 ore fa, tu puoi rispondermi che l'ho comprata alle ore 01.00 di 16 giorni fa.
basta fare 112 mod 24 (che fa 16) e 112 div 24 (che fa 4).
Poichè sono le 17, 4 giorni e 16 ore fa era l'una di notte.

Ma se io ti dico che ho comprato la caramella all'una di notte (quindi sai che (x mod 24 fa 16), non potrai mai capire quante ore prima l'ho comprata, a meno di avere un'altra informazione (tipo che era 4 giorni fa).

Forse ti conviene cercare di spiegare cosa vuoi fare con quei conti, perchè potrebbe essere che l'informazione aggiuntiva sia disponibile, ma descritto come lo hai fatto tu semplicemente la risposta rimane: "non è possibile"
ImmagineSchiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?

Avatar utente
Xxshark888xX
Membro d'elite
Messaggi: 1497
Iscritto il: 30/05/2012, 19:17
Specialità: Un poco di tutto
Uso: GM:Studio 1.4 Pro
Località: Earth
Contatta:

Re: Ritornare a testo iniziale dopo aver fatto x mod 255

Messaggio da Xxshark888xX »

BaronVsCorsar ha scritto:Non puoi,
la funzione modulo non è una funzione invertibile
y= f(x)
se la funzione è invertibile esiste una f' tale che
f'(y)= x

se non è invertibile non esiste nessuna funzione con quelle caratteristiche.

Del resto come ben sai una funzione per essere invertibile deve essere biettiva, quindi tra le altre caratteristiche DEVE avere per ogni x associata UNA E UNA SOLA y, e deve esserci una sola x che da come risutlato quella specifica y.

invece se consideri il modulo 256 come una funzione, per ogni risultato (y) hai infiniti numeri che te lo possono dare (infinite x).
E' ovvio, anche senza scomodare la matematica, che se non hai altre informazioni non è possibile risalire ad una x "giusta".

Del resto alle 17 di pomeriggio ti dico che ho comprato una caramella 112 ore fa, tu puoi rispondermi che l'ho comprata alle ore 01.00 di 16 giorni fa.
basta fare 112 mod 24 (che fa 16) e 112 div 24 (che fa 4).
Poichè sono le 17, 4 giorni e 16 ore fa era l'una di notte.

Ma se io ti dico che ho comprato la caramella all'una di notte (quindi sai che (x mod 24 fa 16), non potrai mai capire quante ore prima l'ho comprata, a meno di avere un'altra informazione (tipo che era 4 giorni fa).

Forse ti conviene cercare di spiegare cosa vuoi fare con quei conti, perchè potrebbe essere che l'informazione aggiuntiva sia disponibile, ma descritto come lo hai fatto tu semplicemente la risposta rimane: "non è possibile"
Sto creando un piccolo algoritmo che cifra/decifra un testo in base alla chiave inserita, funziona, ma vorrei riuscire a far diventare i caratteri cifrati uguali ad un carattere con valore che va da 0 a 255 (naturalmente questo in base alla keystream, quindi anche se avro' due caratteri uguali nel plain text, nel cipher text saranno diversi. Questo gia' avviene, ma rimane il fatto che possono superare il valore di 255) (quindi un carattere della tabella ASCII), in pratica come fa l'algoritmo RC4. Ho visto che se anche metto un carattere con valore piu' grande di 255 lo fa rientrare comunque dentro al range dell'ASCII, pero' poi se lo decodifico ritorna al suo valore inziale che puo' essere maggiore di 255.

Ho bisogno di cio' perche', se ad esempio utilizzo una chiave da 256-bit ed un testo MOLTO lungo, automaticamente mi da' un errore, dato che il carattere che dovrebbe essere cifrato supera persino i valori massimi di UNICODE. Risolverei cio' (e ho testato) rimanendo in uno specifico range, ma il problema e' che non riesco poi a decodificare, o meglio, ci sono riuscito, ma solo se il carattere che dovrebbe venir cifrato rimane nella soglia di 512 (valore decimale), se superato questo valore sballa tutto.

Spero di essere riuscito a spiegarmi

P.S: Sto creando questo algoritmo a solo scopo di comprendere meglio alcune cose, nulla di serio.
Contatti
Steam
Facebook

Gif
Spoiler
Immagine
Immagine
Immagine
Immagine

Avatar utente
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: Ritornare a testo iniziale dopo aver fatto x mod 255

Messaggio da BaronVsCorsar »

Uhm... non conosco l'algoritmo RC4, ma ritengo tu stia sbagliando l'approccio.
Se devi crittografare, dimentica il significato originale dei tuoi dati, che siano musica, un video, o un file di testo, consideralo come file binario, e codifica byte per byte (volendo lo puoi interpretare come un carattere ascii, anceh se in realtà non lo è!).

Infatti unicode ha il grosso svantaggio che a priori non sai quanti byte occuperà un singolo carattere quindi.
Inoltre crittografando a carattere unicode (quindi a volte crittograferai più byte con un solo simbolo!) stai dando informazioni sulla natura originaria del testo!

Quindi a parere mio devi lavorare a byte (dimenticandoti il suo originale significato).
Quando decrittografi lo farai ancora a byte: se la tua operazione è stata corretta avrai usato una funzione invertibile (e durante la decrittografia avrai usato la famosa f^-1() ) e riottenuto la sequenza originale di byte.
A questo punto, interpretandoli come caratteri unicode, se non ci sono errori, troverai il tuo testo originale.
ImmagineSchiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?

Avatar utente
Xxshark888xX
Membro d'elite
Messaggi: 1497
Iscritto il: 30/05/2012, 19:17
Specialità: Un poco di tutto
Uso: GM:Studio 1.4 Pro
Località: Earth
Contatta:

Re: Ritornare a testo iniziale dopo aver fatto x mod 255

Messaggio da Xxshark888xX »

BaronVsCorsar ha scritto:Uhm... non conosco l'algoritmo RC4, ma ritengo tu stia sbagliando l'approccio.
Se devi crittografare, dimentica il significato originale dei tuoi dati, che siano musica, un video, o un file di testo, consideralo come file binario, e codifica byte per byte (volendo lo puoi interpretare come un carattere ascii, anceh se in realtà non lo è!).

Infatti unicode ha il grosso svantaggio che a priori non sai quanti byte occuperà un singolo carattere quindi.
Inoltre crittografando a carattere unicode (quindi a volte crittograferai più byte con un solo simbolo!) stai dando informazioni sulla natura originaria del testo!

Quindi a parere mio devi lavorare a byte (dimenticandoti il suo originale significato).
Quando decrittografi lo farai ancora a byte: se la tua operazione è stata corretta avrai usato una funzione invertibile (e durante la decrittografia avrai usato la famosa f^-1() ) e riottenuto la sequenza originale di byte.
A questo punto, interpretandoli come caratteri unicode, se non ci sono errori, troverai il tuo testo originale.
Il fatto e' che riesco a decriptare solamente il primo carattere, il primo carattere puo' avere qualsiasi valore binario, non importa, lo decriptera' a dovere, partendo dal secondo no. Ma non capisco perche', l'unica differenza che c'e' tra il decriptare il primo carattere e gli altri e' che il primo viene calcolato in base ad un IV invece il secondo in base al primo carattere gia' cifrato, il terzo in base al secondo e cosi' via. Quindi l'operazione e' la stessa, ma stranamente (ma forse sono io che non capisco un ca**o) non mi ritorna la giusta sequenza di bit.
Contatti
Steam
Facebook

Gif
Spoiler
Immagine
Immagine
Immagine
Immagine

Avatar utente
Xxshark888xX
Membro d'elite
Messaggi: 1497
Iscritto il: 30/05/2012, 19:17
Specialità: Un poco di tutto
Uso: GM:Studio 1.4 Pro
Località: Earth
Contatta:

Re: Ritornare a testo iniziale dopo aver fatto x mod 255

Messaggio da Xxshark888xX »

Ok, sono riuscito a farlo funzionare, cripta e decripta tutti i caratteri (range 0-255, anche se il carattere immesso come testo in chiaro puo' avere valore, 666). Il problema che ho notato e'. che se ad esempio voglio criptare un testo piu' lungo di (circa) 60 caratteri, me lo taglia a 60 caratteri, o 59, o dipende. Non conta neanche la lunghezza della key. Ho trovato una "Soluzione", dove faccio il modulo per far rimanere i caratteri criptati nel range 0-255, faccio modulo 256 + 2. Cosi', mi cripta tutto il testo in chiaro, ma quando vado a volerlo decifrare, non me lo decifra piu', anche se ho messo nella parte della de-cifratura 256 + 2. Qualcuno sa spiegarmi come mai?
Contatti
Steam
Facebook

Gif
Spoiler
Immagine
Immagine
Immagine
Immagine

Avatar utente
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: Ritornare a testo iniziale dopo aver fatto x mod 255

Messaggio da BaronVsCorsar »

ma come fa un carattere a valere 666?
se hai seguito quanto ho detto io ogni "carattere" va itneso in linguaggio "C",
vale a dire: 1 byte.
Se usi questo approccio, anche se la tua stringa fosse codificata in unicode non importa... semplicemente tu la itnerbreti byte a byte.
Relativametne alla tua domanda specifica, ammetto, non ho capito nulla.
ImmagineSchiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?

Avatar utente
Xxshark888xX
Membro d'elite
Messaggi: 1497
Iscritto il: 30/05/2012, 19:17
Specialità: Un poco di tutto
Uso: GM:Studio 1.4 Pro
Località: Earth
Contatta:

Re: Ritornare a testo iniziale dopo aver fatto x mod 255

Messaggio da Xxshark888xX »

BaronVsCorsar ha scritto:ma come fa un carattere a valere 666?
se hai seguito quanto ho detto io ogni "carattere" va itneso in linguaggio "C",
vale a dire: 1 byte.
Se usi questo approccio, anche se la tua stringa fosse codificata in unicode non importa... semplicemente tu la itnerbreti byte a byte.
Relativametne alla tua domanda specifica, ammetto, non ho capito nulla.
Per 666 intendo il suo valore UNICODE.

Cerco di spiegarmi meglio. Ho il carattere 'A' (valore UNICODE 65), ora sommo 65 (esempio) con 1932. Poi, faccio 1997 mod 255 che ritorna 212. Quindi io poi converto 212 in carattere, che sarebbe Ô.

Ora, voglio poter partire da Ô (212 UNICODE) e ritornare ad A.

Penso ci debba essere un metodo per poter fare cio', magari anche senza modulo...
Ultima modifica di Xxshark888xX il 01/02/2017, 0:16, modificato 1 volta in totale.
Contatti
Steam
Facebook

Gif
Spoiler
Immagine
Immagine
Immagine
Immagine

Avatar utente
Xxshark888xX
Membro d'elite
Messaggi: 1497
Iscritto il: 30/05/2012, 19:17
Specialità: Un poco di tutto
Uso: GM:Studio 1.4 Pro
Località: Earth
Contatta:

Re: Ritornare a testo iniziale dopo aver fatto x mod 255

Messaggio da Xxshark888xX »

Xeryan ha scritto:Con mod non puoi tornare indietro, ci sono infiniti valori di partenza. In pratica perdi l'informazione utile per poter ricostruire il valore originale.

Hai provato l'operatore xor ? Lo svantaggio è che supera i 255 se gli dai un valore di partenza maggiore ma aggiri il problema lavorando con i singoli bytes e non con i caratteri (come ti ha scritto Baron).

Codice: Seleziona tutto

178 xor 255 = 77
77 xor 255 = 178
Gia' utilizzo xor. Mi serve mod solamente per non far arrivare alcuni caratteri (a valori UNICODE) troppo grandi, altrimenti non funziona. Comunque grazie! Vedro' di trovare una soluzione alternativa...
Contatti
Steam
Facebook

Gif
Spoiler
Immagine
Immagine
Immagine
Immagine

Avatar utente
Tizzio
GMI Honor
Messaggi: 5836
Iscritto il: 29/06/2010, 23:43
Specialità: programmazione
Contatta:

Re: Ritornare a testo iniziale dopo aver fatto x mod 255

Messaggio da Tizzio »

Gli unici valori che hai sono da 0 a 255, non puoi codificare altro con 8bit.
Che linguaggio stai usando?

Avatar utente
Xxshark888xX
Membro d'elite
Messaggi: 1497
Iscritto il: 30/05/2012, 19:17
Specialità: Un poco di tutto
Uso: GM:Studio 1.4 Pro
Località: Earth
Contatta:

Re: Ritornare a testo iniziale dopo aver fatto x mod 255

Messaggio da Xxshark888xX »

Tizzio ha scritto:Gli unici valori che hai sono da 0 a 255, non puoi codificare altro con 8bit.
Che linguaggio stai usando?
Sto utilizzando C#. Posso sempre utilizzare UNICODE finche' non vado su valori (decimali) troppo grandi. (Funziona anche con il GML).

P.S: Ho risolto facendo mod 256 sul keystream invece che sul carattere finale.
Contatti
Steam
Facebook

Gif
Spoiler
Immagine
Immagine
Immagine
Immagine

Avatar utente
Tizzio
GMI Honor
Messaggi: 5836
Iscritto il: 29/06/2010, 23:43
Specialità: programmazione
Contatta:

Re: Ritornare a testo iniziale dopo aver fatto x mod 255

Messaggio da Tizzio »

dovresti criptare i dati quando sono un buffer grezzo (in C# byte[] )
e solo dopo la decrittazione dargli la codifica che vuoi, nel tuo caso Unicode

Avatar utente
Xxshark888xX
Membro d'elite
Messaggi: 1497
Iscritto il: 30/05/2012, 19:17
Specialità: Un poco di tutto
Uso: GM:Studio 1.4 Pro
Località: Earth
Contatta:

Re: Ritornare a testo iniziale dopo aver fatto x mod 255

Messaggio da Xxshark888xX »

Tizzio ha scritto:dovresti criptare i dati quando sono un buffer grezzo (in C# byte[] )
e solo dopo la decrittazione dargli la codifica che vuoi, nel tuo caso Unicode
Infatti ho risolto esattamente cosi! :cappa:
Contatti
Steam
Facebook

Gif
Spoiler
Immagine
Immagine
Immagine
Immagine

Avatar utente
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: Ritornare a testo iniziale dopo aver fatto x mod 255

Messaggio da BaronVsCorsar »

Xxshark888xX ha scritto:Infatti ho risolto esattamente cosi! :cappa:
ma non è quello che avevo suggerito all'inizio? :hum:
ImmagineSchiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?

Avatar utente
Xxshark888xX
Membro d'elite
Messaggi: 1497
Iscritto il: 30/05/2012, 19:17
Specialità: Un poco di tutto
Uso: GM:Studio 1.4 Pro
Località: Earth
Contatta:

Re: Ritornare a testo iniziale dopo aver fatto x mod 255

Messaggio da Xxshark888xX »

BaronVsCorsar ha scritto:
Xxshark888xX ha scritto:Infatti ho risolto esattamente cosi! :cappa:
ma non è quello che avevo suggerito all'inizio? :hum:
Tecnicamente si' (ora che ho riletto) :asd:

Comunque, grazie anche a te. Le tue risposte mi sono state d'aiuto :cappa:
Contatti
Steam
Facebook

Gif
Spoiler
Immagine
Immagine
Immagine
Immagine

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 42 ospiti