problema AES_ENCRYPT/AES_DECRYPT | SQL & MySQL

Topic: Pubblico - Composto da 14 Posts di 2 Utenti.

13 Luglio, 2011 13:26 #1
unicorno
Utente

unicorno
Registrato: Jul, 2011
Posts: 8
Offline

ciao ragazzi,

sto smanettando da ore per risolvere un problema che ho con queste due funzioni..
effettuo i seguenti passi:
CREATE TABLE password (
id int(11) NOT NULL auto_increment,
gruppo text NOT NULL,
descrizione text NOT NULL,
utenza text NOT NULL,
password BLOB NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=30 ;

INSERT INTO password (id, gruppo, descrizione,utenza,password) VALUES
(1, 'banca', 'conto corrente','giove', AES_ENCRYPT('pippo','chiave')),
(2, 'casa', 'codice accesso','saturno', AES_ENCRYPT('pluto','chiave')),
(3, 'internet', 'blog1','nettuno', AES_ENCRYPT('paperino','chiave'))

select id,gruppo,AES_DECRYPT(PASSWORD,'chiave') from password

ma effettuando questa select invece di avere i campi decriptati, qiundi pippo,pluto e paperino ho dei campi blob..
lo stesso problema ce l'ho con le funzioni DES_decrypt e DES_encrypt
utilizzo il mysql workbench 5.2

per favore aiutatemi

14 Luglio, 2011 09:47 #2
re-verse
Moderatore

re-verse
Registrato: Jul, 2008
Posts: 312
Offline

A prima vista hai fatto tutto bene, replicato tutto su mysql 5.0.67 e funziona perfettamente


Salvatore DC

La mente è come un paracadute: funziona solo se si apre. A.Einstein.

14 Luglio, 2011 09:58 #3
unicorno
Utente

unicorno
Registrato: Jul, 2011
Posts: 8
Offline

grazie della risposta,
visto che a me come risultato di quella select dove utilizzo il decrypt mi da il risultato con all'interno la dicitura blob, dove posso aver sbagliato??

ps. il workbench con il db sono stati installati da zero, possibile che nelle impostazioni debba modificare qualcosa?

14 Luglio, 2011 10:05 #4
re-verse
Moderatore

re-verse
Registrato: Jul, 2008
Posts: 312
Offline

l'unica differenza rispetto al tuo ambiente è che io al momento sto usando heidisql come gui.... hai provato per caso a convertire il risultato in text?


Salvatore DC

La mente è come un paracadute: funziona solo se si apre. A.Einstein.

14 Luglio, 2011 10:09 #5
unicorno
Utente

unicorno
Registrato: Jul, 2011
Posts: 8
Offline

inizialmente la desc della tabella aveva il campo password tipo text, e mi dava come output sempre llo stesso cioè blob, allora tramite vari forum ho visto che queste funzioni venivano utilizzate con campi blob, però mi sono impantanato..

in che senso dici di trasformarlo in text, mi puoi dare la funzione che faccio una prova?

ps. il mio fine ultimo è quello di far interagire questa select in una webapp in jsp, e tramite la webapp mi da risultato nullo qiundi non credo sia un problema di workbench ma al massimo di preferences sul db

Ultima modifica 14 Luglio, 2011 10:11 di unicorno

14 Luglio, 2011 10:19 #6
re-verse
Moderatore

re-verse
Registrato: Jul, 2008
Posts: 312
Offline

hmmm....
facciamo così: se puoi, elimina la tabella e rifalla da capo direttamente col campo blob, giustamente come ti hanno suggerito in altri forum, un campo aes_encripted deve essere memorizzato come dato blob e non come text.

Per la conversione, anche se non ce ne dovrebbe essere bisogno, la funzione è la "CAST", si usa così:

1CAST(valore AS tipo)
... nel tuo caso il tipo sarà TEXT


Salvatore DC

La mente è come un paracadute: funziona solo se si apre. A.Einstein.

14 Luglio, 2011 10:44 #7
unicorno
Utente

unicorno
Registrato: Jul, 2011
Posts: 8
Offline

mi potresti dire se cosi è corretta?
perchè mi da l'errore in basso
e comunque come dovrei inserire la aes_decripted

select id,gruppo,CAST (pwd as text) from password
LIMIT 0, 1000
Error Code: 1584. Incorrect parameters in the call to stored function 'CAST'

grazie per la tua pazienza

15 Luglio, 2011 07:22 #8
unicorno
Utente

unicorno
Registrato: Jul, 2011
Posts: 8
Offline

ok ci sono riuscito ed ho ben due possibilità..

SELECT id, CONVERT(AES_DECRYPT(password, 'chiave') USING latin1) _bytes2

SELECT id,CAST(AES_DECRYPT(password,'chiave') AS CHAR)

quindi utilizzando sia cast che convert, e quindi effettivamente mi decriptano la password facendomi funzionare la select...

il problema è un altro..
quando passo questa select via jdbc ad una webapp il valore della password non me lo scrive

..storia infinita??

15 Luglio, 2011 12:51 #9
re-verse
Moderatore

re-verse
Registrato: Jul, 2008
Posts: 312
Offline

ok, bene così: per quanto riguarda l'ultima domanda, immagino che adesso nel tuo resultset tu ti aspetti di trovare il campo "password" ma purtroppo non è così, quindi devi usare il comando "AS" in questo modo:

1SELECT id,CAST(AES_DECRYPT(password,'chiave') AS CHAR) AS password

così fai in modo che tutta quella roba venga salvata nel resultset come campo password' ... spero di non essermi spiegato troppo male


Salvatore DC

La mente è come un paracadute: funziona solo se si apre. A.Einstein.

15 Luglio, 2011 12:57 #10
unicorno
Utente

unicorno
Registrato: Jul, 2011
Posts: 8
Offline

ottimo grazie mille

..ma perchè c'è bisogno di un alias?

e secondo te deve essere inserito anche quando faccio la insert del tipo
INSERT INTO password (id, gruppo, descrizione,utenza,password) VALUES
(1, 'banca', 'conto corrente','giove', AES_ENCRYPT('pippo','chiave') as password)

Condividi su:

Loggati o Registrati per replicare