我有一个PHP网站充当网络代理/匿名者,我设置了每个访问过的网页在我的服务器上缓存一段时间。为了进一步保护内容,我想将URL编码为一组十六进制字符,但它必须足够独特,以便没有2个URL会发生冲突;缓存页面的文件名将反映编码的URL,因此我不能允许它们被另一个页面的访问覆盖。
与此同时,我一直在使用它:
$file = str_shuffle(preg_replace("/[^a-zA-Z0-9\s]/", "", urlencode($url))) .".html";
......但问题在于它始终是随机的,并不能保证完全独一无二。我想这样做,以便用户可以为他们的URL添加书签(并在给定的时间段内重新访问它们,而无需重新导航到该页面)。我怎样才能生成这样的字符串?
答案 0 :(得分:2)
如果你需要一个“安全”,如 not reversible ,一个URL的唯一“编码”,那就是hashes的用途:
$hash = sha1('http://...');
每个URL的值都是唯一的,两个相同的URL将散列到相同的值,它们不可逆,并且对于大多数意图和目的是随机值。
如果您正在谈论编码(从一种形式更改为另一种形式)或加密(使用密钥更改为另一种形式 ),然后你谈论可逆算法,在这种情况下,结果是定义唯一的。 编码字符串不会是“安全的”,因为没有秘密。 加密字符串与保守秘密一样安全。
所以你有三个选择:
url_encode
,base64_encode
),这是不安全且可逆的所有这三个都会产生唯一值(良好的哈希值在数学上足够高,可以产生唯一值)。