概括就是:“學(xué)會(huì)用PHP的openssl擴(kuò)展!!”
創(chuàng)新互聯(lián)建站專注于樅陽(yáng)網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供樅陽(yáng)營(yíng)銷型網(wǎng)站建設(shè),樅陽(yáng)網(wǎng)站制作、樅陽(yáng)網(wǎng)頁(yè)設(shè)計(jì)、樅陽(yáng)網(wǎng)站官網(wǎng)定制、成都小程序開發(fā)服務(wù),打造樅陽(yáng)網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供樅陽(yáng)網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
1、先用openssl_pkey_new()函數(shù)產(chǎn)生一個(gè)私鑰pri_key,
2、用openssl_csr_new()函數(shù)以私鑰pri_key 產(chǎn)生一個(gè)信用證csr
3、用openssl_sign()函數(shù)以私鑰pri_key對(duì)一段數(shù)據(jù)data產(chǎn)生一個(gè)數(shù)字簽名signature。
4、用openssl_pkey_get_public()函數(shù)從信用證csr中獲得公鑰pub_key
5、把公鑰pub_key、數(shù)字簽名signature、數(shù)據(jù)data發(fā)給對(duì)方。
6、對(duì)方收到3項(xiàng)后,用openssl_verify()函數(shù)或其他驗(yàn)證工具,驗(yàn)證簽名。
7、對(duì)方驗(yàn)證有效,開始使用你的信息data。驗(yàn)證無(wú)效,再找你扯皮。
整個(gè)過(guò)程的雙方可以互換,即可讓對(duì)方出具三項(xiàng),你來(lái)驗(yàn)證。
以下是資料:
php中數(shù)字簽名與校驗(yàn)
1. 先用php生成一對(duì)公鑰和私鑰
$res = openssl_pkey_new();
openssl_pkey_export($res,$pri);
$d= openssl_pkey_get_details($res);
$pub = $d['key'];
var_dump($pri,$pub);
輸出依次為私鑰和公鑰的pem字串,如:
string(916) "-----BEGIN PRIVATE KEY-----
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKs124okAnX5jh1Q
wsETi80b4ZyYlYUSsAtvS7ZG+GSLAox24TKNwWIy5cUdKfK/5QEJjZ0S8LjRSYCG
to9LkwQTQrKY8BBXVCQQS3VXRqz4on9bmcGSyLMK6vQxt9NnJpk6aBmJE7z35+8z
TTLwdUbYaMAcYqrsYDfgBSNBgwbDAgMBAAECgYBvolJfpFMmcW3El6AlHIWPW5qj
7KmxdxnqmssXMvdLN4iV5f24ZM2vJdjDydxMN+st3fjEblEfcPcoIq5uiKx2bnO3
f9g0yt+qUoXdz4LK6jV1NfuAZDcnBm7CXfE7BDREgyiRg4ZXIvp4L0Y2zBMdFTmg
LKkXb2M1P3pK53UbwQJBANupqPXFQjdHvAa3voT+UI8OhmLbw/Vyh6Ii1glwMfyq
VS2lAakj9d1hqLYZvw+eNeZBnzZNPuMJg5aj/WKUqasCQQDHiFLS7Yb1rbhfjmRt
ZL4zXuvX1hVjTNo2TeZwPniGpYa+QHcauDDep5C9q//n+D+ZtkbkECxpOVhrUHSI
KO9JAkEApl3lHd98uymVevEHVurWUMMLfSw9SlSn7WC9AwD6mwbW5G8oxtX5jOY+
RU1Sq52D7RSeZR40FvhJtXoWmudFaQJAc8E+a2epF/YENEtjL6N2RE8Y+0oTdlwr
a72dphhXy6VTmiPD9RhOIZ2MdrzF5Uk7fG0mi0Bmw1SlWvx93lABIQJBALXPeoNa
b4dQkRkfqCHtyrWOeRcC1Y6FyTfNj+cRBzdIcmFc21hxj6HKy2M6/XGI3rAE5L+B
mmlSmN1enhoCUqc=
-----END PRIVATE KEY-----
"
string(272) "-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrNduKJAJ1+Y4dUMLBE4vNG+Gc
mJWFErALb0u2RvhkiwKMduEyjcFiMuXFHSnyv+UBCY2dEvC40UmAhraPS5MEE0Ky
mPAQV1QkEEt1V0as+KJ/W5nBksizCur0MbfTZyaZOmgZiRO89+fvM00y8HVG2GjA
HGKq7GA34AUjQYMGwwIDAQAB
-----END PUBLIC KEY-----
"
2. 保存好自己的私鑰,把公鑰可以公開給別人。如果需要對(duì)某數(shù)據(jù)進(jìn)行簽名,證明那數(shù)據(jù)是從你這里發(fā)出的,就需要用私鑰:
$res = openssl_pkey_get_private($pri);
if (openssl_sign('hello', $out, $res))
var_dump(base64_encode($out));
上例中 $pri 為自己的私鑰,'hello' 為待簽名的數(shù)據(jù),如果簽名成功,最后輸出為base64編碼后的簽名,如:
j19H+C/NQEcyowezOQ+gmGi2UoPJNXyJ+KwpkEzJ5u4qaRD3cY4qhfFfIosypypwJTJ4LjRYOIPNQMQm6ICj2nMdGfn/p/pp7il+xGz2aUWdOXkJFgIc/PGC95C9sLH04Tc6QSuV5IMd9rjBjyv+ieokMLFm9cmtN2hGag9vq1s=
3. 別人收到你的數(shù)據(jù) 'hello' 和簽名字串,想驗(yàn)證這是從你發(fā)來(lái)的數(shù)據(jù)的話,用你公開的公鑰驗(yàn)證:
$sig = base64_decode($sig);
$res = openssl_pkey_get_public($pubkey);
if (openssl_verify('hello', $sig, $res) === 1)
; // 通過(guò)驗(yàn)證
上例中剛開始的 $sig 為之前你base64編碼過(guò)的簽名, $pubkey 為你的公鑰
php中這種簽名使用的是RSA算法;數(shù)字簽名可以在 單點(diǎn)登錄 等系統(tǒng)中派上用場(chǎng)。
自己寫一套加密的算法,最好用到RSA,APP端給公鑰加密數(shù)據(jù),服務(wù)器端PHP使用私鑰解密
新聞名稱:php二維數(shù)據(jù)簽名驗(yàn)證 php rsa簽名
本文來(lái)源:http://jinyejixie.com/article28/dddhdjp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、手機(jī)網(wǎng)站建設(shè)、商城網(wǎng)站、企業(yè)建站、網(wǎng)站設(shè)計(jì)、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)