2011-06-09 68 views

回答

8
base64_encode(hash('sha256', 'hello', true)); 
+0

长度从64降低到44个字符 – hidarikani 2011-06-09 07:49:48

+0

我不知道长度可以从哈希到哈希 – hidarikani 2011-06-09 07:54:43

+1

不一样。由于sha-256的输出始终为32个字节,因此base64版本将始终为44个字节。 – 2011-06-09 08:03:39

0

要转换之间的碱基使用http://php.net/manual/en/function.base-convert.php

上述答案去,这不每个注释在这里工作。

+0

'base_convert'不接受64作为基础。它只接受多达36. – MGwynne 2011-06-09 07:43:15

+2

需要采取的一点,回答更新,使其他人可以从我的错误中学习 – babonk 2011-06-09 07:43:40

2

如果你已经有了哈希,并且不控制它那一代,然后像下面应该工作:

<?php 

function hex2char($c) { 
    return chr(hexdec($c)); 
} 

function char2hex($c) { 
    return str_pad(dechex(ord($c)),2,"0",STR_PAD_LEFT); 
} 


function base16to64($v) { 
    return base64_encode(implode(array_map("hex2char", str_split($v,2)))); 

} 

function base64to16($v) { 
    return implode(array_map("char2hex",str_split(base64_decode($v),1))); 

} 


$input = hash('sha256', 'hello'); 

print($input . "\n"); 
print(base16to64($input) . "\n"); 
print(base64to16(base16to64($input)) . "\n"); 


?> 

返回:

2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 
LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ= 
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 

将散列的大小从64减小到44.