2011-06-09 101 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.