我想计算字符串组成的位数。 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,对吧?还是还有一些问题?
答案 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 你可以通过链接看到这是一个例子。