Algorithme de signature PHP RSA2

*文
Libérer: 2023-03-18 08:26:02
original
4355 Les gens l'ont consulté

L'algorithme de signature RSA2 sera utilisé dans certains projets. Aujourd'hui, nous allons examiner l'utilisation de l'algorithme de signature RSA2 en PHP.

Qu'est-ce que RSA2 ?

RSA2 est basé sur l'algorithme de signature SHA1WithRSA d'origine 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.

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

//生成原始 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等前端。
Copier après la connexion

Vérification de la 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

Lecture connexe :

Exemple d'analyse de l'algorithme de recherche binaire implémenté par PHP

Comment PHP implémente l'algorithme Naive Bayes pour l'apprentissage automatique

Analyse détaillée de la façon dont PHP implémente l'algorithme de tri Hill

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:php.cn
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