Ritornare a testo iniziale dopo aver fatto x mod 255
- 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
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 ) 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?
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 ) 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?
- 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
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"
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"
Schiva 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é?
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?
- 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
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.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"
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.
- 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
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.
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.
Schiva 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é?
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?
- 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
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.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.
- 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
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?
- 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
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.
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.
Schiva 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é?
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?
- 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
Per 666 intendo il suo valore UNICODE.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.
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.
- 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
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...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
Re: Ritornare a testo iniziale dopo aver fatto x mod 255
Gli unici valori che hai sono da 0 a 255, non puoi codificare altro con 8bit.
Che linguaggio stai usando?
Che linguaggio stai usando?
- 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
Sto utilizzando C#. Posso sempre utilizzare UNICODE finche' non vado su valori (decimali) troppo grandi. (Funziona anche con il GML).Tizzio ha scritto:Gli unici valori che hai sono da 0 a 255, non puoi codificare altro con 8bit.
Che linguaggio stai usando?
P.S: Ho risolto facendo mod 256 sul keystream invece che sul carattere finale.
Re: Ritornare a testo iniziale dopo aver fatto x mod 255
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
e solo dopo la decrittazione dargli la codifica che vuoi, nel tuo caso Unicode
- 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
Infatti ho risolto esattamente cosi!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
- 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
ma non è quello che avevo suggerito all'inizio?Xxshark888xX ha scritto:Infatti ho risolto esattamente cosi!
Schiva 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é?
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?
- 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
Tecnicamente si' (ora che ho riletto)BaronVsCorsar ha scritto:ma non è quello che avevo suggerito all'inizio?Xxshark888xX ha scritto:Infatti ho risolto esattamente cosi!
Comunque, grazie anche a te. Le tue risposte mi sono state d'aiuto
Chi c’è in linea
Visitano il forum: Nessuno e 151 ospiti