php - PHP 서버에서 Android 인앱 결제 서명 확인

기사 출처 php android in-app-billing public-key-encryption

Android 응용 프로그램에서 IAB v3 작업을하고 있습니다.
구매에 성공할 때마다 내 앱이 Google 개발자 콘솔에서 생성 한 공개 키로 확인하기 위해 서명 데이터와 서명을 내 PHP 서버로 다시 보내길 원합니다.
다음 코드를 찾았습니다.

<?php
// $data and $signature are assumed to contain the data and the signature

// fetch public key from certificate and ready it
$fp = fopen("/src/openssl-0.9.6/demos/sign/cert.pem", "r");
$cert = fread($fp, 8192);
fclose($fp);
$pubkeyid = openssl_get_publickey($cert);

// state whether signature is okay or not
$ok = openssl_verify($data, $signature, $pubkeyid);
if ($ok == 1) {
    echo "good";
} elseif ($ok == 0) {
    echo "bad";
} else {
    echo "ugly, error checking signature";
}
// free the key from memory
openssl_free_key($pubkeyid);
?>


이제 문제가 생겼습니다. Google에서 제공하는 공개 키는 문자열 Base64 인코딩입니다. 이 문자열 키를 ".pem"형식으로 변환하는 방법을 모르겠습니다.

위 코드에서 Base64 인코딩 키를 "$ pubkeyid"에 넣으면 경고가 주어집니다.

Warning: openssl_verify() [function.openssl-verify]: supplied key param cannot be coerced into a public key in myxxx.php.

내 String Base64 인코딩 공개 키를 PHP Accept 형식으로 어떻게 변환 할 수 있습니까?

누구든지 위의 경험이나 해결책이 있습니까? 도와주세요. 감사합니다.
Google에서 가져온 긴 base64 인코딩 공개 키를 PHP에서 사용할 수있는 것으로 변환하려면 다음을 시도하십시오.

$base64EncodedPublicKeyFromGoogle = "..."; // This is the public key for your app you get from Google.

$openSslFriendlyKey = "-----BEGIN PUBLIC KEY-----\n" . chunk_split($base64EncodedPublicKeyFromGoogle, 64, "\n") .  "-----END PUBLIC KEY-----";


그런 다음 openssl_get_publickey()에 전달할 수 있습니다.

$publicKeyId = openssl_get_publickey($openSslFriendlyKey);


보시다시피 Google의 형식은 거의 올바른 종류입니다. 64 자 줄로 나누고 오른쪽 머리글 / 바닥 글을 앞에 추가 / 추가하면됩니다.

OpenSSL 명령을 사용하여 다음과 같이 공개 키를 변환 할 수도 있습니다.

openssl enc -base64 -d -in publickey.base64 -A | openssl rsa -inform DER -pubin > publickey.pem


그런 다음 생성 된 publickey.pem 파일을 PHP로 읽고 그 내용을 openssl_get_publickey() 함수에 전달할 수 있습니다.

이 질문에 대해 Stack Overflow에서 비슷한 토론을 찾았습니다: https://stackoverflow.com/questions/14431379/

관련 기사
php - 'DirectoryIterator'클래스를 찾을 수 없습니다.
php - 양식 제출 후 동일한 HTML 페이지에 에코하는 방법은 무엇입니까?
php - 중첩 된 조건을 혼동하지 않고 "AND"표현식으로 동적 SQL을 작성 하시겠습니까?
php - PHP를 사용하여 다른 이미지에서 한 이미지의 위치 결정
php - 예를 들어 3의 루트는 2입니다.
php - Codeigniter 포함보기
php - Amazon MWS 제품 카테고리의 전체 목록은 어디에서 얻을 수 있습니까? [닫은]
php - MYSQL 연도의 중단 날짜 중에서 선택
php - PHP를 통해 wait_timeout 및 max_allowed_packet을 변경하는 방법이 있습니까? [복제]
php - .csv 파일을 생성 할 수 없습니다 : PHP