More Example Code
<?php
class SharedKeys{
    function Create($secret, $people, $show = false){
        $step = 1;
        
        # Truncate/Pad $secret to 16 characters
        $secret = sprintf( "%-' 16s", substr($secret, 0, 16) );
        $keys = array();

        # Generate an array of random keys
        if( $show ){
            echo "\nGenerating Random Keys\n";
        }
        for( $n = 1; $n < $people; ++$n ){
            # Create the binary string from an md5 hash
            # Use mt_rand() to seed the hash
            $keys[] = pack("H*", md5(mt_rand()));
            
            if( $show ){
                echo "Generating Random Key: ", $keys[count($keys) - 1],"\n";
            }
        }

        # Generate the final key by XORing the 
        # previous keys together with the secret
        if( $show ){
            echo "\nDeconstructing Original Key\n",
                 "Deconstructing Original Key (Step 1): ", $secret, "\n";
        }
        
        $out = $secret;
        foreach( $keys as $key ){
            $out ^= $key;
            if( $show ){
                echo "Deconstructing Original Key (Step ", ++$step, "): " , $out,"\n";
            }
        }
        
        array_push($keys, $out);

        # Don't always allow $out to come last in the array
        sort($keys);
        return $keys;
    }

    function Assemble($keys, $show = false){
        $step = 0;
        $out = array_pop($keys);
        if( $show ){
            echo "\nReconstructing Original Key\n",
                 "Reconstructing Original Key (Step ", ++$step, "): " , $out,"\n";
        }
        
        foreach($keys as $key){
            $out ^= $key;
            if( $show ){
                echo "Reconstructing Original Key (Step ", ++$step, "): ", $out,"\n";
            }
        }
        return $out;
    }
}
?>
Output