PHP 개발 API 인터페이스 서명 생 성 및 검증 작업 예시
개발 과정 에서 우 리 는 인터페이스 와 자주 접촉 합 니 다.어떤 때 는 다른 사람의 사이트 의 인 터 페 이 스 를 찾 고 어떤 때 는 다른 사람 에 게 자신의 사이트 의 인 터 페 이 스 를 제공 하지만 이 추출 과정 에서 서명 검증 을 떠 날 수 없습니다.
저희 가 서명 검증 을 디자인 할 때 다음 과 같은 몇 가 지 를 만족 시 켜 야 합 니 다.
4.567917.가 변성:매번 의 서명 은 반드시 달라 야 한다4.567917.실효 성:매번 청구 한 시효,기한 이 지나 면 폐기 등4.567917.유일 성:매번 서명 이 유일한 것 이다4.567917.완전 성:들 어 오 는 데 이 터 를 검증 하고 변경 을 방지 할 수 있 습 니 다1.서명 매개 변수 sign 생 성 방법
첫 번 째 단계:모든 매개 변수(모든 매개 변수 주의)를 sign 자체 와 값 이 비어 있 는 매개 변 수 를 제외 하고 매개 변수 이름 의 알파벳 오름차 순 으로 정렬 합 니 다.
두 번 째 단계:그리고 정렬 된 매개 변 수 를 매개 변수 1 값 1 매개 변수 2 값 2...매개 변수 n 값 n(여기 있 는 매개 변수 와 값 은 전송 매개 변수의 원시 값 이 어야 합 니 다.처리 할 수 없습니다.예 를 들 어" 를 사용 할 수 없습니다.문자열 로 연결 하 는 방식
세 번 째 단계:접속 자 에 게 분 배 된 인증 키 키 키 를 두 번 째 단계 에서 얻 은 문자열 앞 에 연결 합 니 다.
두 번 째 단계:이전 단계 에서 얻 은 문자열 앞 에 인증 키 키 키(여기 키 키 는 인터페이스 공급 자가 인터페이스 접속 자 에 게 할당 한 것)를 추가 하고 md5 값 을 계산 하여 32 비트 문자열 을 얻 은 다음 대문자 로 전환 합 니 다.
4 단계:3 단계 문자열 의 md5 값(32 비트)을 계산 한 다음 대문자 로 바 꾸 어 얻 은 문자열 을 sign 의 값 으로 합 니 다.
예:
전 송 된 데 이 터 를/interface.php 라 고 가정 합 니까?sign=signvalue&p 2=v2&p1=v1&method=cancel&p3=&pn=vn(실제 상황 은 post 방식 으로 보 내 는 것 이 좋 습 니 다),그 중에서 sign 매개 변수 에 대응 하 는 signvalue 는 서명 의 값 입 니 다.
첫 번 째 단 계 는 문자열 을 연결 합 니 다.먼저 sign 매개 변수 자 체 를 제거 한 다음 에 값 이 빈 매개 변수 p3 를 제거 하고 나머지 p2=v2&p1=v1&method=cancel&pn=vn,그리고 매개 변수 이름 부호 의 오름차 순 으로 정렬 합 니 다.method=cancel&p1=v1&p2=v2&pn=vn.
두 번 째 단 계 는 매개 변수 이름과 값 을 연결 한 다음 methodcancelp1v1p2v2pnvn 을 얻 습 니 다.
세 번 째 단 계 는 위 에 연 결 된 문자열 앞 에 인증 키 키 키 를 추가 합 니 다.abc 라 고 가정 하고 새로운 문자열 abcmethodcancelp1v1p2v2pnvn 을 얻 습 니 다.
네 번 째 단 계 는 이 문자열 을 md5 로 계산 합 니 다.abcdef 를 얻 었 다 고 가정 한 다음 대문자 로 바 꾸 고 ABCDEF 라 는 값 을 얻 으 면 sign 서명 값 입 니 다.
md5 를 계산 하기 전에 인터페이스 가 접속 자의 문자열 인 코딩 과 일치 하 는 지 확인 하 십시오.예 를 들 어 utf-8 인 코딩 이나 GBK 인 코딩 을 통일 적 으로 사용 하고 인 코딩 방식 이 일치 하지 않 으 면 계 산 된 서명 회 검사 가 실 패 했 습 니 다.
2.서명 검증 방법:
앞에서 설명 한 서명 매개 변수 sign 생 성 방법 규칙 에 따라 매개 변수의 서명 값 을 계산 하고 매개 변수 에서 알려 준 sign 에 대응 하 는 매개 변수 값 과 비교 합 니 다.일치 하 는 경우 검증 을 통과 합 니 다.일치 하지 않 으 면 매개 변수 가 수정 되 었 음 을 설명 합 니 다.
3.아래 코드 직접 보기
<?php
// (key) (secret), , ,
$key = "c4ca4238a0b923820dcc509a6f75849b";
$secret = "28c8edde3d61a0411511d3b1866f0636";
//
$data = array(
'username' => '[email protected]',
'sex' => '1',
'age' => '16',
'addr' => 'guangzhou',
'key' => $key,
'timestamp' => time(),
);
// sign
function getSign($secret, $data) {
// key
ksort($data);
// url
$params = http_build_query($data);
// sign
$sign = md5($params . $secret);
return $sign;
}
// sign
$data['sign'] = getSign($secret, $data);
/**
* sign
* @param [type] $secret [description]
* @param [type] $data [description]
* @return [type] [description]
*/
function verifySign($secret, $data) {
//
if (!isset($data['sign']) || !$data['sign']) {
echo ' ';
die();
}
if (!isset($data['timestamp']) || !$data['timestamp']) {
echo ' ';
die();
}
// , 10
if (time() - $data['timestamp'] > 600) {
echo ' , ';
die();
}
$sign = $data['sign'];
unset($data['sign']);
ksort($data);
$params = http_build_query($data);
// $secret key api
$sign2 = md5($params . $secret);
if ($sign == $sign2) {
die(' ');
} else {
die(' ');
}
}
?>
더 많은 PHP 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.본 논문 에서 말 한 것 이 여러분 의 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
laravel에 yo에서 angularJs&coffeescript를 사용할 수 있도록 한다.먼저 yo 명령을 사용할 수 있어야하므로 아래에서 설치 global에 설치한 곳에서 laravel의 프로젝트 루트로 이동. 클라이언트 코드를 관리하는 디렉토리를 만들고 이동합니다. 클라이언트 환경 만들기 이것으로 히...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.