Webbserverprogrammering 1

Show sourcecode

The following files exists in this folder. Click to view.

webbsrvprg/exercises/quiz/

create_test.php
create_test_fuckingtrasig.php
hash.php
index.php
login.php
main.php
personal_results.php
setup.php
sign_up.php
test_correcting.php
tests.php
user_administration.php
verification.php

hash.php

67 lines UTF-8 Windows (CRLF)
<?php
    
function customHash($pswrd, $salt){
        
// Hashar lösenordet och saltet. Inte helt säker utan enbart i lärningssyfte

        
$base = 35; // <= 36

        
$str = $salt . $pswrd;
        for (
$i = 0; $i < 5000; $i++){
            
// Kör 5000 steg för extra säkerhet och tröghet
        
$str = customHashStep($str, $i, $base);
        }
        
// shortenNumStr($str, 30, $base); // Kortar ner igen fast behövs nog inte HM
        
return ($str);
    }

    function 
customHashStep($input, $setting, $base){
        
// Tar in strängen som ska stegas och en inställning som gör att alla steg inte görs likadant
        // Massa struntsaker bara, jag fattar inte själv riktigt utan bara la till massa saker som såg bra ut.

        
$num_list = [];
        
$sum = 0;
        
$chars = str_split($input);
        foreach (
$chars as $char) {
            
$num_list[] = mb_ord($char);
            
$sum += mb_ord($char);
        }
        for (
$i = 0; $i<count($num_list); $i++){
            
$num = $num_list[$i];
            
$num_list[$i] *= $num_list[$i] + $setting * $i + $sum;
            if ((
$num  + $setting + $i) % 7 < 2){
                
$temp = $num_list[$i];
                
$num_list[$i] = abs($num_list[($i + 2 + $setting)%count($num_list)] - $num_list[($i + 55)%count($num_list)]);
                
$num_list[($i + 33433)%count($num_list)] = $temp * $num_list[($i*5)%count($num_list)] % ($sum + $i + $setting);
            } else{
                
$num_list[$i] += $setting + 5 + $i*4;
                
$num_list[($i+11)%count($num_list)] += $sum % 374;
                
$num_list[($i+2001)%count($num_list)] = $sum * $num_list[$i] % 17;
            }
        }
        
$num_str = implode("", $num_list);
        
shortenNumStr($num_str, 200); // Kortar ner den så att den inte blir allt för lång.
        
$output = base_convert($num_str, 10, $base);
        return(
$output);
    }

    function 
shortenNumStr(&$str, $len){
        
// Kortar ner en sträng med siffror på ett svårspårat sätt
        
$x = 0;
        while(
strlen($str) > $len){
            
// Tar bort tecknet med index $x och upppdaterar x genom att adera värdet av tecknet

            
$char = $str[$x]; // Sparar värdet av den som ska tas bort.

            
$str = substr($str, 0, $x) . substr($str, $x + 1); // Tar bort tecknet

            
$x += intval($char); // Adderar och modulerar
            
$x %= strlen($str);
        }
        return 
null;
    }

    function 
generateSalt($username) : string{
        
// Unikt för varje användare och förlänger i princip bara lösenordet
        
$salt = $username . "-" . base_convert(rand(10000000000000000,100000000000000000), 10, 36);
        return(
$salt);
    }
?>