login  Naam:   Wachtwoord: 
Registreer je!
 Tutorials

Tutorials > Javascript


Gegevens:
Geschreven door:
Ontani
Moeilijkheidsgraad:
Moeilijk
Hits:
17099
Punten:
Aantal punten:
 (4.52)
Aantal stemmen:
21
Stem:
Niet ingelogd
Nota's:
 Lees de nota's (5)
 


Tutorial:

Wachtwoord Beveiliging

Untitled Document
  1. Inleiding
  2. Waarom MD5
  3. De MD5 Functie
  4. Functie Toevoegen
  5. Functie Gebruiken

1. Inleiding
Een veel voorkomend probleem is een wachtwoord beveiliging maken met javascript.
Bij de meeste javascript beveiligingen kan je gewoon in de broncode van de pagina kijken en de gebruikersnamen en wachtwoorden simpelweg aflezen.
Ik heb een tutorial gemaakt die gebruikt maakt van het allom bekende MD5-algoritme.
Dit algoritme zit niet standaard in de javascript functies en daarvoor moeten we dan ook een bestaande of zelfgeschreven functie gaan gebruiken.
Na het lezen van deze tutorial zullen uw wachtwoorden veiliger zijn als nooit tervoren.
top

2. Waarom MD5
Ik ga gebruik maken van het MD5 algoritme omdat dit een onfeilbaar en onkraakbaar algoritme is.
De javascript MD5 functie die ik ga gebruiken is door Paul Johnston en Greg Holt geschreven en gedownload van http://www-adele.imag.fr/~donsez/cours/exemplescourstechnoweb/js_securehash/
top

3. De MD5 Functie
Je kan de code downloaden op http://www-adele.imag.fr/~donsez/cours/exemplescourstechnoweb/js_securehash/md5.js of je kan de volgende functie tussen je <head></head> tags zetten. Of je kan de volgende code zonder de <script></script> tags in een apart bestand zetten met .js extentie.

<script language="javascript">
/*
 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
 * Digest Algorithm, as defined in RFC 1321.
 * Copyright (C) Paul Johnston 1999 - 2000.
 * Updated by Greg Holt 2000 - 2001.
 * See http://pajhome.org.uk/site/legal.html for details.
 */

/*
 * Convert a 32-bit number to a hex string with ls-byte first
 */
var hex_chr "0123456789abcdef";
function 
rhex(num)
{
  
str "";
  for(
0<= 3j++)
    
str += hex_chr.charAt((num >> (4)) & 0x0F) +
           
hex_chr.charAt((num >> (8)) & 0x0F);
  return 
str;
}

/*
 * Convert a string to a sequence of 16-word blocks, stored as an array.
 * Append padding bits and the length, as described in the MD5 standard.
 */
function str2blks_MD5(str)
{
  
nblk = ((str.length 8) >> 6) + 1;
  
blks = new Array(nblk 16);
  for(
0nblk 16i++) blks[i] = 0;
  for(
0str.lengthi++)
    
blks[>> 2] |= str.charCodeAt(i) << ((4) * 8);
  
blks[>> 2] |= 0x80 << ((4) * 8);
  
blks[nblk 16 2] = str.length 8;
  return 
blks;
}

/*
 * Add integers, wrapping at 2^32. This uses 16-bit operations internally 
 * to work around bugs in some JS interpreters.
 */
function add(xy)
{
  var 
lsw = (0xFFFF) + (0xFFFF);
  var 
msw = (>> 16) + (>> 16) + (lsw >> 16);
  return (
msw << 16) | (lsw 0xFFFF);
}

/*
 * Bitwise rotate a 32-bit number to the left
 */
function rol(numcnt)
{
  return (
num << cnt) | (num >>> (32 cnt));
}

/*
 * These functions implement the basic operation for each round of the
 * algorithm.
 */
function cmn(qabxst)
{
  return 
add(rol(add(add(aq), add(xt)), s), b);
}
function 
ff(abcdxst)
{
  return 
cmn((c) | ((~b) & d), abxst);
}
function 
gg(abcdxst)
{
  return 
cmn((d) | (& (~d)), abxst);
}
function 
hh(abcdxst)
{
  return 
cmn(dabxst);
}
function 
ii(abcdxst)
{
  return 
cmn(^ (| (~d)), abxst);
}

/*
 * Take a string and return the hex representation of its MD5.
 */
function calcMD5(str)
{
  
str2blks_MD5(str);
  
=  1732584193;
  
= -271733879;
  
= -1732584194;
  
=  271733878;

  for(
0x.length+= 16)
  {
    
olda a;
    
oldb b;
    
oldc c;
    
oldd d;

    
ff(abcdx[i0], , -680876936);
    
ff(dabcx[i1], 12, -389564586);
    
ff(cdabx[i2], 17,  606105819);
    
ff(bcdax[i3], 22, -1044525330);
    
ff(abcdx[i4], , -176418897);
    
ff(dabcx[i5], 12,  1200080426);
    
ff(cdabx[i6], 17, -1473231341);
    
ff(bcdax[i7], 22, -45705983);
    
ff(abcdx[i8], ,  1770035416);
    
ff(dabcx[i9], 12, -1958414417);
    
ff(cdabx[i+10], 17, -42063);
    
ff(bcdax[i+11], 22, -1990404162);
    
ff(abcdx[i+12], ,  1804603682);
    
ff(dabcx[i+13], 12, -40341101);
    
ff(cdabx[i+14], 17, -1502002290);
    
ff(bcdax[i+15], 22,  1236535329);    

    
gg(abcdx[i1], , -165796510);
    
gg(dabcx[i6], , -1069501632);
    
gg(cdabx[i+11], 14,  643717713);
    
gg(bcdax[i0], 20, -373897302);
    
gg(abcdx[i5], , -701558691);
    
gg(dabcx[i+10], ,  38016083);
    
gg(cdabx[i+15], 14, -660478335);
    
gg(bcdax[i4], 20, -405537848);
    
gg(abcdx[i9], ,  568446438);
    
gg(dabcx[i+14], , -1019803690);
    
gg(cdabx[i3], 14, -187363961);
    
gg(bcdax[i8], 20,  1163531501);
    
gg(abcdx[i+13], , -1444681467);
    
gg(dabcx[i2], , -51403784);
    
gg(cdabx[i7], 14,  1735328473);
    
gg(bcdax[i+12], 20, -1926607734);
    
    
hh(abcdx[i5], , -378558);
    
hh(dabcx[i8], 11, -2022574463);
    
hh(cdabx[i+11], 16,  1839030562);
    
hh(bcdax[i+14], 23, -35309556);
    
hh(abcdx[i1], , -1530992060);
    
hh(dabcx[i4], 11,  1272893353);
    
hh(cdabx[i7], 16, -155497632);
    
hh(bcdax[i+10], 23, -1094730640);
    
hh(abcdx[i+13], ,  681279174);
    
hh(dabcx[i0], 11, -358537222);
    
hh(cdabx[i3], 16, -722521979);
    
hh(bcdax[i6], 23,  76029189);
    
hh(abcdx[i9], , -640364487);
    
hh(dabcx[i+12], 11, -421815835);
    
hh(cdabx[i+15], 16,  530742520);
    
hh(bcdax[i2], 23, -995338651);

    
ii(abcdx[i0], , -198630844);
    
ii(dabcx[i7], 10,  1126891415);
    
ii(cdabx[i+14], 15, -1416354905);
    
ii(bcdax[i5], 21, -57434055);
    
ii(abcdx[i+12], ,  1700485571);
    
ii(dabcx[i3], 10, -1894986606);
    
ii(cdabx[i+10], 15, -1051523);
    
ii(bcdax[i1], 21, -2054922799);
    
ii(abcdx[i8], ,  1873313359);
    
ii(dabcx[i+15], 10, -30611744);
    
ii(cdabx[i6], 15, -1560198380);
    
ii(bcdax[i+13], 21,  1309151649);
    
ii(abcdx[i4], , -145523070);
    
ii(dabcx[i+11], 10, -1120210379);
    
ii(cdabx[i2], 15,  718787259);
    
ii(bcdax[i9], 21, -343485551);

    
add(aolda);
    
add(boldb);
    
add(coldc);
    
add(doldd);
  }
  return 
rhex(a) + rhex(b) + rhex(c) + rhex(d);
}
</script>

top

4. Functie Toevoegen
Als u de functie in de <head></head> tag van je document hebt gezet mag je dit deel overslaan en overgaan naar deel 5. Als u de functie in een apart bestand hebt gezet moet je in de <head></head> tag van je bestand de volgende code plaatsen:

<script language="JavaScript" src="bestandsnaam.js" />

top

5. Functie Gebruiken
Met het volgende formpje zet je je wachtwoord om naar zijn MD5-Hash:

<form name="omzetten"><input type="text" name="input" />
&
nbsp;<input type="button" value="Naar MD5" 
onclick="document.omzetten.output.value = calcMD5(document.omzetten.input.value);"/>
&
nbsp;<input name="output" type="text" size="35" /></form>

  

top

<persoonlijk>
Als je een punt wilt geven aan deze tut vind ik dat prima, maar als je beslist om laag te stemmen, wil je dan aub zo vriendelijk zijn om erbij te zetten wat er niet goed of duidelijk is, dan kan ik daar aandacht aan besteden.
</persoonlijk>
Persoonlijke Note geschreven door vinTage

Mvg Ontani


« Vorige tutorial : Werken met formulieren Volgende tutorial : Objecten, properties en prototypes »

© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.018s