首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  PHP

有没大佬帮忙看看这段 ruby, PHP 要怎么改

  •  
  •   ccnccy · 63 天前用 iPhone 发布 · 1231 次点击
    这是一个创建于 63 天前的主题,其中的信息可能已经有所发展或是发生改变。
    nonce = SecureRandom.hex
    date = Time.now.httpdate
    canonical_string = "application/json,,#{path},#{date},#{nonce}"
    signature = Base64.strict_encode64(OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha1'), user_secret, canonical_string))
    第 1 条附言  ·  63 天前
    改成下面这样,一直错误,提示
    Parse error: syntax error, unexpected '$payload' (T_VARIABLE)


    $path = "/orders?status=live";

    $nonce = md5(time() . mt_rand(0,1000));
    $dt = new DateTime('UTC');
    $date = $dt->format('D, d M Y H:i:s \G\M\T');
    $api_secret1 = 'xxxx'


    $payload = ["#{$path}","#{$date}","#{$nonce}"];
    $signature = hash_hmac("SHA1", $payload,$api_secret1, true);
    $signature_encoded = $this->base64url_encode($signature);
    12 回复  |  直到 2018-12-19 20:57:39 +08:00
        1
    chatfeed   63 天前
    函数大概用到 random_bytes ,date,bin2hex,hash_hmac,base64_encode
        2
    Citrullus   63 天前
    虽然从未接触过 Ruby (手动狗头),但是从这段代码上看,这是一个生成签名的片段吧!获取字符串和当前时间等通过 sha1 生成签名再 base64
        3
    lihongjie0209   63 天前
    有什么看不懂的吗?
        4
    TimLang   63 天前
    感觉像微信签名呀。。
        5
    2pang   63 天前 via Android
    虽然不会 ruby 但这个代码写的这么通俗 一眼就能看出是做什么的吧
        6
    ccnccy   63 天前
    @lihongjie0209
    @2pang
    @chatfeed
    改成下面这样,一直错误,提示
    Parse error: syntax error, unexpected '$payload' (T_VARIABLE)


    $path = "/orders?status=live";

    $nonce = md5(time() . mt_rand(0,1000));
    $dt = new DateTime('UTC');
    $date = $dt->format('D, d M Y H:i:s \G\M\T');
    $api_secret1 = 'xxxx'


    $payload = ["#{$path}","#{$date}","#{$nonce}"];
    $signature = hash_hmac("SHA1", $payload,$api_secret1, true);
    $signature_encoded = $this->base64url_encode($signature);
        7
    2pang   63 天前 via Android   ♥ 1
    Parse error: syntax error, unexpected '$payload' (T_VARIABLE)
    不是写的很清楚么?
    上一行没写分号
        8
    linxu   63 天前 via Android   ♥ 1
    分号少了一个。$api_secret1 = 'xxxx';
        9
    ccnccy   63 天前 via iPhone
    感谢楼上 2 位,我再测试测试。
        10
    peterxu   62 天前   ♥ 1
    上面 ruby 的代码运行结果如下
    ```
    2.4.1 :003 > require 'securerandom'
    => true
    2.4.1 :004 > nonce = SecureRandom.hex
    => "5b6097c4519fb22eb0ae399f0678bd05"
    2.4.1 :005 > require 'time'
    => true
    2.4.1 :006 > date = Time.now.httpdate
    => "Wed, 19 Dec 2018 02:39:32 GMT"
    2.4.1 :007 > path = "path"
    => "path"
    2.4.1 :008 > canonical_string = "application/json,,#{path},#{date},#{nonce}"
    => "application/json,,path,Wed, 19 Dec 2018 02:39:32 GMT,5b6097c4519fb22eb0ae399f0678bd05"
    2.4.1 :009 > require "base64"
    => false
    2.4.1 :010 > user_secret = "user_secret"
    => "user_secret"
    2.4.1 :011 > signature = Base64.strict_encode64(OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha1'), user_secret, canonical_string))
    => "iGwkpjulP43xZqK/h8JBjL9L9ro="
    ```
    为了能跑通,我把 path 和 user_secret 分别给了个值
    path = "path"
    user_secret = "user_secret"
    代码的意思就是
    1、获取一个随机数
    2,获取当前时间的一个 date 格式
    3、拼成一个指定字符串
    4,先使用 sha 算法,再使用 base64 编码
        11
    peterxu   62 天前
    v2ex 不支持 markdown 模式?
        12
    ccnccy   62 天前 via iPhone
    楼上的辛苦了! ruby 真漂亮。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1362 人在线   最高记录 4385   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 17ms · UTC 17:13 · PVG 01:13 · LAX 09:13 · JFK 12:13
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1