목차
Preparation
서명 계산
백엔드 개발 PHP 튜토리얼 PHP는 Tencent Cloud COS 인터페이스에 필요한 요청 서명 관련 콘텐츠를 생성합니다.

PHP는 Tencent Cloud COS 인터페이스에 필요한 요청 서명 관련 콘텐츠를 생성합니다.

Jun 23, 2018 pm 04:02 PM
cos php 서명 요청

이 글에서는 PHP를 사용하여 COS 인터페이스를 생성하는 데 필요한 요청 서명을 주로 소개합니다. 알고리즘의 정확성을 확인하기 위해 공식 문서에 제공된 예제와 비교하세요. 서명

COS는 Tencent Cloud Object Storage의 약자로, COS 관련 인터페이스를 호출할 때 제3자가 요청 시 제공해야 하는 특정 알고리즘에 의해 생성된 문자열 정보 집합입니다. 유효한 서명 COS만이 서비스를 제공합니다

Goal

PHP를 사용하여 COS 인터페이스에 필요한 요청 서명을 생성하고 이를 공식 문서에 제공된 예와 비교합니다. 알고리즘의 정확성 확인

요청 서명 이해

먼저 공식 문서에 제공된 요청 서명을 살펴보겠습니다

q-sign-algorithm=sha1&q-ak=[SecretID]&q-sign -time=[SignTime]&q- key-time=[KeyTime]&q-header-list=[SignedHeaderList]&q-url-param-list=[SignedParameterList]&q-signature=[Signature]

서명 기능 요약 요청

는 문자열입니다.
  • key=value 키-값 쌍 형식이고, 키는 고정 값입니다.
  • key=value의 7쌍이 있습니다
  • sha1도 매개변수이지만 정식 릴리즈에서는 sha1만 지원하므로 직접 할당 가능
  • SignedHeaderList, SignedParameterList, Signature 세 가지 값은 알고리즘을 통해 생성되어야 함
  • 키에 대한 구체적인 설명은 공식 문서를 참조하세요. -값 쌍.
하나씩 깨기

서명을 요청하려면 총 7개의 값이 필요합니다. 각

q-sign-algorithm

서명 알고리즘을 깨기 위해 아래에서 하나씩 설명하겠습니다. 공식에서는 sha1만 지원하므로 그냥 주면 됩니다. 값을 직접

q-ak

계정 ID, 즉 사용자의 SecretId는 콘솔의 Cloud API Key 페이지에서 확인할 수 있습니다

q-sign-time

현재 서명, Unix 타임스탬프 형식, 영어 반각 세미콜론, 형식은 다음과 같습니다. 1480932292;1481012298

q-key-time

q-sign-time과 동일한 값

q-header-list

Personal 이해하면 HTTP 요청 헤더로 구성되며 요청 헤더의 전부 또는 일부를 가져와 키:값 형식을 사용합니다. 요청 항목의 키 부분을 꺼내어 소문자로 변환하고 사전에 따라 여러 키를 정렬하고 문자로 연결하여 최종적으로 문자열을 형성합니다

예를 들어 원래 요청 헤더에는

Host:bucket1-1254000000.cos.ap- beijing.myqcloud.com

Content-Type: image/jpeg


키는 호스트 및 콘텐츠 유형입니다.

q-url-param-list

개인 이해, 요청 매개변수의 전부 또는 일부를 가져옵니다. 요청 매개변수의 핵심 부분을 key=value 형식으로 추출하고, 이를 소문자로 변환하고, 여러 키를 사전별로 정렬하고, 문자 ;로 연결하고, 마지막으로 문자열을 형성합니다

예를 들어 원래 HTTP 요청은 다음과 같습니다. :

GET /?prefix=abc&max-keys=20

key는 max-keys입니다. 작업 후 요청에 put, post 등의 매개변수가 없으면 max-keys;prefix가 출력됩니다. 비어 있습니다

q-signature

HTTP 콘텐츠를 기반으로 서명을 계산합니다. 알고리즘은 COS에서 제공합니다. 필요에 따라 값을 지정하세요.

공식 예제 및 참조 결과

로직 작성을 시작하기 전에 공식 예제와 프로세스에서 제공하는 참조 값을 살펴보세요. 계산된 결과는 직접 개발한 로직과 비교할 수 있습니다.

HTTP 원래 요청은 서명을 계산하기 전이나 서명이 없을 때의 HTTP 요청으로도 이해될 수 있습니다. 서명이 필요합니다:

PUT /testfile2 HTTP/1.1

호스트: bucket1 -1254000000.cos.ap-beijing.myqcloud.com
x-cos-content-sha1: 7b502c3a1f48c8609ae212cdfb639dee39673f5e

x-co s-스토리지 클래스: 표준

Hello world

는 서명 HTTP 요청을 계산한 후에 얻어야 합니다.

PUT /testfile2 HTTP/1.1
호스트: bucket1-1254000000.cos.ap-beijing.myqcloud.com
x-cos-content-sha1: 7b502c3a1f48c8609ae212cdfb639dee39673f5e
x-cos-storage-class: 표준
인증: q-sign -algorithm=sha1&q-ak=AKIDQjz3ltompVjBni5LitkWHFlFpwkn9U5q&> q-sign-time=1417773892;1417853898&q-key-time=1417773892;1417853898&q-header-list=host;x-cos-content-sha1;x- co s-스토리지 클래스&q-url -param-list=&q-signature=14e6ebd7955b0c6da532151bf97045e2c5a64e10

Hello world

결론: Authorization

Preparation

(공식적으로 제공되는) 사용자 정보를 살펴보겠습니다. 그리고 HTTP 정보:

  • SecretId: AKIDQjz3ltompVjBni5LitkWHFlFpwkn9U5q

  • SecretKey: BQYIM75p8x0iWVFSIgqEKwFprpRSVHlz

  • 서명 유효 시작 시간: 1417773892

  • 서명 유효 중지 시간: 1417853898

  • HTTP 원래 요청 헤더: 위의 내용에 따름 Host, x-cos-content-sha1 및 x-cos-storage-class

  • HTTP 요청 매개변수: 매개변수가 없는 PUT 요청입니다.

서명 계산

준비 작업의 다양한 매개 변수를 요청 서명 규칙에 넣으면 다음 표와 같이 쉽게 결과를 얻을 수 있습니다.


HTTP 매개변수 목록이 비어 있습니다코드로 계산
Key(key) Value (값) Remarks
q-sign-algorithm sha1 현재 sha1 서명 알고리즘만 지원
q-ak AKIDQjz3ltompVjBni5LitkWHFlF pwkn9U5q SecretId 필드
q-sign- 시간 1417773892;1417853898 2014/12/5 18:04:52 ~ 2014/12/6 16:18:18
q-key-time 1417773892;1417853 898 2014/12/5 18:04:52 ~ 2014/12/6 16:18:18
q-header-list host; q-url-param-list

q-서명
14e6ebd7955b0c6da532151bf97045e2c5a64e10

그런데 q-signature는 어디서 왔나요?

방금 언급했듯이 q-서명도 특정 알고리즘으로 계산해야 합니다. 계산 방법은 다음과 같습니다.

요청 서명 계산

코드를 먼저 살펴보세요.

/**
 * 计算签名
 * secretId、secretKey 为必需参数,qSignStart、qSignEnd为调试需要,测试通过后应取消,改为方法内自动创建
 */
function get_authorization( $secretId, $secretKey, $qSignStart, $qSignEnd, $fileUri, $headers ){
 /* 
 * 计算COS签名
 * 2018-05-17
 * author:cinlap <cash216@163>
 * ref:https://cloud.tencent.com/document/product/436/7778
 */

 $qSignTime = "$qSignStart;$qSignEnd"; //unix_timestamp;unix_timestamp
 $qKeyTime = $qSignTime;

 $header_list = get_q_header_list($headers);
 //如果 Uri 中带有 ?的请求参数,该处应为数组排序后的字符串组合
 $url_param_list = &#39;&#39;;

 //compute signature
 $httpMethod = &#39;put&#39;;
 $httpUri = $fileUri;

 //与 q-url-param-list 相同
 $httpParameters = $url_param_list;

 //将自定义请求头分解为 & 连接的字符串
 $headerString = get_http_header_string( $headers );

 // 计算签名中的 signature 部分
 $signTime = $qSignTime;
 $signKey = hash_hmac(&#39;sha1&#39;, $signTime, $secretKey);
 $httpString = "$httpMethod\n$httpUri\n$httpParameters\n$headerString\n";
 $sha1edHttpString = sha1($httpString);
 $stringToSign = "sha1\n$signTime\n$sha1edHttpString\n";
 $signature = hash_hmac(&#39;sha1&#39;, $stringToSign, $signKey);
 //组合结果
 $authorization = "q-sign-algorithm=sha1&q-ak=$secretId&q-sign-time=$qSignTime&q-key-time=$qKeyTime&q-header-list=$header_list&q-url-param-list=$url_param_list&q-signature=$signature";
 return $authorization;
}
로그인 후 복사

테스트용 , 메소드 매개변수는 필요 이상이어야 합니다. 처음 6개의 매개변수는 이미 제공되었으며 사용자로부터 왔으므로 직접 할당하여 다음 문자열을 얻을 수 있습니다.

$authorization = "q-sign-algorithm= sha1&q-ak=$secretId&q- sign-time=$qSignTime&q-key-time=$qKeyTime...

$header_list 이 값은 q-header-list 규칙을 준수해야 하므로 논리는 위에 설명된 대로입니다. 이는 설정된 요청 항목에서 키를 추출하여 질서 있는 문자열을 형성하는 것이며 코드는 다음과 같습니다.

/**
 * 按COS要求对header_list内容进行转换
 * 提取所有key
 * 字典排序
 * key转换为小写
 * 多对key=value之间用连接符连接
 * 
 */
function get_q_header_list($headers){
 if(!is_array($headers)){
  return false;
 }

 try{
  $tmpArray = array();
  foreach( $headers as $key=>$value){
   array_push($tmpArray, strtolower($key));
  }
  sort($tmpArray);
  return implode(&#39;;&#39;, $tmpArray);
 }
 catch(Exception $error){
  return false;
 }
}
로그인 후 복사

$url-param-list 위에서 언급한 대로 이 값은 HTTP 요청 매개변수가 없습니다. PUT 메소드의 ? 매개변수는 비어 있으므로 코드에서 "lazy"가 직접 제공됩니다.

서명 계산 및 주의해야 할 사항

알고리즘, PHP가 코드까지 작성했으니 매우 기쁠 것입니다(하지만 공식 문서를 보면 여전히 현기증이 나므로 나중에 함께 설명하겠습니다). 먼저 서명의 "형식"을 살펴보세요.

SignKey = HMAC -SHA1(비밀키, "[q-key-time]")
HttpString = [HttpMethod]n[ HttpURI]n[HttpParameters]n[HttpHeaders]n
StringToSign = [q-sign-algorithm]n[q-sign- time]nSHA1-HASH(HttpString)n
Signature = HMAC-SHA1(SignKey,StringToSign)

서명의 전체 알고리즘을 다시 살펴보세요.

$signTime = $qSignTime;
$signKey = hash_hmac('sha1 ', $signTime, $secretKey);
$httpString = "$httpMethodn$httpUrin$httpParametersn$headerStringn";
$sha1edHttpString = sha1($httpString);
$stringToSign = "sha1n$signTimen$sha1edHttpStringn";
$signature = hash_hmac('sha1', $stringToSign, $signKey);

$signTime: 매우 간단하며 시작 및 종료 시간으로 구성됩니다. 문자열은 위에서 가져오며
$signKey: HMAC-SHA1 알고리즘을 사용하여 직접 계산할 수 있습니다.
$httpString: 네 부분은 별도로 언급해야 합니다.
1. $httpMethod: put , get과 같은 소문자 $httpUri: HTTP 요청의 URI 부분입니다. "/" 가상 루트, 예를 들어 /testfile은 버킷의 루트 디렉터리에 testfile이라는 파일을 생성한다는 의미이고, /image/face1.jpg는 루트 디렉터리에 testfile이라는 파일을 생성한다는 의미/ image 디렉터리. 이미지 파일인지 아닌지는 중요하지 않습니다. 3. $httpParameters: 먼저 주의해야 할 곳입니다. 이는 HTTP 원래 요청 매개변수, 즉 요청 URI에서 ? 뒤의 부분으로 구성됩니다. 이 예제에서는 PUT 객체 인터페이스를 호출하므로 비어 있습니다. 비어 있지 않은 경우 요청 매개변수의 각 항목의 키와 값을 소문자로 변환해야 합니다. 여러 쌍의 키=값이 사전별로 정렬되어 &로 연결됩니다. HTTP 원본 요청 헤더 구성에 따라 요청 헤더 전체 또는 일부를 선택하고, 각 항목의 키를 소문자로 변환하고, 값을 URLEncode로 변환하고, 각 항목의 형식을 key=value로 변경합니다. , 키에 따라 사전을 정렬하고 마지막으로 & 커넥터를 사용하여 문자열을 구성합니다. 이것이 제가 컴파일한 로직입니다. 코드는 다음과 같습니다.


/**
 * 按COS要求从数组中获取 Signature 中 [HttpString] 内容
 * 标准格式 key=value&key=value&... 
 * 数组元素按键字典排序 * 
 * key转换为小写
 * value进行UrlEncode转换
 * 转换为key=value格式
 * 多对key=value之间用连接符连接
 * 
 */
function get_http_header_string($headers){
 if(!is_array($headers)){
  return false;
 }

 try{
  $tmpArray = array();
  foreach($headers as $key => $value){
   $tmpKey = strtolower($key);
   $tmpArray[$tmpKey] = urlencode($value);
  }
  ksort($tmpArray);
  $headerArray = array();
  foreach( $tmpArray as $key => $value){
   array_push($headerArray, "$key=$value");
  }
  return implode(&#39;&&#39;, $headerArray);
 }
 catch(Exception $error){
  return false;
 }
}
로그인 후 복사

왜 조심해야 합니까?

HTTP 원본 요청 헤더와 요청 매개변수는 요청 서명의 q-header-list와 서명의 HttpHeaders 등 네 곳에서 사용됩니다. 둘 다 요청 서명 url-param-list의 HTTP 원본 요청 헤더 q-를 사용합니다. 및 서명의 HttpParameters - 둘 다 HTTP 요청 매개변수를 사용합니다. 선택한 HTTP 요청 헤더 및 요청 매개변수의 수가 개체와 일치하는지 확인하십시오. q-header-list에 의해 생성된 HTTP 요청 헤더의 수 및 멤버는 HttpHeaders에서 사용되는 것과 동일해야 하며, q- url-param-list가 생성됩니다. HTTP 요청 매개변수의 수와 멤버는 HttpParameters

를 생성하는 데 사용된 것과 동일해야 합니다. 차이점: q-header-list 및 q-url-param-list는 핵심 부분인 HttpHeaders와 HttpParameters는 키와 값 부분을 차지합니다
  • 출력 결과 및 검증
  • 이 시점에서 요청 서명에는 7개의 값이 있으며 일부는 사용자 정보에서 가져온 것입니다. 계산됩니다. 모든 계산 방법과 계산 이유에 대한 개인적인 이해도 위에 나와 있습니다. 마지막으로 공식 요구 사항에 따라 출력하면 됩니다. 살펴보세요

위 내용은 PHP는 Tencent Cloud COS 인터페이스에 필요한 요청 서명 관련 콘텐츠를 생성합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

JWT (JSON Web Tokens) 및 PHP API의 사용 사례를 설명하십시오. JWT (JSON Web Tokens) 및 PHP API의 사용 사례를 설명하십시오. Apr 05, 2025 am 12:04 AM

JWT는 주로 신분증 인증 및 정보 교환을 위해 당사자간에 정보를 안전하게 전송하는 데 사용되는 JSON을 기반으로 한 개방형 표준입니다. 1. JWT는 헤더, 페이로드 및 서명의 세 부분으로 구성됩니다. 2. JWT의 작업 원칙에는 세 가지 단계가 포함됩니다. JWT 생성, JWT 확인 및 Parsing Payload. 3. PHP에서 인증에 JWT를 사용하면 JWT를 생성하고 확인할 수 있으며 사용자 역할 및 권한 정보가 고급 사용에 포함될 수 있습니다. 4. 일반적인 오류에는 서명 검증 실패, 토큰 만료 및 대형 페이로드가 포함됩니다. 디버깅 기술에는 디버깅 도구 및 로깅 사용이 포함됩니다. 5. 성능 최적화 및 모범 사례에는 적절한 시그니처 알고리즘 사용, 타당성 기간 설정 합리적,

PHP에서 늦은 정적 결합을 설명하십시오 (정적 : :). PHP에서 늦은 정적 결합을 설명하십시오 (정적 : :). Apr 03, 2025 am 12:04 AM

정적 바인딩 (정적 : :)는 PHP에서 늦은 정적 바인딩 (LSB)을 구현하여 클래스를 정의하는 대신 정적 컨텍스트에서 호출 클래스를 참조 할 수 있습니다. 1) 구문 분석 프로세스는 런타임에 수행됩니다. 2) 상속 관계에서 통화 클래스를 찾아보십시오. 3) 성능 오버 헤드를 가져올 수 있습니다.

php magic 방법 (__construct, __destruct, __call, __get, __set 등)이란 무엇이며 사용 사례를 제공합니까? php magic 방법 (__construct, __destruct, __call, __get, __set 등)이란 무엇이며 사용 사례를 제공합니까? Apr 03, 2025 am 12:03 AM

PHP의 마법 방법은 무엇입니까? PHP의 마법 방법은 다음과 같습니다. 1. \ _ \ _ Construct, 객체를 초기화하는 데 사용됩니다. 2. \ _ \ _ 파괴, 자원을 정리하는 데 사용됩니다. 3. \ _ \ _ 호출, 존재하지 않는 메소드 호출을 처리하십시오. 4. \ _ \ _ get, 동적 속성 액세스를 구현하십시오. 5. \ _ \ _ Set, 동적 속성 설정을 구현하십시오. 이러한 방법은 특정 상황에서 자동으로 호출되어 코드 유연성과 효율성을 향상시킵니다.

매치 표현식 (PHP 8)과 스위치와 어떻게 다른지 설명하십시오. 매치 표현식 (PHP 8)과 스위치와 어떻게 다른지 설명하십시오. Apr 06, 2025 am 12:03 AM

PHP8에서 매치 표현식은 표현식의 값에 따라 다른 결과를 반환하는 새로운 제어 구조입니다. 1) 스위치 명령문과 유사하지만 실행 명령문 블록 대신 값을 반환합니다. 2) 경기 표현식은 엄격하게 비교되어 (===) 보안을 향상시킵니다. 3) 스위치 명세서에서 가능한 파손을 피하고 코드의 단순성과 가독성을 향상시킵니다.

Pantera와 같은 Top Venture Capitalists가 Altius에 베팅하는 이유는 무엇입니까? 모듈 식 실행 계층이 블록 체인의 성능 병목 현상을 어떻게 깨뜨리는 지에 대한 비밀을 드러냅니다. Pantera와 같은 Top Venture Capitalists가 Altius에 베팅하는 이유는 무엇입니까? 모듈 식 실행 계층이 블록 체인의 성능 병목 현상을 어떻게 깨뜨리는 지에 대한 비밀을 드러냅니다. Mar 04, 2025 pm 06:30 PM

암호화 신생 기업 인 Altius는 최근 Foundersfund와 Pantera Capital이 이끄는 1,100 만 달러의 금융 라운드를 발표했습니다. Altius는 파이낸싱 뉴스 발표 전에 한 번만 트윗을 게시 한 것이 현저합니다. Pantera Capital과 같은 최고의 벤처 캐피탈 기관을 정확히 끌어들이는 것은 무엇입니까? 답은 Altius의 혁신적인 블록 체인 실행 레이어 재구성에 있습니다. Altius는 전통적인 단일 공개 체인 프로젝트가 아닙니다. 이 솔루션은 VM (Virtual Machine) 메커니즘을 사용하여 모든 공개 체인과 완벽하게 통합 될 수 있습니다.

모카버스 바닥 가격은 2.9ETH를 초과했으며 24 시간 동안 최대 79% 증가했습니다! NFT 워밍업? 모카버스 바닥 가격은 2.9ETH를 초과했으며 24 시간 동안 최대 79% 증가했습니다! NFT 워밍업? Mar 05, 2025 pm 02:48 PM

NFT 시장에서 회복의 징후! OpenSea 데이터에 따르면 최대 79%증가한 Mocaverse Floor Price는 최근에 잘 알려진 NFT 프로젝트 Mocaverse의 바닥 가격이 2.96에서 2.96으로 초과되었으며, 24 시간의 놀라운 24 시간 증가는 3.49에 이르렀습니다. 이 중대한 성장은 시장에서 광범위한 관심을 끌었습니다. 모카버스 바닥 가격 차트 NFT 부문을 이끌고 Crypto Market Coingecko 데이터는 지난 24 시간 동안 전체 암호화 시장이 상승했으며 NFT 부문은 8.53%증가한 것으로 목록에 올랐습니다. 일부 프로젝트는 특히 좋습니다

C 언어로 멀티 스레딩을 구현하는 4 가지 방법 C 언어로 멀티 스레딩을 구현하는 4 가지 방법 Apr 03, 2025 pm 03:00 PM

언어의 멀티 스레딩은 프로그램 효율성을 크게 향상시킬 수 있습니다. C 언어에서 멀티 스레딩을 구현하는 4 가지 주요 방법이 있습니다. 독립 프로세스 생성 : 여러 독립적으로 실행되는 프로세스 생성, 각 프로세스에는 자체 메모리 공간이 있습니다. 의사-다일리트 레딩 : 동일한 메모리 공간을 공유하고 교대로 실행하는 프로세스에서 여러 실행 스트림을 만듭니다. 멀티 스레드 라이브러리 : PTHREADS와 같은 멀티 스레드 라이브러리를 사용하여 스레드를 만들고 관리하여 풍부한 스레드 작동 기능을 제공합니다. COROUTINE : 작업을 작은 하위 작업으로 나누고 차례로 실행하는 가벼운 다중 스레드 구현.

APSCHEDULER 타이밍 작업을 MACOS의 서비스로 구성하는 방법은 무엇입니까? APSCHEDULER 타이밍 작업을 MACOS의 서비스로 구성하는 방법은 무엇입니까? Apr 01, 2025 pm 06:09 PM

Apscheduler 타이밍 작업을 MacOS 플랫폼의 서비스로 구성하십시오. Ngin과 유사한 APSCHEDULER 타이밍 작업을 서비스로 구성하려면 ...

See all articles