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 ?

藏色散人
Libérer: 2023-04-10 20:20:01
avant
5781 Les gens l'ont consulté
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
                    );
    }
}
Copier après la connexion
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);
Copier après la connexion

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!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal