Avatar billede sebit Nybegynder
13. juni 2005 - 18:31 Der er 4 kommentarer

javascript array adgangskontrol

Jeg sidder og kæmper med et skoleprojekt hvor jeg laver en form for "krypering" af et password. Idéen er at man opretter et password ved hjælp af en side (i mit tilfælde siden createpass.htm) og for en "krypteret" talværdi som skal angives i index.htm filen. "krypteringen" består i at ASCII værdien omdannes til en talværdi gennem nogle matematiske funktioner. For at komme ind på den skjulte side skal man så vide passwordet. Det er ikke muligt at kopiere talværdien fra kildekoden og bruge det som password. Mit spørgsmål er nu, om der er nogen der kan hjælpe mig med en forklaring på nogen af de matematiske funktioner, da jeg har fundet det meste af koden på en java tutorial side (http://javascript.internet.com/passwords/password-pro-in.html) og ikke kender så meget til de matematiske funktioner i JavaScript. hovedsageligt drejer det sig om udtryk som f[x]=x<<9 hvor jeg har forstået det som at pladsen x i arrayet f defineres, men hvad gør << tegnene i dette eksempel? (Koden skal læses før eksemplet gir mening) og efterfølgende f[x]+=12 ser ganske simpelt ud, men + tegnet på den side af lighedstegnet kan jeg ikke forstå.

På forhånd mange tak for hjælpen, hilsen en Java Begynder Sebastian :o)

<SCRIPT LANGUAGE="JavaScript">
var base= new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9","A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z","a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z")
var pass=""
var z=12;
var y=17;
var f= new Array();
var K= new Array();
for (x=0; x<10; x++){
f[x]=x<<9
f[x]+=12
}
for (x=10; x<36; x++){
y=y<<1
v= Math.sqrt(y)
v = parseInt(v,16)
v+=5
f[x]=v
y++
}
for (x=36; x<62; x++){
z=z<<1
v= Math.sqrt(z)
v = parseInt(v,16)
v+=74
f[x]=v
z++
}
var iCounter = 3 //Antal indtastningsforsøg
function inc(){
iCounter--
if (iCounter > 0)
{
if (confirm("\nAdgangskode findes ikke i systemet\n\n\n\nIndtast igen?"))
Check()
else
alert('Ingen adgang');
history.go(-1);

location.href='index.htm' //Når der annulleres nyt adgangskodeforsøg

}
else
alert('Dine tre forsøg er brugt op  -  ADGANG N&AElig;GTET');
history.go(-1);

location.href='forkert.htm' // 3 gange forkert login => forkert.htm fil

}
function Check(){
pass = prompt("Indtast din adgangskode","")
if(pass==null || pass==""){
history.go(-1)}
else{
var lpass=(pass.length)+1
for (l=1; l<lpass; l++){
K[l]=pass.charAt(l)
}
var code=0;
for (y=1; y<lpass; y++){
for(x=0; x<62; x++){
if (K[y]==base[x]){
code+=f[x]
code*=y
      }
  }
}

<!-- Her er den krypterede adgangkode defineret!  -->
if (code==32755779)    // code=[den valgte kode i createpass.htm omdannet til tal]

go()
else
inc()
  }
}
function go(){
location.href=pass+".htm";
}
</SCRIPT>



For at "kryptere" et password benyttes stort set samme script plus et ekstra make() afsnit:



<Script language="JavaScript">

var base= new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9","A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z","a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z")
var code=0;
var z=12;
var y=17;
var f= new Array();
var K= new Array();
for (x=0; x<10; x++){
f[x]=x<<9
f[x]+=12
}
for (x=10; x<36; x++){
y=y<<1
v= Math.sqrt(y)
v = parseInt(v,16)
v+=5
f[x]=v
y++
}
for (x=36; x<62; x++){
z=z<<1
v= Math.sqrt(z)
v = parseInt(v,16)
v+=74
f[x]=v
z++
}
function make(){
var pass = prompt("Indtast valgfri adganskode","")
if (pass==null || pass==""){
exit()}
else{
var code=0;
var lpass=(pass.length)+1
if (lpass<5){
alert("Indtast venligst en adgangskode på mere end 3 characters");
make()}
else{
if (lpass>9){
alert("Ugyldig adgangskode\n\nMaks 8 characters");
make()}
else{
for (l=1; l<lpass; l++){
K[l]=pass.charAt(l)
}
for (y=1; y<lpass; y++){
for(x=0; x<62; x++){
if (K[y]==base[x]){
code+=f[x]
code*=y
      }
  }
}
alert("Din adgangskode er:  "+code+"\n\n\nSkriv den ned!\n\n\nDu får brug for den senere!");
alert("Husk at oprette din sikre side, "+pass+".htm");
        }
      }
  }
}
function exit(){
if (confirm("Vil du annullere?")){
history.back()}
else{
make()}
}

</Script>
Avatar billede ranglen Nybegynder
13. juni 2005 - 18:40 #1
f[x]=x<<9

<< er bit-shifting. Den shifter 9 pladser til venstre.

For hvert shift, bliver værdien fordoblet. Dvs x<<9 er det samme som x*2^9 = x*512

f[x]+=12 er det samme som f[x]=f[x]+12
Avatar billede sebit Nybegynder
13. juni 2005 - 19:17 #2
Tak for svaret!
Hvordan tildeler jeg dig de 200 point for det(hvis ikke du har modtaget dem automatisk)? Er rookie herinde :o)
Avatar billede sebit Nybegynder
13. juni 2005 - 19:18 #3
Fandt den store knap LOL!
Avatar billede sebit Nybegynder
13. juni 2005 - 19:30 #4
Eller hvad?? Tror du skal indlægge det som svar istedet for kommentar for at jeg kan give dig point for det ranglen...
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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