ホームページ >バックエンド開発 >PHPチュートリアル >RSA2とは何ですか? PHP-RSA2 署名検証を実装するにはどうすればよいですか?

RSA2とは何ですか? PHP-RSA2 署名検証を実装するにはどうすればよいですか?

藏色散人
藏色散人転載
2021-12-08 15:21:225774ブラウズ
RSA2 とは何ですか?

RSA2 は、元の SHA1WithRSA 署名アルゴリズムに基づいており、SHA256WithRSA をサポートする新しい署名アルゴリズムが追加されています。

このアルゴリズムは、ダイジェスト アルゴリズムの点で SHA1WithRSA よりも強力なセキュリティ機能を備えています。

SHA1WithRSA 署名アルゴリズムは引き続きサポートされますが、アプリケーションのセキュリティのため、SHA256WithRSA 署名アルゴリズムを使用することを強くお勧めします。

#開発プラットフォーム アルゴリズム名標準署名アルゴリズム名備考##RSA2RSA であることが必須です。 企業が使用しているものそれ?
SHA256WithRSA (強く推奨) では、RSA キーの長さが少なくとも 2048
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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。