Apakah RSA2? Bagaimana untuk melaksanakan pengesahan tandatangan PHP-RSA2?

藏色散人
Lepaskan: 2023-04-10 20:20:01
ke hadapan
5725 orang telah melayarinya
Apakah itu RSA2?

RSA2 adalah berdasarkan algoritma tandatangan SHA1WithRSA asal dan menambah algoritma tandatangan baharu yang menyokong SHA256WithRSA.

Algoritma ini mempunyai keupayaan keselamatan yang lebih kukuh daripada SHA1WithRSA dari segi algoritma penghadaman.

Algoritma tandatangan SHA1WithRSA akan terus disokong, tetapi untuk keselamatan aplikasi anda, adalah sangat disyorkan untuk menggunakan algoritma tandatangan SHA256WithRSA.

开发平台算法名称 标准签名算法名称 备注
RSA2 SHA256WithRSA (强烈推荐使用),强制要求RSA密钥的长度至少为2048
RSA SHA1WithRSA 对RSA密钥的长度不限制,推荐使用2048位以上
Apakah syarikat yang menggunakannya?

Platform pembangunan beberapa syarikat besar, seperti Alipay dan Sina Weibo.

Buat kunci persendirian dan kunci awam

//Jana fail kunci persendirian RSA asal
openssl genrsa -out rsa_private_key.pem 1024
//Tukar kunci persendirian RSA asal kepada Format pkcs8
openssl pkcs8 -topk8 -maklumkan PEM -in rsa_private_key.pem -outform PEM -nocrypt -out private_key.pem
//Jana kunci awam RSA
openssl rsa -in rsa_private_key.pem -pubout rsa_key.pem -pubout -_key. pem
//Kami menggunakan kunci persendirian rsa_private_key.pem pada bahagian pelayan, dan kunci awam diedarkan ke bahagian hadapan seperti android dan ios.

Pengesahan tandatangan 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
                    );
    }
}
Salin selepas log masuk
panggilan 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);
Salin selepas log masuk

Pembelajaran yang disyorkan: "Tutorial Video PHP"

Atas ialah kandungan terperinci Apakah RSA2? Bagaimana untuk melaksanakan pengesahan tandatangan PHP-RSA2?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:segmentfault.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan