Demo

Give it a try
and play around
with ClanSphere
Demo


Answers: 0
Page [1]
reVerB


Geekboy




Posts: 1237
# Thread - 2015-08-25 at 12:06 PM
Halli Hallo,

nach unfassbarer Ewigkeit bin ich auch mal wieder hier und habe da mal eine kleine Frage. Ich habe da für mein kleines RIA-Framework eine Funktion zum hashen eines Passwortes geschrieben und würde gerne mal eine Meinung dazu hören. Denn schließlich würde ich auch gerne mein Clansphere damit ausstatten. Ich halte das Teil schon für effektiv gegen Bruteforce, kollision und auch Rainbowtable-Angriffe. Aber da könnte ich mich auch täuschen. Ist etwas gegen den Algo einzuwenden?
 
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
1. / 2. / ... 
 function rubiksSaltedHash($password,$regstamp) {
        
$hashed_stamp substr(preg_replace("![^0-9]!","",hash("sha256",$regstamp)),0,12);
        
$hashes = array("md5","sha1","sha256","sha384","ripemd128","ripemd160","ripemd256","ripemd320","snefru","gost");
        
$salt_len = (int) $hashed_stamp[11] > ? (int) $hashed_stamp[11] : 9;
        
$pw_prehash $hashes[(int) $hashed_stamp[10]];
        
$signarray[0] = array("a","c","e","g","h","j","l","n","p","r");
        
$signarray[1] = array("b","d","f","i","k","m","o","q","s","t");
        
$signarray[2] = array("1","3","5","7","9","#","*","-",".",",");
        
$signarray[3] = array("2","3","6","8","0",":","_","=","/","!");
        
$conv_timestamp str_split(substr((string) $hashed_stamp,0,$salt_len));
        
$salt "";
        foreach(
$conv_timestamp as $num) {
            
$salt .= $signarray[0][(int) $num];
            
$salt .= $signarray[1][(int) $num];
            
$salt .= $signarray[2][(int) $num];
            
$salt .= $signarray[3][(int) $num];
            
$signarray[0] = array_reverse($signarray[0]);
            
$signarray[1] = array_reverse($signarray[1]);
            
$signarray[2] = array_reverse($signarray[2]);
            
$signarray[3] = array_reverse($signarray[3]);
            
$signarray array_reverse($signarray);
        }
        
$spl_salt str_split($salt);
        
$pass array_reverse(str_split(hash($hashes[(int) $hashed_stamp[10]],$password)));
        
$new_password "";
        if(
count($pass) > count($spl_salt)) {
            foreach(
$pass as $num => $char) {
                
$new_password .= $char;
                if(isset(
$spl_salt[$num])) {
                    
$new_password .= $spl_salt[$num];
                }
            }
        } else {
            foreach(
$spl_salt as $num => $char) {
                
$new_password .= $char;
                if(isset(
$pass[$num])) {
                    
$new_password .= $pass[$num];
                }
            }
        }
        return 
hash("sha512",$new_password);
    }


Eine Demo dazu gibt es hier: http://amdpush.bplaced.net/tools/rubiks.php

Würde mich über Rückmeldung freuen.

EDIT: Ich habe den Code noch einmal kurz überarbeitet, da ich eine Sicherheitslücke entdeckt hatte. Passwort-Prehash sowie der erzeugte Salt ergaben zusammen eine fixe Länge, wodurch sich Bruteforce nur auf Zeichenkombinationen mit 82 Zeichen hätten knzentrieren können. Jetzt ist die Saltlänge unterschiedlich und der Prehash wechselt, weswegen auch die Länge des Prehash wechseln kann.

Screenshot mit PHP Desktop im Anhang
Files:
jpg rubiks_screen.JPG (227.17 KiB - 95 x downloaded )


Last edit by reVerB at 2015-08-25 at 1:09 PM (3x Edited)
Inactive
Answers: 0
Page [1]


You must be registered.