php public en private key

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Christian k

christian k

31/12/2014 12:08:36
Quote Anchor link
Hallo iedereen,
Ik ben bezig met een klein project waarbij ik een php code moet maken waarbij de cliënt (in JavaScript) de code kan crypten met een code die de server toestuurd maar de cliënt moet de data niet kunnen decrypten met die key dat moet alleen de server kunnen met een andere key. Weet iemand hoe ik dat moet doen?

Alvast bedankt.
 
PHP hulp

PHP hulp

18/12/2024 11:40:35
 
Christian k

christian k

02/01/2015 22:04:14
Quote Anchor link
Ik ben intussen al een stuk verder maar het moeilijkste moet nog, ik moet een encryptie methode hebben waarbij je met een andere key decrypt (private key) als de key (public key) waarmee je encrypt. iemand die weet hoe dat moet?
Gewijzigd op 02/01/2015 22:05:46 door christian k
 
Frank Nietbelangrijk

Frank Nietbelangrijk

03/01/2015 00:54:49
Quote Anchor link
In PHP 5.5 of hoger kan het goed en eenvoudig met de functies password_hash() en password_verify().

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php

// password aanmaken en de hash bewaren in de database!
$password = 'bananasplit';
$hash = password_hash($password, PASSWORD_DEFAULT);

// password controleren aan de hand van de hash
$password = 'bananasplit';
if(password_verify($password, $hash)) {
    echo 'Password is juist!';
}
else {
    echo 'Ongeldig password.';
}


?>

Leesvoer: http://php.net/manual/en/faq.passwords.php

Toevoeging op 03/01/2015 01:23:50:

In php 4 of hoger zou je zoiets als dit kunnen doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php

define('SALT_LENGTH', 9);

function
generateHash($password, $salt = null)
{

    if ($salt === null)
    {

        $salt = substr(md5(uniqid(rand(), true)), 0, SALT_LENGTH);
    }

    else
    {
        $salt = substr($salt, 0, SALT_LENGTH);
    }


    return $salt . sha1($salt . $password);
}

function
passwordVerify($password, $hash)
{

    $salt = substr($hash, 0, SALT_LENGTH);

    return substr($hash, SALT_LENGTH) == sha1($salt . $password);
}


// password aanmaken en de hash bewaren in de database!
$password = 'bananasplit';
$hash = generateHash($password);

// password controleren aan de hand van de hash
$password = 'bananasplit';
if(passwordVerify($password, $hash)) {
    echo 'Password is juist!';
}
else {
    echo 'Ongeldig password.';
}


?>


Leesvoer:
http://phpsec.org/articles/2005/password-hashing.html
Gewijzigd op 03/01/2015 01:26:29 door Frank Nietbelangrijk
 
Christian k

christian k

03/01/2015 11:43:32
Quote Anchor link
Maar hoe kan je nu crypten met een andere key als je decrypt?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

03/01/2015 13:41:17
Quote Anchor link
Een Hash is een string die eigenlijk uit twee delen bestaat plus soms nog wat extra info. Om het password te decrypten heb je beide delen nodig.

één deel wordt ook wel de SALT genoemd. (denk aan zout dat ergens doorheen gemengd wordt)
en andere deel is het versleutelde wachtwoord.

Mis je één van beiden dan kun je het vergeten.

Als we even van het tweede voorbeeld uitgaan (want die wordt op iets oudere PHP versies ook ondersteund) dan zien we de functie generateHash. Als je deze functie gebruikt en je geeft geen salt op dan wordt er één ter plekke random gemaakt.
Maar je kunt dus ook je eigen bestaande Salt gebruiken. De functie geeft altijd een string (reeks tekens) terug die begint met de salt en daaraan gekoppeld het versleutelde wachtwoord. Dit zou je kunnen wijzigen naar een functie die niet zelf een Salt aanmaakt en dan alleen het versleutelde wachtwoord terug geeft. Op die manier hou je salt en wachtwoord gescheiden van elkaar. Voor het genereren van een salt zou je dan een aparte functie kunnen maken.

Om een wachtwoord te kunnen controleren (de functie passwordVerify) heb je ALTIJD het password EN de salt nodig.

Ik kan de functies wel wijzigen zodat het te gebruiken is zoals jij wilt maar het lijkt mij beter als je dat zelf gaat doen om de simpele reden dat je dan zeker begrijpt hoe het werkt. Ik neem aan dat je later nog even een toelichting mag geven over je werk en dan is het handig als je weet hoe het zit.
Gewijzigd op 03/01/2015 13:57:41 door Frank Nietbelangrijk
 
Christian k

christian k

03/01/2015 16:19:19
Quote Anchor link
Ik moet als opdracht de werking van ssl nabouwen de client kan de string met een code crypten maar niet decrypten dat kan alleen de server. Maar hoe werkt dat dan? Ik dacht 2 keys maar dat kan dus niet.
 
Johan de wit

johan de wit

03/01/2015 16:28:56
Quote Anchor link
Christian k op 03/01/2015 16:19:19:
Ik moet als opdracht de werking van ssl nabouwen de client kan de string met een code crypten maar niet decrypten dat kan alleen de server. Maar hoe werkt dat dan? Ik dacht 2 keys maar dat kan dus niet.


Dat kan alleen met API.
 
Christian k

christian k

03/01/2015 16:36:27
Quote Anchor link
En hoe werkt dat precies?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

03/01/2015 18:44:39
Quote Anchor link
Johan de wit op 03/01/2015 16:28:56:
Christian k op 03/01/2015 16:19:19:
Ik moet als opdracht de werking van ssl nabouwen de client kan de string met een code crypten maar niet decrypten dat kan alleen de server. Maar hoe werkt dat dan? Ik dacht 2 keys maar dat kan dus niet.


Dat kan alleen met API.


NABOUWEN is iets anders dan gebruiken.

En als je SSL wilt gebruiken heb je geen API nodig. Het makkelijkste is om OpenSSL te gebruiken maar deze dient dan wel op de server geïnstalleerd te zijn.

Ik heb zelf minimale ervaring met OpenSSL maar als je de zoekterm gebruikt met google komt er een flinke lading met informatie beschikbaar voor je.

Wees er van bewust dat OpenSSL nog wat ingewikkelder is dan wat ik je nu heb laten zien.

Weet je zeker dat een server de code moet kunnen decrypten? staat dat letterlijk in de opdracht?
Gewijzigd op 03/01/2015 18:49:21 door Frank Nietbelangrijk
 
Christian k

christian k

03/01/2015 18:49:49
Quote Anchor link
Nee ik wil graag zelf de werking van ssl nabouwen (ik ga het niet gebruiken) maar omdat ik wel zin heb in een ingewikkelt project.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

03/01/2015 19:05:19
Quote Anchor link
Dat kun je dan met recht zeggen. Kun je goed in C(++) programmeren? Heb je verstand van encryption? Je weet nu denk ik echt niet wat je zegt hoor :-)
 
Christian k

christian k

03/01/2015 19:11:16
Quote Anchor link
Ik wist niet dat het zo ingewikkelt zou zijn. Ik dacht gwn een encryptie methode waarbij de en- en deceptie salt verschillen. Maar zo simpel is het dus niet?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

04/01/2015 16:56:54
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.