SQL-based authentication: Difference between revisions
Content added Content deleted
(Go solution) |
|||
Line 431: | Line 431: | ||
} |
} |
||
}</lang> |
}</lang> |
||
=={{header|Objeck}}== |
|||
<lang objeck>use ODBC; |
|||
use Encryption; |
|||
class SqlTest { |
|||
@conn : Connection; |
|||
function : Main(args : String[]) ~ Nil { |
|||
SqlTest->New()->Run(); |
|||
} |
|||
New() { |
|||
@conn := Connection->New("test", "root", "helloworld"); |
|||
} |
|||
method : Run() ~ Nil { |
|||
CreateUser("robert", "beer"); |
|||
IO.Console->Print("authenticated?=")->PrintLine(AuthenticateUser("robert", "beer")); |
|||
@conn->Close(); |
|||
} |
|||
method : AuthenticateUser(username : String, password : String) ~ Bool { |
|||
status := false; |
|||
if(@conn->IsOpen()) { |
|||
sql := "SELECT pass_salt, pass_md5 FROM users WHERE username = ?"; |
|||
ps := @conn->CreateParameterStatement(sql); |
|||
ps->SetVarchar(1, username); |
|||
result := ps->Select(); |
|||
if(result <> Nil & result->Next()) { |
|||
salt := result->GetVarchar(1); |
|||
md5_db_password := result->GetVarchar(2); |
|||
password->Append(salt); |
|||
md5_user_password := Hash->MD5(password->ToByteArray())->ToHexString(); |
|||
status := md5_user_password->Equals(md5_db_password); |
|||
}; |
|||
ps->Close(); |
|||
}; |
|||
return status; |
|||
} |
|||
method : CreateUser(username : String, password : String) ~ Nil { |
|||
salt := ""; |
|||
for(i := 0; i < 16; i+=1;) { salt->Append((Float->Random() * 100)->As(Int)); }; |
|||
salt := salt->SubString(16); |
|||
password->Append(salt); |
|||
md5_password := Hash->MD5(password->ToByteArray()); |
|||
if(@conn->IsOpen()) { |
|||
sql := "INSERT INTO users(username, pass_salt, pass_md5) VALUES (?, ?, ?)"; |
|||
ps := @conn->CreateParameterStatement(sql); |
|||
ps->SetVarchar(1, username); |
|||
ps->SetVarchar(2, salt); |
|||
ps->SetVarchar(3, md5_password->ToHexString()); |
|||
IO.Console->Print("adding user: username=")->Print(username) |
|||
->Print(", salt=")->Print(salt) |
|||
->Print(", status=")->PrintLine(ps->Update()); |
|||
ps->Close(); |
|||
}; |
|||
} |
|||
}</lang> |
|||
=={{header|Perl}}== |
=={{header|Perl}}== |