>  기사  >  백엔드 개발  >  RSA2란 무엇입니까? PHP-RSA2 서명 확인을 구현하는 방법은 무엇입니까?

RSA2란 무엇입니까? PHP-RSA2 서명 확인을 구현하는 방법은 무엇입니까?

藏色散人
藏色散人앞으로
2021-12-08 15:21:225737검색
RSA2란 무엇인가요?

RSA2는 원래 SHA1WithRSA 서명 알고리즘을 기반으로 하며 SHA256WithRSA를 지원하는 새로운 서명 알고리즘을 추가합니다.

이 알고리즘은 다이제스트 알고리즘 측면에서 SHA1WithRSA보다 강력한 보안 기능을 가지고 있습니다.

SHA1WithRSA 서명 알고리즘은 계속 지원되지만 애플리케이션 보안을 위해 SHA256WithRSA 서명 알고리즘을 사용하는 것이 좋습니다.

개발 플랫폼 알고리즘 이름 표준 서명 알고리즘 이름 Remarks
RSA2 SHA256WithRSA (강력 권장), RSA 키 길이는 필수입니다. 최소 2048
RSA SHA1WithRSA RSA 키 길이에는 제한이 없습니다. 2048비트 이상 사용을 권장합니다.
어떤 회사에서 사용하고 있나요?

Alipay 및 Sina Weibo와 같은 일부 대기업의 개발 플랫폼.

개인 키 및 공개 키 생성

//원본 RSA 개인 키 파일 생성
openssl genrsa -out rsa_private_key.pem 1024
//원래 RSA 개인 키를 pkcs8 형식으로 변환
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key . pem -outform PEM -nocrypt -out private_key.pem
//RSA 공개 키 생성
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
//서버 측에서는 개인 키 rsa_private_key.pem을 사용합니다. 이 키는 Android, iOS 등 프런트엔드에 발급됩니다.

PHP-RSA2 서명 확인
class Rsa2
{
    private static $PRIVATE_KEY = 'rsa_private_key.pem 内容';
    private static $PUBLIC_KEY  = 'rsa_public_key.pem 内容';

    /**
     * 获取私钥
     * @return bool|resource
     */
    private static function getPrivateKey()
    {
        $privKey = self::$PRIVATE_KEY;
        return openssl_pkey_get_private($privKey);
    }

    /**
     * 获取公钥
     * @return bool|resource
     */
    private static function getPublicKey()
    {
        $publicKey = self::$PUBLIC_KEY;
        return openssl_pkey_get_public($publicKey);
    }

    /**
     * 创建签名
     * @param string $data 数据
     * @return null|string
     */
    public function createSign($data = '')
    {
        if (!is_string($data)) {
            return null;
        }
        return openssl_sign(
                    $data,
                    $sign,
                    self::getPrivateKey(),
                    OPENSSL_ALGO_SHA256
                  ) ? base64_encode($sign) : null;
    }

    /**
     * 验证签名
     * @param string $data 数据
     * @param string $sign 签名
     * @return bool
     */
    public function verifySign($data = '', $sign = '')
    {
        if (!is_string($sign) || !is_string($sign)) {
            return false;
        }
        return (bool)openssl_verify(
                      $data,
                      base64_decode($sign),
                      self::getPublicKey(),
                      OPENSSL_ALGO_SHA256
                    );
    }
}
PHP 통화
require_once "Rsa2.php";
$rsa2 = new Rsa2();

$data = 'my data'; //待签名字符串

$strSign = $rsa2->createSign($data);      //生成签名
var_dump($strSign);

$is_ok = $rsa2->verifySign($data, $sign); //验证签名
var_dump($is_ok);

추천 학습: "PHP 비디오 튜토리얼"

위 내용은 RSA2란 무엇입니까? PHP-RSA2 서명 확인을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제