概括就是:“學會用PHP的openssl擴展!!”

成都創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務領域包括:網站建設、網站制作、企業(yè)官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯(lián)網時代的防城港網站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!
1、先用openssl_pkey_new()函數(shù)產生一個私鑰pri_key,
2、用openssl_csr_new()函數(shù)以私鑰pri_key 產生一個信用證csr
3、用openssl_sign()函數(shù)以私鑰pri_key對一段數(shù)據data產生一個數(shù)字簽名signature。
4、用openssl_pkey_get_public()函數(shù)從信用證csr中獲得公鑰pub_key
5、把公鑰pub_key、數(shù)字簽名signature、數(shù)據data發(fā)給對方。
6、對方收到3項后,用openssl_verify()函數(shù)或其他驗證工具,驗證簽名。
7、對方驗證有效,開始使用你的信息data。驗證無效,再找你扯皮。
整個過程的雙方可以互換,即可讓對方出具三項,你來驗證。
通過 js canvas給用戶進行簽名,提交時候生成圖片/base64.
PHP接收圖片/base64保存到服務器對應路徑,把路徑入庫.
以下是資料:
php中數(shù)字簽名與校驗
1. 先用php生成一對公鑰和私鑰
$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. 保存好自己的私鑰,把公鑰可以公開給別人。如果需要對某數(shù)據進行簽名,證明那數(shù)據是從你這里發(fā)出的,就需要用私鑰:
$res = openssl_pkey_get_private($pri);
if (openssl_sign('hello', $out, $res))
var_dump(base64_encode($out));
上例中 $pri 為自己的私鑰,'hello' 為待簽名的數(shù)據,如果簽名成功,最后輸出為base64編碼后的簽名,如:
j19H+C/NQEcyowezOQ+gmGi2UoPJNXyJ+KwpkEzJ5u4qaRD3cY4qhfFfIosypypwJTJ4LjRYOIPNQMQm6ICj2nMdGfn/p/pp7il+xGz2aUWdOXkJFgIc/PGC95C9sLH04Tc6QSuV5IMd9rjBjyv+ieokMLFm9cmtN2hGag9vq1s=
3. 別人收到你的數(shù)據 'hello' 和簽名字串,想驗證這是從你發(fā)來的數(shù)據的話,用你公開的公鑰驗證:
$sig = base64_decode($sig);
$res = openssl_pkey_get_public($pubkey);
if (openssl_verify('hello', $sig, $res) === 1)
; // 通過驗證
上例中剛開始的 $sig 為之前你base64編碼過的簽名, $pubkey 為你的公鑰
php中這種簽名使用的是RSA算法;數(shù)字簽名可以在 單點登錄 等系統(tǒng)中派上用場。
您的公鑰,私鑰錯誤了。
通過openssl工具生成RSA的公鑰和私鑰(opnssl工具可在互聯(lián)網中下載到,也可以點此下載無線接口包,里面包含此工具)
打開openssl文件夾下的bin文件夾,執(zhí)行openssl.exe文件:
1)生成RSA私鑰
輸入“生成命令.txt”文件中:“genrsa -out rsa_private_key.pem 1024”,并回車得到生成成功的結果,如下圖:
此時,我們可以在bin文件夾中看到一個文件名為rsa_private_key.pem的文件,用記事本方式打開它,可以看到-----BEGIN RSA PRIVATE KEY-----開頭,-----END RSA PRIVATE KEY-----結尾的沒有換行的字符串,這個就是原始的私鑰。
2)把RSA私鑰轉換成PKCS8格式
輸入命令:pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt,并回車當前界面中會直接顯示出生成結果,這個結果就是PKCS8格式的私鑰,如下圖:
右鍵點擊openssl窗口上邊邊緣,選擇編輯→標記,選中要復制的文字(如上圖),
此時繼續(xù)右鍵點擊openssl窗口上邊邊緣,選擇編輯→復制,
把復制的內容粘土進一個新的記事本中,可隨便命名,只要知道這個是PKCS8格式的私鑰即可。
3)生成RSA公鑰
輸入命令:rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem,并回車,得到生成成功的結果,如下圖:
此時,我們可以在bin文件夾中看到一個文件名為rsa_public_key.pem的文件,用記事本方式打開它,可以看到-----BEGIN PUBLIC KEY-----開頭,-----END PUBLIC KEY-----結尾的沒有換行的字符串,這個就是公鑰。
PHP做銀聯(lián)支付接口調用問題
//在工商支付接口之前要找到工行提供的接口文件級dll文件
//將訂單簽名數(shù)據公鑰加密提供給工行指定頁面
//組織要簽名的數(shù)據串
$src="ICBC_PERBANK_B2C1.0.0.0".$infomer["merid"].$infomer["meracct"].$returnaddress."HS".$ddnumber.$amount."0010".$nowtime."0";
$com=new com('ICBCEBANKUTIL.B2CUtil');
$rc=$com-init("c:\WINDOWS\user.crt","c:\WINDOWS\user.crt","c:\WINDOWS\user.key","11111111");
$ssrc=$com-signC($src, strlen($src)); //訂單簽名數(shù)據
$rc=$com-verifySignC($src,strlen($src), $ssrc, strlen($ssrc));
$cert=$com-getCert(1); //商城證書公鑰
//將商戶證書存儲到c:\WINDOWS目錄下,然后創(chuàng)建form表單,將指定的數(shù)據提交到工行指定的網頁中
!--支付寶支付的接口操作,提交的數(shù)據--
td width="100"a href="{$link}"img src="images/sy_19.gif" width="90" height="25" border="0"/a/td
!--——————————————————--
!--工行支付的接口操作,提交的數(shù)據--
form action="" method="post" name="form_bank"
input name="interfaceName" type="hidden" value="ICBC_PERBANK_B2C"/
input name="interfaceVersion" type="hidden" value="1.0.0.0"/
input name="orderid" type="hidden" value="{$ddnumber}"/
input name="amount" type="hidden" value="{$amount}"/
input name="curType" type="hidden" value="001"/
input name="merID" type="hidden" value="{$merid}"/
input name="merAcct" type="hidden" value="{$meracct}"/
input name="verifyJoinFlag" type="hidden" value="0"/
input name="notifyType" type="hidden" value="HS"/
input name="merURL" type="hidden" value="{$returnaddress}"/
input name="resultType" type="hidden" value="0"/
input name="orderDate" type="hidden" value="{$nowtime}"/
input name="merSignMsg" type="hidden" value="{$ssrc}" /
input name="merCert" type="hidden" value="{$cert}" /
/form
當前文章:php簽名數(shù)據串,php 簽名
網站URL:http://chinadenli.net/article16/dsehdgg.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供微信小程序、外貿網站建設、標簽優(yōu)化、搜索引擎優(yōu)化、電子商務、ChatGPT
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)