Avatar billede sansalvador Nybegynder
30. maj 2005 - 16:12 Der er 11 kommentarer og
1 løsning

AES_Decrypt virker ikke helt for mig

Hej,

Jeg har en krypteret streng (128bit krypteret vha det indbyggede AES_ENCRYPT i mySQL) som indholde mange forskelllige tegn som fx " og '  - Dette er meget ubelejligt, da jeg så får problemer når disse konflikter med " og/eller ' i selve sql-strengen ...

Eks:

$resultat = mysql_query("SELECT AES_DECRYPT('$crypted','$key') as decrypt") or die(mysql_error());

Jeg har prøvet med { } (muligvis de forkerte steder så?) Men ligefedt virker det .. Den siger "bare":

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '\'I!¿C·"ª];GÎN’n„_“' at line 1

Nogen der er frisk på en lille løsning? =)
Avatar billede barklund Nybegynder
30. maj 2005 - 16:16 #1
Hvad bliver din SQL-streng til? Prøv lige at printe den også :)

--
Morten Barklund
Avatar billede sansalvador Nybegynder
30. maj 2005 - 16:19 #2
Øhh ... Hvad den bliver til? Hvis du mener resultatet, så kommer der jo ikke noget.

Hvis du mener den krypterede streng, så er det denne her:

I!¿C·"ª];GÎN’n„_“!6,´oµi 5ð+|wO:„L¡ÜcŒÎ¨Íø'ÏR÷?ˆæŸ–’1Cj.«ï´dWö³ê³’ÍH±Ç©täþ¦Ã‰\öÛÆNؤ¦òc¥3ß?½£Ü…›\Áú°ÙtÇPðGRÛWr#]Ha–tbLÁfg@ã|WÓ]Z NhAkwÆÞîf¢??ky¡ËC䯼mjڝkR ½†µmM*ÈöÖf‰éºBØ

I kan jo alligevel ikke dekode den ;)
Avatar billede barklund Nybegynder
30. maj 2005 - 16:34 #3
Jeg mener hvilken query du rent faktisk kører, når de to variabler bliver indsat :) - men okay, du vil vel gerne holde key'en for dig selv :)

Dog kan du hex'e den i php og unhex'e den i mysql - det er nok det smarteste :)

function hexify($s) {
    return join("",array_map(create_function('$a','return dechex(ord($a));'),preg_split("//",$s,-1,PREG_SPLIT_NO_EMPTY)))
}
$resultat = mysql_query("SELECT AES_DECRYPT(UNHEX('".hexify($crypted)."'),'$key') as decrypt") or die(mysql_error());

(og en lille hexify funktion, da jeg ikke kunne finde den i manualen - måske den findes)

--
Morten Barklund
Avatar billede sansalvador Nybegynder
30. maj 2005 - 16:40 #4
Okay .. Skal lige på arbejde i 4 timer .. Så kommer jeg tilbage og tester færdig. Tak for hjælpen indtil videre. :)
Avatar billede bromer Nybegynder
30. maj 2005 - 16:40 #5
barkund> kudos for at skrive sort kode.. bare for at skrive sort kode :)
Avatar billede barklund Nybegynder
30. maj 2005 - 16:42 #6
preg_split er desværre nødvendig - str_split er først php5...
Avatar billede sansalvador Nybegynder
30. maj 2005 - 22:26 #7
Hmm .. Jeg får denne fejl:

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '('4921bf43b722aa5d3b47ce4e926e845f693021362cb46fb5769a350f0102b

Og jeg har endda prøvet at koge det ned til dette:

$crypted = hexify($crypted);
$resultat = mysql_query("SELECT UNHEX('$crypted') as decrypt") or die(mysql_error());

Det virker inta !
Avatar billede sansalvador Nybegynder
30. maj 2005 - 22:46 #8
Det er ligesom UNHEX ikke virker .. Hvis jeg for sjov prøver at skrive "HEX" istedet, så virker det fint .. Hva gør jeg galt? Er det fordi "crypted" ikke er en valid HEX-kode?
Avatar billede sansalvador Nybegynder
30. maj 2005 - 22:51 #9
Ah .. der er fisken ..

MYSQL er Client API version  4.0.24 
UNHEX understøttes først fra MySQL 4.1.2.

Nå ... Nogle andre forslag til hvordan man kan unhexe det? :D
Avatar billede barklund Nybegynder
31. maj 2005 - 22:04 #10
Hm well, så har jeg nok ikke så mange bud - desværre :)
Avatar billede sansalvador Nybegynder
22. juni 2005 - 17:55 #11
Fandt ud af det IKKE at bruge UNHEX. Der er nemlig en anden og identisk funktion i mySQL der hedder "x" ... Nemlig x'hex'

SELECT AES_DECRYPT(x'hex',x'hexnøgle') as fuldstændigklartilatblivelæst_variabel;

Så unhexer den og decrypterer den i samme kørsel =)
Avatar billede sansalvador Nybegynder
22. juni 2005 - 17:56 #12
Men ellers tak for hjælpen :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester