91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php中RSA加密解密算法的原理是什么

發布時間:2021-01-14 16:05:20 來源:億速云 閱讀:379 作者:Leah 欄目:開發技術

php中RSA加密解密算法的原理是什么?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

1、生成公鑰和私鑰

要應用RSA算法,必須先生成公鑰和私鑰,公鑰和私鑰的生成可以借助openssl工具。

安裝過后,進入到安裝目錄的bin目錄下,執行如下命令:

openssl.exe     // 進入OpenSSL程序
genrsa -out rsa_private_key.pem 1024 //生成私鑰,執行成功后可以在當前目錄下看到生成了rsa_private_key.pem文件
pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt  //如果你使用的java,需要將私鑰轉換成PKCS8格式
rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem //生成公鑰,執行成功后可以在當前目錄下看到生成rsa_public_key.pem文件

公鑰rsa_public_key.pem的內容:

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDc5nSC6mHl9bmM6L8n7Sq1+Ft6
VF8LcU3jst8RIy7WqXXd5XZomc0cJLxVz3Vc0vgUKKJyP6q2ozDOCFgCp7Q9InFg
ngtNVLEJ1+Nm0+snUDbYbnrfW8wwSPG0jPQ73CgMxOdv+IGhir6mEITbdEh+ZsVc
GRd0OvKYIg+Itgk3/QIDAQAB
-----END PUBLIC KEY-----

私鑰rsa_private_key.pem的內容:

-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQDD4KA0yU7EG7ZA32OAVDHlwXf9LYywXGn7Ma9LffnFL57cpYoQ
Wf0Oz8FE9/UnjFOeHs2XjDrhe+uqVtYX/9Vi/znJgP9D7hpTo2NJHM/AUykD+itl
cie2Tu+sjJQi0JFVcpc3D0ooTBhng35406CucRaOn/a52mxQnGtA4AmsSwIDAQAB
AoGAG25nwTy39SrUWT1vl9cyrbRsc15fp4sppG4O2Imp4v2KR+g+749KqzpZHKmF
AabbRveVXzXaQR2zoUVL8kx3u4hqY4M/S1AcOxNPIJKB703XxA1yf2Ta2CvLsWTm
tsDWRW1WudF18yOZf3q7aoyMhpBUMlmhH4mvIYWOPFj0zaECQQD4A11Q8sfpOcIK
fMz5jJymLMZ9P8gxNbafwjxTdTXht/MUprEAePslP3AeyKBMJNYGs04/lOQzksp+
ZG6j7/XzAkEAyi9zj8EaPlleAil8mB5wDWiibQ/Z92nMLSUmH5FoO013dvumBI8c
CcP1/go2sj3H4RQEWycr360yTubNkkHOSQJAcRRPos3fOkZ8Y329k3Z6IgY+RfMj
2tQLvVG5YbAKbi0J5vuNrpJ6p+QBwfdlpvIQp6NvZOwFFEK0kuZFz/dj4wJBALyc
cZCMUoARfEpGC24ZDuzjTIqzO+G7d3Yx7pOKYRLZXHXJogEkw8I0ZXmca5PxYFIP
C1VBgINEHedPFjy3WMkCQEh4FG0xDpUFXETct5L1whT8lsN0EK3ZmcfDePcbKuHW
iE5pbNn7ytpVT+jiT3+FVEZVSZCiW0lDnyd86Ppos5g=
-----END RSA PRIVATE KEY-----

公鑰和私鑰生成好了之后,私鑰自己保存,將公鑰交給第三方即可。

2、php的RSA加密解密

在做加密解密之前,首先要確保php已經開啟了openssl拓展,可以通過phpinfo()函數進行查看。

通常情況下,有以下兩種情形:

①通過公鑰加密,通過私鑰解密;

②通過私鑰加密,通過公鑰解密;

支付寶的業務場景屬于第二種情形:

  1. 業務方支付寶發送支付請求,將sign參數通過自己的私鑰加密過后發送到支付寶的接口;

  2. 支付寶方向業務方發送支付結果,將sign參數通過自己的私鑰加密過后發送到業務方的notify接口;

下面就以支付寶的業務邏輯為例,實現以下第二種加解密:

加密:

$data = "我是待加密的字符串";
echo sign($data, 'rsa_private_key.pem');
 /* 簽名 */
function sign($data, $rsaPrivateKey) {
   /* 獲取私鑰PEM文件內容,$rsaPrivateKey是指向私鑰PEM文件的路徑 */
   $priKey = file_get_contents($rsaPrivateKey);
   /* 從PEM文件中提取私鑰 */
   $res = openssl_get_privatekey($priKey);
   /* 對數據進行簽名 */
   //openssl_sign($data, $sign, $res);
   openssl_private_encrypt($data, $sign, $res);
   /* 釋放資源 */
   openssl_free_key($res);
   /* 對簽名進行Base64編碼,變為可讀的字符串 */
   $sign = base64_encode($sign);
   return $sign;
 }

執行后得到如下字符串:

geNTbwabOYT1l2TIkaxgxnCZDop8pynyNtMNbYATtmyyOlxgJhm363ufeHbNboIhc3Pzi7kVrWPPkFsNUiGnS4mATzAcf0woJVC+26g5j19yQqb00Fr+XVipEVyN0sn9/uhlot6m6qj7h6adaREvsY/30jTld6kDkkQF8k3Eg+Y=

解密:

$data = "geNTbwabOYT1l2TIkaxgxnCZDop8pynyNtMNbYATtmyyOlxgJhm363ufeHbNboIhc3Pzi7kVrWPPkFsNUiGnS4mATzAcf0woJVC+26g5j19yQqb00Fr+XVipEVyN0sn9/uhlot6m6qj7h6adaREvsY/30jTld6kDkkQF8k3Eg+Y=";
echo decrypt($data, 'rsa_public_key.pem');
function decrypt($data, $rsaPublicKey) {
   /* 獲取公鑰PEM文件內容,$rsaPublicKey是指向公鑰PEM文件的路徑 */
   $pubKey = file_get_contents($rsaPublicKey);
   /* 從PEM文件中提取公鑰 */
   $res = openssl_get_publickey($pubKey);
   /* 對數據進行解密 */
   openssl_public_decrypt(base64_decode($data), $decrypted, $res);
   /* 釋放資源 */
   openssl_free_key($res);
   return $decrypted;
 }

第一種情形與第二種情形類似,在此不在贅述。

注:支付寶使用的加密函數是openssl_sign,之后的校驗可以使用openssl_verify函數進行校驗。

關于php中RSA加密解密算法的原理是什么問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

左贡县| 金昌市| 丹阳市| 乌鲁木齐县| 张家口市| 齐齐哈尔市| 鄱阳县| 鹤峰县| 旌德县| 门头沟区| 泽普县| 江达县| 林甸县| 新营市| 临沭县| 米脂县| 宜兴市| 龙井市| 乌什县| 修水县| 德格县| 保德县| 郯城县| 锦屏县| 天峻县| 建湖县| 勃利县| 大冶市| 招远市| 泰和县| 江门市| 昌邑市| 松溪县| 兴化市| 大城县| 永胜县| 安庆市| 伊宁市| 都昌县| 西和县| 台州市|