PHP RSA2 署名アルゴリズム

*文
リリース: 2023-03-18 08:26:02
オリジナル
4447 人が閲覧しました

RSA2 署名アルゴリズムはいくつかのプロジェクトで使用されます。今日は、PHP での RSA2 署名アルゴリズムの使用について見ていきます。

RSA2とは何ですか?

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

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

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

どのような企業が使用していますか?

Alipay や Sina Weibo など、一部の大企業の開発プラットフォーム。

秘密鍵と公開鍵を作成する

1

2

3

4

5

6

7

//生成原始 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署名検証

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

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呼び出し

1

2

3

4

5

6

7

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);

ログイン後にコピー

関連書籍:

実装された二分探索アルゴリズムの分析例by PHP

PHP が機械学習用の単純ベイズ アルゴリズムを実装する方法

PHP がヒル ソート アルゴリズムを実装する方法の詳細な分析

以上がPHP RSA2 署名アルゴリズムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート