PHP实现RSA加密类的实例解析
* 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_P
-
下一代网络运维管理技术的发展趋势
作为企业运营管理的主要组成机体,电信运维管理具有复杂性、独立性、关联性、动态性的特点。通过对电信运营过程的分析以及长时间实践经验的总结,人们对电信运维管理工作的认识也在不断深入。电信运维能力要从电信运营的宏观角度分析。电信运维与运营的关系体现在...
-
《培训调查意见表》Word表格
1.基本情况姓名性别年龄部门职务填表时间2.对以往培训的感知(可复选)(1)以往培训形式□课堂讲授式□小组讨论式□角色扮演式□游戏训练□案例分析(2)以往参加培训原因□自己要求□领导指派□企业要求□自费学习(3)培训后技能、绩效提升是否明显□明显提升□稍有提升□效...
-
平面设计自学小贴士
怎么自学平面设计是一个大学问,学得好的就可以进4A公司,前途光明。所以,接下来小编就和大家一起来了解关于自学平面设计的知识,希望对大家有帮助!自学平面设计的小贴士一、每天至少临摹一件作品,重点学习其版式构图、色彩搭配,不懂的马上上论坛问!(时间:1-2h)二、...
-
excel上机试题「附答案」
一、操作题1,要求:在A10单元格中输入平均分,并在B10:G10(应为B10:F10)单元格区域中利用函数计算每门课的平均分。答:在A10输入平均分,回车点,点B10,点插入,点函数,选择函数AVERAGE,点确定,点确定,从B10把填充柄拖到F10,松开。完成2.要求:计算A1:A10单元格的最大值,并且在A12单元...