PHP SHA1withRSA 암호 화 생 성 서명 및 검사
업무 요구:각 서명 조립의 내용 은 필드 이름 의 사전 순서에 따라 정렬 하여 연 결 됩 니 다
먼저 서명 할 내용 을 조립 합 니 다:
/**
*
* Author: Tao.
*
* @param array $data
*
* @return string
*/
public static function getSign($data)
{
foreach ($data as $k => $v) {
$Parameters[$k] = $v;
}
//
ksort($Parameters);
$sign = '';
foreach ($Parameters as $k => $v) {
$sign .= $k . "=" . $v . "&";
}
$sign = '&' . rtrim($sign, '&');
return $sign;
}
서명 문자열 은 다음 과 같 습 니 다.&amount=amount 값&ccy=ccy 값&merchantId=merchantId 값¬ifyUrl=notifyUrl 값&orderId=orderId 값&payeeAcctNo=payeeAcctNo 값(명문).
주의해 야 할 것 은 업무 수요 에 따라 서명 내용 전에 맞 춤 형&부 호 를 선택 할 지 여부 입 니 다.
그리고 비밀 키 서명 생 성:
/**
*
* Author: Tao.
*
* @param string $data
* @param $key (.pfx )
* @param string $pwd
*
* @return string
*/
public static function SHA1withRSA($data, $key,$pwd)
{
openssl_pkcs12_read(file_get_contents($key), $certs, $pwd);
if (!$certs) return;
$signature = '';
openssl_sign($data, $signature, $certs['pkey']);
return bin2hex($signature);
}
제3자 회사 에서 16 진법 으로 전환 을 요구 하면 수요 에 따라 bin2hex()또는 base 64 를 선택 할 수 있 습 니 다.encode()。여기 서 주의해 야 할 것 은 업무 수요 에 따라 서명 후의 내용 이 대소 문자 에 민감 해 야 하 는 지 여부 다.
서명 한 내용 은 소문 자로 되 어 있 을 것 이 며,strtoupper()를 대문자 로 변환 할 수 있 습 니 다.
이상 은 모두 에 게 정 리 된 비밀 키 암호 화 방법 입 니 다.
그러나 이 업무 에 서 는 은행 카드 번 호 를 RSA 공개 키 로 암호 화해 야 합 니 다.
다음은 공개 키 를 얻 는 방법 입 니 다.
대상 플랫폼 인증 서 를 가 져 오 는 공개 키(.cer 파일)입 니 다.
/**
*
* Author: Tao.
*
* @param $path // (.cer )
*
* @return mixed
* @throws \Exception
*/
public static function loadCert($path)
{
$file = file_get_contents($path);
if (!$file) {
throw new \Exception('loadx509Cert::file_get_contents ERROR');
}
$cert = chunk_split(base64_encode($file), 64, "
");
$cert = "-----BEGIN CERTIFICATE-----
" . $cert . "-----END CERTIFICATE-----
";
$res = openssl_pkey_get_public($cert);
$detail = openssl_pkey_get_details($res);
openssl_free_key($res);
if (!$detail) {
throw new \Exception('loadX509Cert::openssl_pkey_get_details ERROR');
}
return $detail['key'];
}
/**
*
* Author: Tao.
*
* @param $pubPath // (.cer )
* @param string $bankCode //
*
* @return string
*/
public static function rsa_encode($bankCode,$pubPath)
{
$pubkey = self::loadCert($pubPath);
$encrypt_data = '';
openssl_public_encrypt($bankCode, $encrypt_data, $pubkey);
$encrypt_data = base64_encode($encrypt_data);
return $encrypt_data;
}
왜 비밀 키 가 bin2hex()인지 물 어보 시 겠 습 니까?공개 키 가 base 64 로 바 뀌 었 습 니 다.encode()。왜 그런 지 모 르 겠 어 요.16 분 이 라 고 물 어 봤 는데 사인 요청 이 계속 실 패 했 고 64 로 바 뀌 었 어 요.상대방 은 문서 가 너무 낡 아서 잊 어 버 렸 다 고 말 했다.필요 에 따라 선택 하 세 요.마지막 리 셋 결과 체크
우선 리 셋 데이터 에서 서명 필드 를 조립 한 내용 을 추출 하고 위의 getSign()방법 에 따라 정렬 합 니 다.
그리고 검증:
/**
*
*
* @param string $data
* @param string $signature
*@param $pubPath (.cer )
*
* @return bool
*/
public static function verifyRespondSign($data, $signature,$pubPath)
{
$keys = self::loadCert($pubPath);
$signature = hex2bin($signature);
$ok = openssl_verify($data, $signature, $keys);
if ($ok == 1) {
return true;
}
return false;
}
위 에서 말 한 것 은 편집장 이 여러분 에 게 소개 한 PHP SHA1withRSA 암호 화,서명 및 서명 의 모든 내용 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.편집장 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.