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 ); } }
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);
Pembelajaran yang disyorkan: "Tutorial Video PHP"