function pad_message($str) { $strlen = strlen($str); // NOTE: 8 is the size in bits of a byte (single char string) $l = $strlen * 8; $bitstr = ""; for ($i = 0; $i < $strlen; $i++) { $tmp = substr($str, $i, 1); echo "char [" . $tmp . "] ord [" . ord($tmp) . "] decbin[" . decbin(ord($tmp)) . "]\n"; $tmp = decbin(ord($tmp)); $tmp = str_pad($tmp, 8, 0, STR_PAD_LEFT); $bitstr .= $tmp; } // Append 1 bit $bitstr .= "1"; echo "bitstring:" . $bitstr . "\n"; echo "int_pad_len:" . ($l + 1 + 64) % 512 . "\n"; $padlen = 512 - ($l + 1 + 64) % 512; echo "pad_len:" . $padlen . "\n"; $padding = str_pad($padding, $padlen, 0); $bitstr .= $padding; // Calculate 64 bit length $tmp = new BigInt($l); $bitstr .= str_pad($tmp->ToString(), 64, "0", STR_PAD_LEFT); $blocks = strlen($bitstr) / 512; $ret = array(); for ($i = 0; $i < $blocks; $i++) { $ret[$i] = substr($bitstr, $i * 512, 512); } return $ret; }