Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back
cafe24 호스팅 php md5withRSA
#ask
2년 전
5,409
1

안녕하세요!

ㅠ.ㅠ 질문이 있어서 글올립니다.

회사 cafe24호스팅 사용중이고 (openssl깔려있습니다.), 언어는 php사용 중입니다.

curl을 통해서 데이터 받는거는 계속 해오다가,

이번에 md5withrsa를 통해 데이터를 넘겨줘야하는데 rsa암호화법을 처음이라,

몇일째 구글 검색해도 방법을 잘모르겠어서 이렇게 조언 구합니다.

  1. putty ssh를 통해 openssl사용이 가능한가요.? (사용시도하였으나, 사용이 안되어서요.)

  2. 개인키, 공개키 생성 후, 데이터 암호화까지는 성공. 하지만 사인과 검증을 어떻게 받아오는지,

    방법을 모르겠습니다.

function rsa_generate_keys($password, $bits = 2048, $digest_algorithm = 'md5') { $res = openssl_pkey_new(array( 'digest_alg' => $digest_algorithm, 'private_key_bits' => $bits, 'private_key_type' => OPENSSL_KEYTYPE_RSA, )); openssl_pkey_export($res, $private_key, $password); $public_key = openssl_pkey_get_details($res); $public_key = $public_key['key']; return array( 'private_key' => $private_key, 'public_key' => $public_key, ); } $f1 = rsa_generate_keys("123456"); $private_key = $f1["private_key"]; $public_key = $f1["public_key"]; echo $private_key; echo "<br>"; echo "<br>"; echo $public_key; echo "<br>"; echo "<br>";

키 생성후,

function rsa_encrypt($plaintext, $public_key)
{

    // 공개키를 사용하여 암호화한다.
    $pubkey_decoded = @openssl_pkey_get_public($public_key);
    if ($pubkey_decoded === false) return false;

    $ciphertext = false;
    $status = @openssl_public_encrypt($plaintext, $ciphertext, $pubkey_decoded);
    if (!$status || $ciphertext === false) return false;

    // 암호문을 base64로 인코딩하여 반환한다.
    return base64_encode($ciphertext);

}

$rdata = 'S1=api_name=epaylinks_umps_user_open_account&app_id=XtMfDpjbzxGQkaUwrP1wP2Fi&terminal_no=18061930&merchant_no=TestDLGC';
$f2 = rsa_encrypt($rdata, $public_key);

데이터 암호화까지 하는데,

function create_sign($data) {

$base_path = base_path();

$password = env('RSA_KEY');
$app_evn = env('APP_ENV');

$data = json_encode($data, JSON_UNESCAPED_UNICODE);

if ($app_evn == 'REAL') {

// $private_key = file_get_contents($base_path . '/key/test_private.pem');

} else {

// $private_key = file_get_contents($base_path . '/key/test_private.pem');

}

$signature = false;
$private_key = openssl_pkey_get_private($private_key, $password);
openssl_sign($data, $signature, $private_key, "SHA256");
// openssl_sign($data, $signature, $private_key, OPENSSL_ALGO_MD5);

if($signature === false)
return false;

return base64_encode($signature);

}
위 함수에서 사용하는 .pem은 어떻게 만들어서 사용하는건가요 ..?
조언 부탁드립니다. ㅠㅠ
1 comment