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?
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?
In PHP 5.5 of hoger kan het goed en eenvoudig met de functies password_hash() en password_verify().
<?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.';
}
// 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.';
}
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.
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.
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.
[quote="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.
[/quote]
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?