中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

php實現RSA加密類實例
來源:易賢網 閱讀:7436 次 日期:2015-03-30 11:41:00
溫馨提示:易賢網小編為您整理了“php實現RSA加密類實例”,方便廣大網友查閱!

這篇文章主要介紹了php實現RSA加密類,實例分析了php自定義RSA類實現加密與解密的技巧,非常具有實用價值,需要的朋友可以參考下

本文實例講述了php實現RSA加密類。分享給大家供大家參考。具體分析如下:

通過openssl實現的簽名、驗簽、非對稱加解密,需要配合x.509證書(如crt和pem)文件使用。

由于各種原因,該類并不十分完善,歡迎各種測試!

<?php

/**

* RSA算法類

* 簽名及密文編碼:base64字符串/十六進制字符串/二進制字符串流

* 填充方式: PKCS1Padding(加解密)/NOPadding(解密)

*

* Notice:Only accepts a single block. Block size is equal to the RSA key size!

* 如密鑰長度為1024 bit,則加密時數據需小于128字節,加上PKCS1Padding本身的11字節信息,所以明文需小于117字節

*

* @author: linvo

* @version: 1.0.0

* @date: 2013/1/23

*/

class RSA{

private $pubKey = null;

private $priKey = null;

/**

* 自定義錯誤處理

*/

private function _error($msg){

die('RSA Error:' . $msg); //TODO

}

/**

* 構造函數

*

* @param string 公鑰文件(驗簽和加密時傳入)

* @param string 私鑰文件(簽名和解密時傳入)

*/

public function __construct($public_key_file = '', $private_key_file = ''){

if ($public_key_file){

$this->_getPublicKey($public_key_file);

}

if ($private_key_file){

$this->_getPrivateKey($private_key_file);

}

}

/**

* 生成簽名

*

* @param string 簽名材料

* @param string 簽名編碼(base64/hex/bin)

* @return 簽名值

*/

public function sign($data, $code = 'base64'){

$ret = false;

if (openssl_sign($data, $ret, $this->priKey)){

$ret = $this->_encode($ret, $code);

}

return $ret;

}

/**

* 驗證簽名

*

* @param string 簽名材料

* @param string 簽名值

* @param string 簽名編碼(base64/hex/bin)

* @return bool

*/

public function verify($data, $sign, $code = 'base64'){

$ret = false;

$sign = $this->_decode($sign, $code);

if ($sign !== false) {

switch (openssl_verify($data, $sign, $this->pubKey)){

case 1: $ret = true; break;

case 0:

case -1:

default: $ret = false;

}

}

return $ret;

}

/**

* 加密

*

* @param string 明文

* @param string 密文編碼(base64/hex/bin)

* @param int 填充方式(貌似php有bug,所以目前僅支持OPENSSL_PKCS1_PADDING)

* @return string 密文

*/

public function encrypt($data, $code = 'base64', $padding = OPENSSL_PKCS1_PADDING){

$ret = false;

if (!$this->_checkPadding($padding, 'en')) $this->_error('padding error');

if (openssl_public_encrypt($data, $result, $this->pubKey, $padding)){

$ret = $this->_encode($result, $code);

}

return $ret;

}

/**

* 解密

*

* @param string 密文

* @param string 密文編碼(base64/hex/bin)

* @param int 填充方式(OPENSSL_PKCS1_PADDING / OPENSSL_NO_PADDING)

* @param bool 是否翻轉明文(When passing Microsoft CryptoAPI-generated RSA cyphertext, revert the bytes in the block)

* @return string 明文

*/

public function decrypt($data, $code = 'base64', $padding = OPENSSL_PKCS1_PADDING, $rev = false){

$ret = false;

$data = $this->_decode($data, $code);

if (!$this->_checkPadding($padding, 'de')) $this->_error('padding error');

if ($data !== false){

if (openssl_private_decrypt($data, $result, $this->priKey, $padding)){

$ret = $rev ? rtrim(strrev($result), "\0") : ''.$result;

}

}

return $ret;

}

// 私有方法

/**

* 檢測填充類型

* 加密只支持PKCS1_PADDING

* 解密支持PKCS1_PADDING和NO_PADDING

*

* @param int 填充模式

* @param string 加密en/解密de

* @return bool

*/

private function _checkPadding($padding, $type){

if ($type == 'en'){

switch ($padding){

case OPENSSL_PKCS1_PADDING:

$ret = true;

break;

default:

$ret = false;

}

} else {

switch ($padding){

case OPENSSL_PKCS1_PADDING:

case OPENSSL_NO_PADDING:

$ret = true;

break;

default:

$ret = false;

}

}

return $ret;

}

private function _encode($data, $code){

switch (strtolower($code)){

case 'base64':

$data = base64_encode(''.$data);

break;

case 'hex':

$data = bin2hex($data);

break;

case 'bin':

default:

}

return $data;

}

private function _decode($data, $code){

switch (strtolower($code)){

case 'base64':

$data = base64_decode($data);

break;

case 'hex':

$data = $this->_hex2bin($data);

break;

case 'bin':

default:

}

return $data;

}

private function _getPublicKey($file){

$key_content = $this->_readFile($file);

if ($key_content){

$this->pubKey = openssl_get_publickey($key_content);

}

}

private function _getPrivateKey($file){

$key_content = $this->_readFile($file);

if ($key_content){

$this->priKey = openssl_get_privatekey($key_content);

}

}

private function _readFile($file){

$ret = false;

if (!file_exists($file)){

$this->_error("The file {$file} is not exists");

} else {

$ret = file_get_contents($file);

}

return $ret;

}

private function _hex2bin($hex = false){

$ret = $hex !== false && preg_match('/^[0-9a-fA-F]+$/i', $hex) ? pack("H*", $hex) : false;

return $ret;

}

}

測試demo:

<?php

header('Content-Type:text/html;Charset=utf-8;');

include "rsa.php";

echo '<pre>';

$a = isset($_GET['a']) ? $_GET['a'] : '測試123';

//////////////////////////////////////

$pubfile = 'E:\ssl\cert\pwd.crt';

$prifile = 'E:\ssl\cert\pwd.pem';

$m = new RSA($pubfile, $prifile);

$x = $m->sign($a);

$y = $m->verify($a, $x);

var_dump($x, $y);

$x = $m->encrypt($a);

$y = $m->decrypt($x);

var_dump($x, $y);

希望本文所述對大家的php程序設計有所幫助。

更多信息請查看IT技術專欄

更多信息請查看網絡編程
易賢網手機網站地址:php實現RSA加密類實例
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
亚洲欧美在线一区二区| 亚洲第一精品久久忘忧草社区| 日韩一级不卡| 一区二区三区色| 蜜桃av一区二区三区| 欧美少妇一区| 99精品福利视频| 欧美久久九九| 亚洲一区国产一区| 国产精品久久久久久亚洲毛片| 91久久亚洲| 欧美精品免费看| 亚洲电影中文字幕| 欧美精品久久99久久在免费线| 亚洲国产一区二区三区a毛片| 久久国产精品亚洲va麻豆| 国产精品视频在线观看| 久久九九国产精品怡红院| 久久综合九色99| 亚洲人成网站色ww在线| 国产精品v一区二区三区| 亚洲无人区一区| 亚洲国产欧洲综合997久久| 亚洲国产第一页| 奶水喷射视频一区| 亚洲青涩在线| 国产精品入口麻豆原神| 久久久久久伊人| 一区二区自拍| 国产欧美在线视频| 国产女优一区| 国产欧美韩国高清| 在线日本成人| 国产一区二区在线免费观看| 亚洲国产成人精品久久| 国产欧美精品日韩区二区麻豆天美| 欧美日韩在线高清| 亚洲特黄一级片| 欧美精品99| 午夜亚洲性色福利视频| 一区二区三区精品视频在线观看 | 国产欧美一区在线| 欧美日韩国产一区精品一区 | 亚洲自拍偷拍麻豆| 一本久道综合久久精品| 最新日韩欧美| 99热免费精品在线观看| 亚洲国产精品一区制服丝袜| 曰本成人黄色| 亚洲欧洲综合另类在线| 国产欧美精品一区| 国产精品综合av一区二区国产馆| 国产精品久久| 在线欧美福利| 亚洲免费小视频| 欧美自拍偷拍| 亚洲综合欧美日韩| 欧美国产三区| 欧美午夜剧场| 亚洲大胆在线| 久久久一区二区| 欧美激情按摩在线| 国产精品亚洲精品| 日韩写真在线| 中文高清一区| 久久综合给合久久狠狠狠97色69| 久久久久久久综合狠狠综合| 久久天天综合| 欧美日韩日本国产亚洲在线 | 亚洲欧美日韩网| 久久久五月天| 亚洲国产成人久久综合一区| 欧美中在线观看| 国产精品视频网| 亚洲欧美日韩精品综合在线观看| 国产午夜精品一区二区三区视频 | 欧美精品v日韩精品v国产精品 | 国产精品护士白丝一区av| 国产一区二区日韩精品| 久久亚洲不卡| 一区二区三区四区五区视频 | 久久久久天天天天| 夜夜嗨av一区二区三区免费区| 欧美日韩精品二区| 夜夜嗨一区二区| 亚洲激情视频在线观看| 国产乱子伦一区二区三区国色天香 | 免费永久网站黄欧美| 亚洲欧洲日韩在线| 国产亚洲精品一区二555| 欧美成人性网| 久久噜噜亚洲综合| 亚洲免费av网站| 在线视频国产日韩| 国产三级精品在线不卡| 欧美激情日韩| 免费亚洲电影| 午夜精品久久久久久| 亚洲二区在线| 国产一区二区精品久久91| 欧美精品在线免费| 美女脱光内衣内裤视频久久影院 | 激情久久久久久久| 国内偷自视频区视频综合| 国产精品青草久久| 精品成人一区二区三区| 亚洲作爱视频| 欧美呦呦网站| 欧美日韩一区二区三区在线看| 亚洲人成在线观看| 一区二区三区久久精品| 久久尤物视频| 嫩草影视亚洲| 午夜一级久久| 欧美人妖在线观看| 亚洲免费高清| 国产精品二区在线| 亚洲一区二区三区四区在线观看| 欧美在线视频a| 免费在线成人av| 欧美午夜一区二区福利视频| 在线高清一区| 欧美在线不卡| 国产欧美日韩高清| 一二三四社区欧美黄| 久久米奇亚洲| 黄色成人av| 久久精品一区蜜桃臀影院| 欧美性片在线观看| 亚洲精品欧美在线| 久久深夜福利免费观看| 欧美伦理视频网站| 亚洲欧洲日韩综合二区| 久久一区国产| 尤物yw午夜国产精品视频| 久久精品欧美日韩| 欧美大色视频| 国产免费一区二区三区香蕉精| 99国产精品视频免费观看一公开| 老司机久久99久久精品播放免费| 午夜一区在线| 欧美日韩精品三区| 在线亚洲伦理| 在线国产日韩| 国产精品久久久久久影院8一贰佰| 亚洲作爱视频| 国产麻豆精品在线观看| 久久综合色8888| 91久久线看在观草草青青| 久久综合久久综合久久| 亚洲国产成人av在线| 久热成人在线视频| 亚洲日本欧美| 国产手机视频精品| 欧美另类在线播放| 欧美伊久线香蕉线新在线| 亚洲韩国一区二区三区| 欧美午夜精品理论片a级大开眼界| 久久精品视频播放| 亚洲一区二区三区在线视频| 好看的av在线不卡观看| 国产精品国产三级国产普通话蜜臀 | 亚洲精品国产拍免费91在线| 国产免费观看久久| 国产欧美一二三区| 国产婷婷一区二区| 欧美mv日韩mv国产网站| 一本色道久久88综合亚洲精品ⅰ| 国产精品久久久久久久久免费桃花| 午夜精品理论片| 正在播放日韩| 亚洲欧洲日本专区| 91久久精品国产91久久性色tv| 国产精品成人一区二区三区吃奶| 欧美在线观看视频在线| 艳妇臀荡乳欲伦亚洲一区| 亚洲激情在线观看视频免费| 欧美午夜精品一区| 欧美日韩在线视频一区二区| 免费中文字幕日韩欧美| 午夜精品三级视频福利| 日韩视频一区| 亚洲日本va在线观看| 亚洲国产精品第一区二区三区| 国产亚洲日本欧美韩国| 国模一区二区三区| 精品成人国产| 国产精品久久久久久久久久免费| 欧美三级乱码| 国产一区二区三区高清在线观看| 国产精品人人做人人爽人人添| 欧美日韩天天操| 欧美日韩国产一区二区三区地区| 欧美va天堂| 欧美三级在线视频| 精品成人久久| 亚洲一区久久久| 欧美精品18+| 欧美日韩调教| 国产欧美日韩精品专区|