Maison >développement back-end >tutoriel php >Qu'est-ce que RSA2 ? Comment implémenter la vérification de signature PHP-RSA2 ?

Qu'est-ce que RSA2 ? Comment implémenter la vérification de signature PHP-RSA2 ?

藏色散人
藏色散人avant
2021-12-08 15:21:225774parcourir
Qu'est-ce que RSA2 ?

RSA2 est basé sur l'algorithme de signature SHA1WithRSA original et ajoute un nouvel algorithme de signature qui prend en charge SHA256WithRSA.

Cet algorithme a des capacités de sécurité plus fortes que SHA1WithRSA en termes d'algorithme de digestion.

L'algorithme de signature SHA1WithRSA continuera d'être pris en charge, mais pour la sécurité de votre application, il est fortement recommandé d'utiliser l'algorithme de signature SHA256WithRSA.

Nom de l'algorithme de la plateforme de développement Nom de l'algorithme de signature standard Remarques
RSA2 SHA256AvecRSA (fortement recommandé), il est obligatoire que la longueur de la clé RSA soit d'au moins 2048
RSA SHA1WithRSA Il n'y a pas de limite sur la longueur de la clé RSA. Il est recommandé d'utiliser plus de 2048 bits
Quelles entreprises l'utilisent ?

Plateformes de développement de certaines grandes entreprises, comme Alipay et Sina Weibo.

Créer une clé privée et une clé publique

//Générer le fichier de clé privée RSA d'origine
openssl genrsa -out rsa_private_key.pem 1024
//Convertir la clé privée RSA d'origine au format pkcs8
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key . pem -outform PEM -nocrypt -out private_key.pem
//Générer la clé publique RSA
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
//Nous utilisons la clé privée rsa_private_key.pem côté serveur, publique La clé est délivrée aux frontaux tels qu'Android et iOS.

Vérification de signature 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
                    );
    }
}
Appel 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);

Apprentissage recommandé : "Tutoriel vidéo PHP"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer