Base 64编码 - 两次

时间:2014-10-06 11:04:46

标签: php amazon-s3 amazon-cloudfront

我需要为一个S3 URL编写一个URL的64位编码。

我留下了类似的东西:

http://d111111abcdef8.cloudfront.net/image.jpg?color=red&size=medium
&Expires=1357034400
&Signature=nitfHRCrtziwO2HwPfWw~yYDhUF5EwRunQA-j19DzZrvDh6hQ73lDx~-ar3UocvvRQVw6EkC~GdpGQyyOSKQim-TxAnW7d8F5Kkai9HVx0FIu- 5jcQb0UEmatEXAMPLE3ReXySpLSMj0yCd3ZAB4UcBCAqEijkytL6f3fVYNGQI6
&Key-Pair-Id=APKA9ONS7QCOWEXAMPL

如您所见,签名和密钥对ID已编码。

我需要将上述URL用作另一个URL中的参数。

我有base64编码(为了掩盖域名,使其更漂亮),然后对此进行URL编码。

我的问题是,在某些params base 64编码后,再对64进行编码整个字符串,在解码时,签名和密钥对ID等原始参数是否可读?

2 个答案:

答案 0 :(得分:1)

简单的问题,简单的回答:是的。

答案 1 :(得分:0)

如果您打算这样做,则需要使用“&”而不是“&”在您编码的字符串中。此外,base64_decoding整个编码字符串,只会解码最后一次编码。

一个例子:

$string1 = "This is a string";
$string2 = "This is another String";

$string1 = base64_encode( $string1 );
$string2 = base64_encode( $string2 );

echo $string1 . "<br />";

echo $string2 . "<br />";

$entity = "HTTP://www.google.com/?param1=" . $string1 . "&amp;param2=" . $string2;

$encoded_entity = base64_encode( $entity );

echo $encoded_entity . "<br />";

$decoded_entity = base64_decode( $encoded_entity );

echo $decoded_entity . "<br />";

这将输出:

VGhpcyBpcyBhIHN0cmluZw==

VGhpcyBpcyBhbm90aGVyIFN0cmluZw==

SFRUUDovL3d3dy5nb29nbGUuY29tLz9wYXJhbTE9VkdocGN5QnBjeUJoSUhOMGNtbHVadz09JmFtcDtwYXJhbTI9VkdocGN5QnBjeUJoYm05MGFHVnlJRk4wY21sdVp3PT0=

HTTP://www.google.com/?param1=VGhpcyBpcyBhIHN0cmluZw==&param2=VGhpcyBpcyBhbm90aGVyIFN0cmluZw==

正如您所看到的,您可以解码整个字符串,但只会解码您编码的字符串。并非所有编码字符串的级别。为此,您首先必须解码字符串,然后解码参数。

相关问题