nginx userid 模块客户端 cookie 解码

PHP 代码 :

<?php
function nginx_userid_decode($str)
{
    $str_unpacked =  unpack('h*', base64_decode(str_replace(' ', '+', $str)));
    $str_split = str_split(current($str_unpacked), 8);
    $str_map = array_map('strrev', $str_split);
    $str_dedoded = strtoupper(implode('', $str_map));
 
    return $str_dedoded;
}
 
// uid=8380A8C09A7E8C4B0A112CC202030303
echo nginx_userid_decode('wKiAg0uMfprCLBEKAwMDAg==');

如果 base64 后的编码中含有 '+' , 在 url 传递中或是 $_COOKIE 数组读取中会被转换为空格

Ruby 代码

From: http://forum.nginx.org/read.php?2,52592,52592

> cookie_uid = "0Cvz4ktwVPEdbRcMAwMFAg=="; cc = cookie_uid.unpack('m*').first; rr = cc.split("").map{|c| c[0].to_i}.inject([]) {|v,s| v.push sprintf("%02X", s); v; }.values_at(3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12).join("")
=> "E2F32BD0F154704B0C176D1D02050303"
snippets/nginxuseriddecode.txt · 最后更改: 2010/04/12 08:41 由 lostsnow
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki