>  기사  >  백엔드 개발  >  PHP RSA2 서명 알고리즘

PHP RSA2 서명 알고리즘

*文
*文원래의
2017-12-21 14:35:234357검색

RSA2 서명 알고리즘은 일부 프로젝트에서 사용됩니다. 오늘은 PHP에서 RSA2 서명 알고리즘을 사용하는 방법을 살펴보겠습니다.

RSA2란 무엇인가요?

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

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

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

어떤 회사에서 사용하고 있나요?

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

PHP가 기계 학습을 위해 Naive Bayes 알고리즘을 구현하는 방법

PHP가 Hill 정렬 알고리즘을 구현하는 방법에 대한 자세한 분석

위 내용은 PHP RSA2 서명 알고리즘의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.