超級簡單,依賴於OpenSSL擴展,這裡就不多廢話了,直接奉上代碼
簽名:
function sign($data) {
//讀取私鑰文件
$priKey = file_get_contents('key/rsa_private_key.pem');
//轉換為openssl密鑰,必須是沒有經過pkcs8轉換的私鑰
$res = openssl_get_privatekey($priKey);
//調用openssl內置簽名方法,生成簽名$sign
openssl_sign($data, $sign, $res);
//釋放資源
openssl_free_key($res);
return $sign;
}
驗證:
function verify($data, $sign) {
//讀取支付寶公鑰文件
$pubKey = file_get_contents('key/alipay_public_key.pem');
//轉換為openssl格式密鑰
$res = openssl_get_publickey($pubKey);
//調用openssl內置方法驗簽,返回bool值
$result = (bool)openssl_verify($data, $sign, $res);
//釋放資源
openssl_free_key($res);
return $result;
解密
function decrypt($content) {
//讀取商戶私鑰
$priKey = file_get_contents('key/rsa_private_key.pem');
//轉換為openssl密鑰,必須是沒有經過pkcs8轉換的私鑰
$res = openssl_get_privatekey($priKey);
//聲明明文字符串變量
$result = '';
//循環按照128位解密
for($i = 0; $i < strlen($content)/128; $i++ ) {
$data = substr($content, $i * 128, 128);
//拆分開長度為128的字符串片段通過私鑰進行解密,返回$decrypt解析後的明文
openssl_private_decrypt($data, $decrypt, $res);
//明文片段拼接
$result .= $decrypt;
}
//釋放資源
openssl_free_key($res);
//返回明文
return $result;
}
希望本文所述對大家學習php程序設計有所幫助。