【问题标题】:Base 64 encode - twiceBase 64 编码 - 两次
【发布时间】:2014-11-30 15:12:52
【问题描述】:

我需要对 S3 URL 的 URL 部分进行 base 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 编码。

我的问题是,对某些参数进行 base 64 编码,然后再对整个字符串进行 base 64 编码,解码后,原始参数(如 Signature 和 Key Pair ID)是否可读?

【问题讨论】:

  • 可以编码为 Base64 的内容,可以从 Base64 解码的内容。

标签: php amazon-s3 amazon-cloudfront


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    如果你打算这样做,你需要在你正在编码的字符串中使用“&”而不是“&”。另外,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==
    

    如您所见,您可以解码整个字符串,但只有您编码的字符串会被解码。并非编码字符串的所有级别。为此,您首先必须对字符串进行解码,然后再对参数进行解码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-03
      • 1970-01-01
      • 1970-01-01
      • 2011-10-11
      • 1970-01-01
      • 2018-09-01
      • 2012-12-15
      • 2019-02-16
      相关资源
      最近更新 更多