php教程 PHP开发 PHP RSA 암호화, 복호화, 서명, 서명 확인에 대한 자세한 설명

PHP RSA 암호화, 복호화, 서명, 서명 확인에 대한 자세한 설명

Dec 30, 2016 am 09:21 AM

php rsa 암호화, 복호화, 서명, 서명 확인

타사 기관에서 Java 버전의 rsa 암호화 및 복호화 방법을 사용하기 때문에 최근에 rsa 암호화 및 복호화의 PHP 버전이 많이 발견되기 시작했습니다. 그러나 대부분은 Java와의 도킹에 적합하지 않습니다.

다음 PHP 버전은 Java 인터페이스와의 도킹에 적합합니다.

-----BEGIN CERTIFICATE-----
  
-----END CERTIFICATE-----
로그인 후 복사


사용 키:
암호화 공개 키 public_key.cer

복호화 개인 키 private_key.key

서명 개인 키 sign_key.key

확인 공개 키 verify.cer

<?php
class RSAUtils{
  //加密公钥
  function redPukey()
  {   
    //拼接加密公钥路径
    $encryptionKeyPath="D:/encryptions.cer";  
    $encryptionKey4Server = file_get_contents($encryptionKeyPath);
 
    $pem = chunk_split(base64_encode($encryptionKey4Server),64,"\n");//转换为pem格式的公钥
    $pem = "-----BEGIN CERTIFICATE-----\n".$pem."-----END CERTIFICATE-----\n";
    $publicKey = openssl_pkey_get_public($pem);
    return $publicKey;
  }
   
  //解密私钥
  function redPikey()
  {   
    //拼接解密私钥路径
    $decryptKeyPath="D:/decrypts.key";  
    $decryptKey4Server = file_get_contents($decryptKeyPath);
 
    $pem = chunk_split($decryptKey4Server,64,"\n");//转换为pem格式的私钥
    $pem = "-----BEGIN PRIVATE KEY-----\n".$pem."-----END PRIVATE KEY-----\n";
    $privateKey = openssl_pkey_get_private($pem);
    return $privateKey;
  }
   
  //签名私钥
  function redSignkey()
  {   
    //拼接签名路径
    $signKeyPath="D:/DEMO/sign.key";
    $signKey4Server = file_get_contents($signKeyPath);
 
    $pem = chunk_split($signKey4Server,64,"\n");//转换为pem格式的私钥
    $pem = "-----BEGIN PRIVATE KEY-----\n".$pem."-----END PRIVATE KEY-----\n";
    $signKey = openssl_pkey_get_private($pem);
    return $signKey;
  }
   
  //验签公钥
  function redVerifykey()
  {   
    //拼接验签路径
    $verifyKeyPath="D:/DEMO/verify.cer"; 
    $verifyKey4Server = file_get_contents($verifyKeyPath);
 
    $pem = chunk_split(base64_encode($verifyKey4Server),64,"\n");//转换为pem格式的公钥
    $pem = "-----BEGIN CERTIFICATE-----\n".$pem."-----END CERTIFICATE-----\n";
    $verifyKey = openssl_pkey_get_public($pem);
    return $verifyKey;
  }
   
  //公钥加密
  function pubkeyEncrypt($source_data, $pu_key) {
    $data = "";
    $dataArray = str_split($source_data, 117);
    foreach ($dataArray as $value) {
      $encryptedTemp = "";
      openssl_public_encrypt($value,$encryptedTemp,$pu_key);//公钥加密
      $data .= base64_encode($encryptedTemp);
    }
    return $data;
  }
   
  //私钥解密
  function pikeyDecrypt($eccryptData,$decryptKey) {
    $decrypted = "";
    $decodeStr = base64_decode($eccryptData);
    $enArray = str_split($decodeStr, 256);
 
    foreach ($enArray as $va) {
      openssl_private_decrypt($va,$decryptedTemp,$decryptKey);//私钥解密
      $decrypted .= $decryptedTemp;
    }
    return $decrypted;
  }
   
  
}
?>
로그인 후 복사


참고:

은 때때로 base64_encode로 암호화되어 해독될 때 GET 형식으로 다른 페이지로 전송됩니다. base64_decode를 사용하면 문자가 깨져 오류 메시지가 나타납니다.

이 문제가 발생했을 때 일부는 올바르게 해독될 수 있지만 일부는 왜 깨졌는지 궁금합니다.

나중에 확인해 보니 일부 한자가 있었다는 것을 GET 형식으로 전달하면 + 기호가 공백으로 대체됩니다.

문자 깨짐을 방지하기 위해 대체 단계를 만든 다음 해독했습니다. 문자 깨짐 문제는 더 이상 존재하지 않습니다. !

예를 들어 GET 형식으로 oid 변수를 전달한 경우 암호 해독 및 복원 시 먼저 공백을 + 기호로 바꾸면 다음과 같이 출력됩니다. Normal.

다음과 같습니다: $oid=base64_decode (str_replace(" ","+",$_GET[oid]));

읽어주셔서 감사합니다. 모두에게 도움이 될 수 있습니다. 이 사이트를 지원해 주셔서 감사합니다!

더 많은 PHP RSA 암호화, 복호화, 서명, 서명 확인 관련 기사를 보려면 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를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

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

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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