Gå til innhold

"Løst" Login applet ønsket


Anbefalte innlegg

Jeg trenger en applet som tar brukernavn og passord, samt 2 parametere (strenger) fra <applet> tag. utfører så en

 

for (i=1000;i>0;i++)

{

passord = sha-256(pa + passord) #pa = 2 første bokstavene i passord

}

passordhash = passord

 

sha-256(passordhash + param1) som skal sendes til siden som postvariabel 'password' sammen med postvariabel 'username'. I tillegg settes en verdi sha-256(passordhash + param2) i en lokal cookie med navn sessionkey eller noe.

 

har en påbegynt konseptkode:

Klikk for å se/fjerne innholdet nedenfor
import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class LoginApplet extends Applet implements ActionListener
{
String randomInput;
TextField usernameField;
TextField passwordField;
Button loginButton;
Button forgotButton;
StringBuffer passwordBuffer;
StringBuffer messageBuffer;

public void init()
{
 randomInput = getParameter("random");

 passwordBuffer = new StringBuffer();
 messageBuffer = new StringBuffer();

 setLayout(new FlowLayout());
 usernameField = new TextField("",20);
 passwordField = new TextField("",20);
 loginButton = new Button("Login");
 forgotButton = new Button("Forgot password?");

 add(usernameField);
 add(passwordField);
 add(loginButton);
 add(forgotButton);

 passwordField.addActionListener(this);
 loginButton.addActionListener(this);
 forgotButton.addActionListener(this);
}


public void paint(Graphics g)
{
 g.drawString(messageBuffer.getText(), 50, 50);
 repaint();
}

public void actionPerformed(ActionEvent evt)
{
 if (evt.getSource() == passwordField)
 {
 	String asterix;
 	asterix = new String();

 	passwordBuffer.append(passwordField.getText()[-1]);
 	
 	passwordField.setText(asterix);
 }
 else if (evt.getSource() == loginButton)
 {
 	login(usernameField.getText(), passwordBuffer.getText());
 }
 else if (evt.getSource() == forgotButton)
 {
 	forgot(usernameField.getText());
 }
}

private void login(String usernameString, String passwordString)
{
 String passwordHash;
 String finalHash;

 passwordHash = md5(passwordString);
 finalHash = md5(randomInput + passwordHash);

 
}

private void forgot(String usernameString)
{
 messageBuffer.setString("Password will be sent by email.");
 repaint();
}

private String md5(String input)
{
}
}

 

Noen som kan hjelpe? Trenger litt veiledning. md5 funker men helst sha256.

Endret av grimjoey
Lenke til kommentar
  • 2 uker senere...
Videoannonse
Annonse
  • 3 uker senere...
  • 3 uker senere...

kort svar: nei

 

lengre svar:

 

tanken var å lage en egen session håndtering i php som utiliserer challenge-response. brukeren har brukernavn og passord. serveren har en sha1 hash av passordet. serveren genererer en unik verdi hver gang siden blir etterspurt. passordet som blir skrevet inn blir hashet, og hashen blir hashet med den unike verdien som er motatt av serveren. dette skjer på clien siden uten annen trafikk. kun unik verdi som er sendt til javascript. clienten sender hashen av passordhashen + unike verdien til server. serveren hasher databaseverdien med den tilfeldige verdien den sendte og sammenlikner. helle denne greia gjøres to ganger første login med to ulike unike verdier. den ene slutthashen blir lagret i web browseren (her har jeg problemer. jeg lagrer som cookie og den blir send. det tenkte jeg ikke på da jeg laget systemet) som da brukes som dynamisk session key. altså klienten får en ny tilfeldig verdi av serveren hver gang en ny side åpnes og challenge-response skjer hver gang. session id er unik for hver request. session hijacking ikke lenger mulig. jeg fikk systemet ferdig. eneste som mangler er å implementere en annen løsning for lokal lagring av session_id_generator_hashen. det finnes et par måter å gjøre det på men det er browser spesifikt (kun ie og ff som jeg vet om). venter til det kommer en standard eller dukker opp en annen løsning før jeg fikser det. koden finnes på php forumet. skrev det for utfordringens skyld og for å bli kjent med objekt orientert php. egentlig ikke så nøye at det er ubrukelig.

Lenke til kommentar
  • 2 uker senere...
Er det noen spesiellt grunn til at du foretar hashutregningen 1000 ganger?
Er det dette som får deg til å tro han gjør det 1000 ganger?
for (i=1000;i>0;i++)
{
passord = sha-256(pa + passord) #pa = 2 første bokstavene i passord
}

Look again!

 

 

 

 

 

 

 

Hint: Den går helt til man runder 2^31 - 1 (evt. til man ikke får lov å bruke mer minne).

Lenke til kommentar
  • 1 måned senere...

det skulle vel være for (i=0;i<1000;i++).

 

grunnen er å gjøre et eventuelt angrep tregere. det tar 1000 ganger lenger tid å gjenskape en hash for sammenlikning i forhold til om passordet kun var hashet 1 gang. ved dict eller brute angrep må noen millioner kombinasjoner testes. dette blir billioner av hash operasjoner.

 

btw: kunne kanskje latt for loopen være. da blir det vanskeligere å reverse enginere og se at jeg hasher 2^31-1 ganger. noen vil tro det bare var 1000. mulig hashingen går litt tregt da men.

Endret av grimjoey
Lenke til kommentar
  • 2 uker senere...

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...