php实现RSA加密类实例__第1页
php实现RSA加密类实例__第2页
php实现RSA加密类实例__第3页
php实现RSA加密类实例__第4页
php实现RSA加密类实例__第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、php实现RSA加密类实例_ 这篇文章主要介绍了php实现RSA加密类,实例分析了php自定义RSA类实现加密与解密的技巧,特别具有有用价值,需要的伴侣可以参考下 本文实例讲解并描述了php实现RSA加密类。分享给大家供大家参考。具体分析如下: 通过openssl实现的签名、验签、非对称加解密,需要配合x.509证书(如crt和pem)文件用法。 由于各种缘由,该类并不非常完善,欢迎各种测试! ?php /* * RSA算法类 * 签名及密文编码:base64字符串/十六进制字符串/二进制字符串流 * 填充方式: PKCS1Padding(加解密)/NOPadding(解密) * * Noti

2、ce: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: 2021/1/23 */ class RSA private $pubKey = null; private $priKey = null; /* * 自定义错误处理 */ private function _error($msg

3、) 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)

4、; /* * 生成签名 * * 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 strin

5、g 签名编码(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; /* *

6、 加密 * * 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)

7、; 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-ge

8、nerated 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

9、 != 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 _checkP

10、adding($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)

11、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($

12、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-priK

13、ey = 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($_GETa) ? $_GETa : 测试123; / $pubfile = E:sslcertpwd.crt; $prifi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论