Avatar billede faran Nybegynder
16. januar 2007 - 21:14 Der er 15 kommentarer og
1 løsning

Kryptering med AES_ENCRYPT

Hej alle sammen

Jeg har en tabel med brugeroplysninger og bl.a. passwords. Dem vil jeg gerne kryptere. Til det har jeg tænkt mig funktionen AES_ENCRYPT og AES_DECRYPT, hhv. kryptere og dekryptere. I docs står der således:

AES_ENCRYPT(str,key_str), AES_DECRYPT(crypt_str,key_str)

Mit spørgsmål er så, hvad er str? key_str? (begge steder) og crypt_str?

På forhånd tak!
Avatar billede a1a1 Novice
16. januar 2007 - 21:18 #1
;o) koden f.eks. "xdftdawfarererefadsrf3"

;o)
Avatar billede arne_v Ekspert
16. januar 2007 - 21:18 #2
key_str er din key (som skal vaere hemmelig)

crypt_str er den krypterede vaerdi som skal dekrypteres
Avatar billede faran Nybegynder
16. januar 2007 - 21:22 #3
Skal vi ikke lige tage det for en enden af?

Vi siger at dette skal krypteres "julemanden" og det er et password.

Først tager vi ENCRYPT. Hvad skal 1) str og 2) key_str være her?

Derefter tager vi DESCRYPT. Hvad skal 3) crypt_str og 4) key_str være her?
Avatar billede erikjacobsen Ekspert
16. januar 2007 - 21:28 #4
Et hurtigt eksempel:

mysql> select AES_ENCRYPT('julemand','hemlit');
+----------------------------------+
| AES_ENCRYPT('julemand','hemlit') |
+----------------------------------+
| \uffff'4\uffff\uffff/}\uffffdHT\uffffz~\uffffB                |
+----------------------------------+
1 row in set (0.00 sec)

mysql> select AES_DECRYPT(AES_ENCRYPT('julemand','hemlit'),'hemlit');
+--------------------------------------------------------+
| AES_DECRYPT(AES_ENCRYPT('julemand','hemlit'),'hemlit') |
+--------------------------------------------------------+
| julemand                                              |
+--------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select AES_DECRYPT(AES_ENCRYPT('julemand','hemlit'),'hemligt');
+---------------------------------------------------------+
| AES_DECRYPT(AES_ENCRYPT('julemand','hemlit'),'hemligt') |
+---------------------------------------------------------+
| NULL                                                    |
+---------------------------------------------------------+
1 row in set (0.00 sec)
Avatar billede faran Nybegynder
17. januar 2007 - 09:13 #5
OK.

Jeg kan godt få det ENCRYPT til at virke, men har problemer med DESCRYPT. Jeg har flg. SQL-streng:

Set rs = Conn.Execute("SELECT user, pass, email FROM com_users WHERE email = '" & strEmail & "'")

Her mit problem så, hvordan får jeg så feltet pass, som er krypteret, til at blive dekrypteret?

Jeg har prøvet flg.:

Set rs = Conn.Execute("SELECT user, AES_DECRYPT(com_users.pass,'pass') AS pass, email FROM com_users WHERE email = '" & strEmail & "'")

Det giver NULL.
Avatar billede faran Nybegynder
17. januar 2007 - 09:14 #6
Jeg er kommet til at blande noget ASP ind, men stregen vil således ud, uden ASP:

Set rs = Conn.Execute("SELECT user, pass, email FROM com_users WHERE email = 'test@uniqo.dk'")
Avatar billede erikjacobsen Ekspert
17. januar 2007 - 09:15 #7
Ser umiddelbart korrekt ud - hvordan putter du det i feltet første gang?
Avatar billede erikjacobsen Ekspert
17. januar 2007 - 09:15 #8
09:13:16 ser korrekt ud ...
Avatar billede erikjacobsen Ekspert
17. januar 2007 - 09:17 #9
Og hvad er feltttypen?
Avatar billede erikjacobsen Ekspert
17. januar 2007 - 09:21 #10
create table aes (
  id int(11) auto_increment not null,
  primary key(id),
felt varchar(100));

mysql> insert into aes (felt) values (AES_ENCRYPT('paaskeharen','ssshh'));
Query OK, 1 row affected (0.00 sec)

mysql> select * from aes;
+----+------------------+
| id | felt            |
+----+------------------+
|  1 | û^íp÷&áÒ±´ôv |
+----+------------------+
1 row in set (0.01 sec)

mysql> select AES_DECRYPT(felt,'ssshh') as felt from aes;
+-------------+
| felt        |
+-------------+
| paaskeharen |
+-------------+
1 row in set (0.00 sec)

mysql>
Avatar billede faran Nybegynder
17. januar 2007 - 09:22 #11
Præcis! Jeg havde kommet til at skrive to forskellige ting i key_str. Så nu virker det.

Jeg brugte flg.: AES_ENCRYPT('" & strPass & "','pass')

Tak for hjælpen, smider du lige et svar?!
Avatar billede erikjacobsen Ekspert
17. januar 2007 - 09:26 #12
Jeg samler slet ikke på point, tak.

Men sikkerheden i dit system kan jo stadig diskuteres. Har man adgang til databasen, er det rimeligt at antage, at man også har adgang til password, som må stå i noget af din kode. Nu er det tekniske problem løst, men der for mig at se ikke noget, der tyder på at du har øget sikkerheden.
Avatar billede faran Nybegynder
17. januar 2007 - 09:33 #13
OK. Det var mere for at jeg selv ikke kunne gå ind og læse folks passwords. MySQL-serveren har jeg hos en webhotel udbyder, mon ikke de har stillet noget sikkedhed op mod angreb.
Avatar billede erikjacobsen Ekspert
17. januar 2007 - 09:38 #14
Men du *kan* læse deres passwords, hvis du vil. Man "plejer" at bruge en MD5-hash (eller SHA1, eller en anden kryptografisk hash), som gør at end ikke du kan læse deres passwords (den skal så lige anvendes rigtigt - pas på gamle artikler om det).
Avatar billede faran Nybegynder
17. januar 2007 - 09:49 #15
Ja, sådan kan jeg jo godt. Hvis jeg trækker pass-feltet ud og dekryptere det. Det gøre jeg jo sådan set, for at få login-systemet til virke. Det var mere hvis jeg gik ind i databasen og jeg så kunne se det stå der ved første øjekast.

Jeg vil dog lige takke for hjælpen og rådene!
Avatar billede faran Nybegynder
17. januar 2007 - 18:41 #16
!
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