PHPで変なテキトーなパスワードハッシュの作り方 | TheoryOfContraints official blog

PHPで変なテキトーなパスワードハッシュの作り方

ツイッターの方で、テキトーでパスワードハッシュを作ったら、悪いハッカーが嫌がるのではないのか?を考察していたけど

 

それを暇つぶしで実装して、大体で動いている物が出来た。いくつかパスワードを作成して、ハッシュが出来ているのは確かめたけど。実際で使えるかどうかは知らない

 

試験的な実装なので

 

- 以下、ソースリスト ------

<?php
    class Password {
        static $seed;
        
        static function RndSeed() {
            // 適当なランダム処理
            self::$seed = ~self::$seed;
            self::$seed = self::$seed ^ 904845396; //XOR
            self::$seed = self::$seed ^ 12345678901234567; //XOR
            self::$seed = ~self::$seed; //NOT
            self::$seed = self::$seed * 6 + 1233;
            
            // 丸める
            self::$seed = self::$seed % 10000000000000000000;
            
            return self::$seed;
        }
        
        static function MakeHash ($password, $seed) {
            self::$seed = $seed;
            
            $data = unpack("i*", $password);
            
            $password = "";
            foreach ($data as $value) {
                $seed = self::RndSeed();
                $value = $value ^ $seed;
                
                $password .= pack("C*", $value);
            }
            return hash_hmac('ripemd160', $password, 'secret');
        }
    
    }
    
    echo(Password::MakeHash("password", 1234567890));