2012-01-11 42 views
3

在这里我们有一个场景来编码文件名,并希望在检索时对其进行解码。 如果我用md5编码它,我不能解码它,因为它是单向散列,如果我用'base64_encode'编码它,那么如果两个同名的文件在检索时会导致与我的数据冲突。在php中是否有任何独特的编码和解码功能?

所以我想知道是否有在PHP中的任何独特的编码功能编码和以后解码。

在此先感谢!

+1

所以你想要一个双向加密算法,将相同的输入给不同的结果? – lonesomeday 2012-01-11 10:11:59

+0

叹气,MD5是**不**编码。除此之外,它也会为相同的输入返回相同的哈希值,非常类似于base64_encode将返回相同输入的相同base64字符串 – knittl 2012-01-11 10:13:03

+0

您试图解决什么问题? – knittl 2012-01-11 10:15:16

回答

5

你可以使用BASE64_ENCODE和前面加上这样一个唯一的标识符:

$encoded = base64_encode(uniqid().$filename); //$filename is your filename 

而且像这样解码:

$decoded = base64_decode($encoded); 
$filename = substr($decoded, 13); 

这将基本上给你这是唯一的文件名的编码字符串,可以颠倒为文件名。

+0

唯一的ID在某种意义上,兰特数最多四位数像你说的那样? – Pushparaj 2012-01-11 10:29:06

+1

'uniqid()'是一个给你一个13位数的microtime的php函数,这对服务器来说是唯一的,你不能像随机数那样得到碰撞。代码实际上按原样工作。 – bardiir 2012-01-11 10:31:18

+0

感谢兄弟......正是这个期待...... – Pushparaj 2012-01-11 10:32:32