Autore Topic: Stringhe e UFT-8  (Letto 996 volte)

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Stringhe e UFT-8
« il: 19 Maggio 2010, 22:47:31 »
Sto avendo un problema nella gestione delle stringhe per via del fatto che Gambas le tratta internamente come UTF-8.
In pratica devo convertire una stringa in un vettore di byte. Ma quando vado a gestire la stringa ottengo risultato sballati per via della conversione ASCI-UTF-8.
Ad esempio:
Codice: [Seleziona]
DIM a AS String
DIM i AS Integer
DIM r AS NEW Byte[]

a = "Prova@#ç°è"
Print Len(a)
Mi restituisce 13 e non 10: difatti convertendo la stringa in un vettore di byte ottengo 3 caratteri "0" extra, 1 all'inizio e 2 alla fine:
Codice: [Seleziona]
r.Resize(Len(a)) '<--qui r è di 13 celle
FOR i = 0 TO Len(a) - 1
  r[i] = String.Code(a, i) '<--converto tenendo conto (o per lo meno credo...) del'UTF-8
NEXT
FOR i = 0 TO r.Count - 1
  PRINT r[i]
NEXT
Mi dà nel terminale:
Codice: [Seleziona]
0
80
114
111
118
97
64
35
231
176
232
0
0
Visita il mio sito personale: http://www.leonardomiliani.com

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Stringhe e UFT-8
« Risposta #1 il: 19 Maggio 2010, 23:01:27 »
Ogni tanto anche i Giganti hanno bisogno di quelli piccolini  ;)

ho provato a fare questo:

PUBLIC SUB Main()
DIM a AS String

a = "Prova@#ç°è"
a = Conv(a, "UTF-8", "ISO-8859-15")
PRINT Len(a)
 
END


mi restituisce 10

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Stringhe e UFT-8
« Risposta #2 il: 19 Maggio 2010, 23:05:46 »
Difatti IO ho avuto bisogno di TE  :-*
Visita il mio sito personale: http://www.leonardomiliani.com

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Stringhe e UFT-8
« Risposta #3 il: 19 Maggio 2010, 23:09:49 »
 ;D

Tanto per andar fuori dagli schemi...(adesso mi dirai 'miii che spacca maroni questo!')
 e' possibile avere una visualizzazione del codice un tantino piu' colorata e non quel cupo grigio?  :)

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Stringhe e UFT-8
« Risposta #4 il: 19 Maggio 2010, 23:28:27 »
@ Leo.....
 
:o

Mi stupisci sempre di più!!!!

bastava leggere

qui

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Stringhe e UFT-8
« Risposta #5 il: 20 Maggio 2010, 10:15:47 »
Se avessi trovato quella pagina non avrei scritto il post XD

Cmq posso dire che le info riportate lì non mi sembrano corrette perché il mio sistema dovrebbe già essere configurato per lavorare in UTF-8 (ecco l'output di "locale":
Codice: [Seleziona]
LANG=it_IT.UTF-8
LC_CTYPE="it_IT.UTF-8"
LC_NUMERIC="it_IT.UTF-8"
LC_TIME="it_IT.UTF-8"
LC_COLLATE="it_IT.UTF-8"
LC_MONETARY="it_IT.UTF-8"
LC_MESSAGES="it_IT.UTF-8"
LC_PAPER="it_IT.UTF-8"
LC_NAME="it_IT.UTF-8"
LC_ADDRESS="it_IT.UTF-8"
LC_TELEPHONE="it_IT.UTF-8"
LC_MEASUREMENT="it_IT.UTF-8"
LC_IDENTIFICATION="it_IT.UTF-8"
LC_ALL=
Eppure pare che le stringhe per Gambas siano esternamente in una codifica ed internamente in un'altra.

@Milo:
sarebbe carino, ma non sono un programmatore PHP per cui non so dove modificare il codice per creare un template per SMF per codici Gambas :P
Visita il mio sito personale: http://www.leonardomiliani.com

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Stringhe e UFT-8
« Risposta #6 il: 20 Maggio 2010, 12:05:43 »
Cmq non risolvo il mio problema perché ho delle difficoltà da una codifica all'altra.

Vi spiego cosa sto facendo.
Sto scrivendo un esempio per l'utilizzo di una classe per Il resto del pinguino. Ne approfitto per abbracciare anche la crittografia utilizzando la mia classe RC4 che trovate anche in area download.
Per far ciò creo un piccolo programma in cui dichiaro 2 stringhe, il testo da elaborare e la chiave, e le passo alla mia classe. Dalla classe ottengo una stringa che, ripassata alla classe RC4 con la stessa chiave, mi dovrebbe rendere la stringa originaria.

Il problema è appunto la conversione, perché la stringa di origine, a seconda dei caratteri, è codificata UTF-8 o ISO (per capirsi, con "Prova" Gambas usa l'ISO, se metto "Prova@#ç" Gambas usa l'UTF) per cui ho dei problemi già in partenza con la funzione Conv() perché se cerco di convertire una stringa UTF-8 dicendogli che è ISO mi dà errore.
Tralasciamo per ora questo problema e consideriamo che gli ho passato una stringa 'buona'. La classe crittografica scompone la stringa in un vettore di byte per poterci operare sopra e restituisce un vettore di byte cifrato.
Il problema nasce ora: riconvertendolo in stringa, ottengo i risultati più strani perché se il codice ASCII è maggiore di 128 allora il carattere mi viene salvato in UTF-8 (quindi con 2 caratteri nella stringa finale), se l'ASCI è inferiore allora viene usato 1 solo carattere.

Alla fine la stringa ha una lunghezza ed una composizione "assurda", tale che ripassandola dalla classe RC4 non riottengo il testo originario perché non torna più nulla.

So che è complicato ma non so come spiegarlo meglio. Allego "Mario" per farvi capire cosa sto cercando di fare. Cliccate sul pulsante RC4 (contiene anche l'esempio della cancellazione delle tab che aveva chiesto Ceskho tempo fa... ignorate quella porzione di codice XD).
Visita il mio sito personale: http://www.leonardomiliani.com

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Stringhe e UFT-8
« Risposta #7 il: 20 Maggio 2010, 14:24:13 »
Non mi chiedere come ho fatto perche' di chiavi e cifrature non ne capisco molto, ma credo che cosi' funzioni  ;)


Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Stringhe e UFT-8
« Risposta #8 il: 20 Maggio 2010, 14:28:24 »
Hai 30 secondi per dirmi cosa hai cambiato prima che ti cancelli l'account!  ;D
Visita il mio sito personale: http://www.leonardomiliani.com

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Stringhe e UFT-8
« Risposta #9 il: 20 Maggio 2010, 14:30:52 »
Ho avuto fortuna. ho solo commentato  Vecchiachiave = chiave nella Sub preparaRC4 della tua classe.

A proposito, ne approfitto (di nuovo).
ti dispiace se uso la tua classe, per un progetto che sto facendo qui in azienda?

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Stringhe e UFT-8
« Risposta #10 il: 20 Maggio 2010, 14:33:11 »
Dispiace? Perché? XD
L'ho detto prima che era in area download, quindi è liberamente usabile :P
D'altronde, l'RC4 mica l'ho inventato io XD

Ah, se vuoi qualche classe di cifratura più robusta, dimmi cosa devi fare e ti posso far avere qualcos'altro.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Stringhe e UFT-8
« Risposta #11 il: 20 Maggio 2010, 14:36:14 »
No questa e' piu' che sufficiente... devo solo criptare le password dei vari database server nei file di configurazione esterni...

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Stringhe e UFT-8
« Risposta #12 il: 20 Maggio 2010, 14:38:54 »
Ma le devi salvare?
Altrimenti perché non usi un hash e salvi gli hash, così come fa Linux?

Ho (ovviamente) anche una classe di hash: SHA :P

P.S.:
non ho capito perché la tua modifica funziona. Quell'assegnazione che tu hai commentato serviva per non far ricalcolare l'S-box se veniva usata la stessa chiave di cifratura. C'è probabilmente qualche passaggio del codice della classe che devo rivedere.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Stringhe e UFT-8
« Risposta #13 il: 20 Maggio 2010, 14:40:17 »
A ripensarci l'hash non ti serve.
NOn devi verificare che la password sia inserita correttamente, a te serve proprio recuperare la password.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Stringhe e UFT-8
« Risposta #14 il: 20 Maggio 2010, 14:45:52 »
Ho capito perché la modifica fatta da te funziona.
Ogni volta che lancio la classe devo comunque rinizializzare l'S-box perché la precedente operazione, sia di cifratura che di decifratura ne ha cambiato lo stato quindi il risultato è ovvio che non possa venire lo stesso.
Visita il mio sito personale: http://www.leonardomiliani.com