计算字符串

时间:2016-06-28 13:50:58

标签: php

我想计算字符串组成的位数。 Pickle是我不知道"它是什么类型的字符串",假设它是一个用户输入。由于strlen()返回字符串所具有的字节数,我们可以简单地将它乘以8但是如果它提供了sha256散列,那么当原始但是64字符长时为256位。在这里应用strlen()* 8逻辑将给我512位。

所以这是我的工作:

private function countBits(string $key) : int
{
    $bits  =   (ctype_xdigit($key)) ? 4 : 8;
    return strlen($key)*$bits;
}

这是计算字符串组成的位数的正确方法吗?我的意思是如果字符串不完全由hexits组成,那么它应该总是乘以8,对吧?还是还有一些问题?

1 个答案:

答案 0 :(得分:0)

因为内部大小为256位,但块大小为512位。

简单过期

    <?php

$string = 'test';
$key = hash('sha256',$string);
$value = bin2hex($key);



function str_baseconvert($str, $frombase=10, $tobase=36) {
    $str = trim($str);
    if (intval($frombase) != 10) {
        $len = strlen($str);
        $q = 0;
        for ($i=0; $i<$len; $i++) {
            $r = base_convert($str[$i], $frombase, 10);
            $q = bcadd(bcmul($q, $frombase), $r);
        }
    }
    else $q = $str;

    if (intval($tobase) != 10) {
        $s = '';
        while (bccomp($q, '0', 0) > 0) {
            $r = intval(bcmod($q, $tobase));
            $s = base_convert($r, 10, $tobase) . $s;
            $q = bcdiv($q, $tobase, 0);
        }
    }
    else $s = $q;

    return $s;
} 

var_dump(str_baseconvert($key,16,2));
var_dump(strlen($key)*8);

第一个代码返回返回长度hesh, 二级代码返回字符串中的长度位。 http://sandbox.onlinephpfunctions.com/code/777ac7c4528357ee21426ad7cab6dcdbdd00edf0 你可以通过链接看到这是一个例子。