微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 提供的密钥参数不能通过Google API强制转换为私钥

我正在尝试测试这个示例,我找到了 here,这样我就可以在客户端进行直接上传,而无需用户使用Google云端存储登录.

表达的所有常量都有正确的值,路径正确且没有空内容.

我得到的错误

openssl_sign(): supplied key param cannot be coerced into a private key

我实现的功能是:

public static function storageURL( $id,$method = 'GET',$duration = 10 ) {
    $key = file_get_contents(self::KEY_FILE);
    $pkey = openssl_get_privatekey($key,'notasecret');
    $expires = time( ) + $duration;
    $content_type = ($method == 'PUT') ? 'application/x-www-form-urlencoded' : ''; 
    $to_sign = ($method . "\n" . 
    /* Content-MD5 */ "\n" . 
    $content_type . "\n" . 
    $expires . "\n" . 
    '/'.self::BUCKET_NAME.'/' . $id); 
    $signature = '*Signature will go here*';
    if (!openssl_sign( $to_sign,$signature,$pkey,'sha256' ))
    { 
        error_log( 'openssl_sign Failed!' );
        $signature = '<Failed>'; 
    } else { 
        $signature = urlencode( base64_encode( $signature ) ); 
    } 
    return ('https://'.self::BUCKET_NAME.'.commondatastorage.googleapis.com/' .
        $id .
        '?GoogleAccessId=' . self::SERVICE_ACCOUNT_NAME .
        '&Expires=' . $expires . '&Signature=' . $signature);
    }
首先,您需要使用openssl_pkcs12_read来读取密钥文件,而不是file_get_contents.其次,我相信你想把第二个参数留给openssl_get_privatekey.

我强烈建议您使用google-api-php-client,这是Google_P12Signer.php

原文地址:https://www.jb51.cc/php/136660.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐