Encrypten en decrypten met persoonlijke sleutel
Gepost door Bart Brouwer op 23-12-2009 14:01.
Met dit script kun je strings omzetten in een gecodeerde base64 string, die geencrypt is met een persoonlijke sleutel.
Script is handig voor het opslaan van o.a. vertrouwelijke informatie.
De gehashte sleutel bestaat momenteel uit een 320 bits SHA1 hash. Deze is naar eigen wens te creeƫren.
Geef nooit vrij hoe je sleutel gemaakt wordt.
Bestanden van dit script
index.php
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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | <?php
class EncryptedString
{
var $sKey;
var $sData;
function EncryptedString($sData, $sKey)
{
$this->sKey = sha1($sKey) . sha1($sKey . substr(sha1($sKey),2,1)); $this->sData = $sData;
}
function Encrypt()
{
$sResult = '';
for($i=0; $i<strlen($this->sData); $i++)
{
$char = substr($this->sData, $i, 1);
$sKeychar = substr($this->sKey, ($i % strlen($this->sKey))-1, 1);
$char = chr(ord($char)+ord($sKeychar));
$sResult .= $char;
}
$this->sData = base64_encode($sResult);
return $this->sData;
}
function Decrypt()
{
$sResult = '';
$this->sData = base64_decode($this->sData);
for($i=0; $i<strlen($this->sData); $i++)
{
$char = substr($this->sData, $i, 1);
$sKeychar = substr($this->sKey, ($i % strlen($this->sKey))-1, 1);
$char = chr(ord($char)-ord($sKeychar));
$sResult.=$char;
}
$this->sData = $sResult;
return $this->sData;
}
}
$sKey = "pHpFRe@kZ";
$sString = "TOP SECRET";
$oEncrypt = new EncryptedString($sString, $sKey);
$oEncrypt->Encrypt();
$sString = "tYSAWbl5dbd4uA=="; $oDecrypt = new EncryptedString($sString, $sKey);
$oDecrypt->Decrypt();
?> |
Commentaar
23-12-2009 22:42
"Geef nooit vrij hoe je sleutel gemaakt wordt."
Ok, dit is dus een typisch gevalletje "security through obscurity. Er wordt wat data vernaggeld, maar veel meer dan dat is het ook niet. In het geval van "encryptie" maakt het niet uit of iemand de volledige implementatie kent. Zie de grote jongens van RSA en de verschillende DES smaken bijvoorbeeld.
1 2 3 | Post hier de source-code van je script. Alle informatie tussen <? ... ?> en <?php ... ?> zal automatisch worden getoond in color-coding.
Let op! Het is niet de bedoeling om hier een link naar je website te plaatsen. Post hier gewoon de code, veel simpeler, sneller en meer kans dat het blijft staan. |
27-12-2009 23:14
Het gaat toch erom dat je persoonlijke sleutel geheim blijft? Zonder die sleutel kun je nog de broncode hebben, volgens mij kan je dan nog de tekst niet decrypten...
28-12-2009 21:25
"Het gaat toch erom dat je persoonlijke sleutel geheim blijft? Zonder die sleutel kun je nog de broncode hebben, volgens mij kan je dan nog de tekst niet decrypten..."
Dat heet dus "security through obscurity", want het is veilig totdat iemand de sleutel weet te bemachtigen. Typisch gevalletje hiervan is de OV-chipkaart. Het was veilig totdat men de "geheime code" wist te bemachtigen.
Het blijft komisch om te zien hoe knullig die beveiliging is :)
Zie: http://video.google.com/videoplay?docid=4252367680974396650
Echte beveiliging is niet afhankelijk van deze schijnveiligheid.
28-12-2009 22:19
> Dat heet dus "security through obscurity", want het is veilig > totdat iemand de sleutel weet te bemachtigen.
Maar dan is dat bij alle encryptie/beveiliging toch het geval: als je het wachtwoord/de sleutel weet, dan kan je bij de gevoelige inhoud komen.
1 2 3 | Post hier de source-code van je script. Alle informatie tussen <? ... ?> en <?php ... ?> zal automatisch worden getoond in color-coding.
Let op! Het is niet de bedoeling om hier een link naar je website te plaatsen. Post hier gewoon de code, veel simpeler, sneller en meer kans dat het blijft staan. |
29-12-2009 08:22
Het gaat hier om een dubbele encryptie namelijk die aan de hostkant en die aan de gebruikerskant.
Als iemand dus in de database weet te komen ziet hij enkel een gecodeerd bestand staan. Hier kan hij niets mee.
Omdat het met een door de gebruikergekozen sleutel encrypt is moet hij eerst de sleutel zien te achterhalen welke niet aanwezig is.
Probeer dan maar iets met dat stuk tekst te doen, en de mensen die nog steeds roepen dat het gemakkelijk te kraken is, succes:
Wat staat hier: ktLWWc6cnYWboq1UlafJoVOoo9TTVKSVUKjPnKHIn1eaysbVr6mpy9Q=
1 2 3 | Post hier de source-code van je script. Alle informatie tussen <? ... ?> en <?php ... ?> zal automatisch worden getoond in color-coding.
Let op! Het is niet de bedoeling om hier een link naar je website te plaatsen. Post hier gewoon de code, veel simpeler, sneller en meer kans dat het blijft staan. |
29-12-2009 23:11
"en de mensen die nog steeds roepen dat het gemakkelijk te kraken is"
Ik geloof niet dat iemand hier heeft beweerd dat het gemakkelijk te kraken is, of heb ik ergens overheen gelezen?
11-03-2010 20:19
Deze vorm van versleuteling is niet veilig voor vertrouwelijke informatie. Encryptie algorithmen dienen alleen in uitzonderlijke gevallen ontwikkeld te worden door specialisten.
Dit algorithme heeft een zwakte en kan alleen worden gebruikt voor korte strings (en zelfs dat is discutabel). Bij gebruik van hele teksten is de encryptie veel makkelijker te kraken.
Het gebruik van deze code levert een vals gevoel van veiligheid op. Voor gebruik van encryptie algorithem raad ik de Mcryptextensie aan: http://nl.php.net/manual/en/ref.mcrypt.php
Begrijp me niet verkeerd, eigen encryptie algorithmen maken is erg leuk, maar deze zijn niet toepasbaar voor commercieel gebruiken of voor het versleutelen van vertrouwelijke data.
1 2 3 | Post hier de source-code van je script. Alle informatie tussen <? ... ?> en <?php ... ?> zal automatisch worden getoond in color-coding.
Let op! Het is niet de bedoeling om hier een link naar je website te plaatsen. Post hier gewoon de code, veel simpeler, sneller en meer kans dat het blijft staan. |