PHP-RAS加解密示例
来源:互联网 发布:金和软件股票 编辑:程序博客网 时间:2024/06/07 01:31
- 生成密钥和公钥
开始前需要准备openssl环境
1.1 linux 需要安装openssl工具包,传送门http://www.openssl.org/source/
1.2 window 下需要安装openssl的程序,传送门http://slproweb.com/products/Win32OpenSSL.html
1.3 密钥生成
openssl genrsa 用于生成rsa私钥文件,生成是可以指定私钥长度和密码保护,具体参数请参考文档。
openssl genrsa -out private_key.pem 1024
-out 指定生成的密钥的文件名,可以随意定义,但是最好为意义的名字,在此生成的密钥文件为 private_key.pem
在此生成一个1024长度的密钥,密钥长度越长越安全,但加解密所耗时间亦变长。
生成的密钥private_key.pem文件的内容为:
—–BEGIN RSA PRIVATE KEY—–
MIICXAIBAAKBgQCxLKt87Xxt+tjZqggwy5xBqd7hMrVNGWxDmEC8N02VLKjydwB8
fU4OooKgtGpSNHy2o4L1S0AAxyplPQbcoou4Aa4NaiqvSrbfotZHIgoMK3UnfxcD
xH9f9rJdiD3UTPrh+9sijhjusRc8lWLSOGvHio2/Xj4/yZAZVYQEnWcGfQIDAQAB
AoGANWU3/Xt5H5AU4Gxs8X+7hNKUGBx3JVg/F5QAFnk4SXffJsuUevAsoR567cHR
tRqaZ1SZ+CEIlfNwJHii48WdA4QkzoJp8leIHEnDcwlutM7zQBFTLI9keE2Fdi2n
ArNFu//R7wRk5NNscZst0DV/kksUbP//4TSRePqWiD6cKkECQQDXy7s+TDRrVkVt
kD4/3ae5H3ExoKcyBwwkhvBAzGjfiZYSfNDHX04Sv4zJf0BT1Gu48kO/AcfSzEKa
vxbW6ujtAkEA0i7qCXAQsyW1T9xZrFkhw8vXgI2NDaQ7RbKG8OxnzsA6TYjmTy79
YQF+Q1KQ52F7IABY5JtlIBBoT5XHC3+x0QJATCap6d8MdIBaOcK4JON8Z5iP4lp2
BfJ0t4Miz0sTCydLXTTMnD6ml3kfHpAYTDze0sIzY/kl4d6Q9njOf4MgNQJAeIQh
+etiB/bVMcd9O4+YBra5CKMhf/LtcZdePIKxOyGJzK90r26YJqk+hsevAp0ohj7s
uZhIscv2o7uT+AnuIQJBAKUDl8ZyOPz/75dCVVTMFKhhMQ/AR+uhqu2AEQCzOgU3
5/iNjbvKOzHLgXit78jNr7kCOYfb5G4OBTtzo0ZYYaQ=
—–END RSA PRIVATE KEY—–
1.4 公钥生成
Rsa命令用于处理RSA密钥、格式转换和打印信息
openssl rsa -in private_key.pem -pubout -out public_key.pem
-in filename:输入的RSA密钥文件,在此为上面生成的密钥 private_key.pem。
-pubout:设置此选项后,保存公钥值到输出文件中。
-out filename:输出文件,在此我们定义成public_key.pem
生成的公钥public_key.pem文件的内容为:
—–BEGIN PUBLIC KEY—–
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDt8lasjepyr1vq/Q87iNJCv7ge
QXI2rgAB7lVFS02FxLNwgtqQ1cf+NH6mP88ufxxDVI2oL1RcH48dZPG7MGS4c0YT
EDOpIeTCZ8fW+AiPYTaq1axtS51LNwXeYIak28L8mEZoQjmn+nb3vfmTAKTUKrzz
XIDT3R83+lX4xxxQXwIDAQAB
—–END PUBLIC KEY—–
PHP用RSA加解密
开始前需要准备php openssl环境,开启PHP openssl扩展,window将php的配置文件php.ini中的
;extension=php_openssl.dll
改为
extension=php_openssl.dllPHP-RAS加解密示例
class RSA { public function __construct() { // 判断openssl扩展存在 extension_loaded('openssl') or die('openssl extension does not exist'); } /** * rsa加密 * @param string $str 原始明文 * @param string $need_base64_encode 是否需要base64_encode * @return string */ public static function encrypt($str, $need_base64_encode = TRUE) { // 公钥存放路径 $public_key_path = SpringConstant::LIBRARY_PATH . "/rsa/public_key.pem"; file_exists($public_key_path) or die('public key file path is not correct'); // 生成Resource类型的公钥,如果公钥文件内容被破坏,openssl_pkey_get_public函数返回false $public_key = openssl_pkey_get_public(file_get_contents($public_key_path)); $encrypt_data = ''; if (@openssl_public_encrypt($str, $encrypt_data, $public_key)) { // 加密后 可以base64_encode后方便在网址中传输 或者打印 否则打印为乱码 if ($need_base64_encode) { $encrypt_data = base64_encode($encrypt_data); } } else { die('encrypt failed'); } return $encrypt_data; } /** * rsa解密 * @param string $str rsa密文 * @param string $need_base64_decode 是否需要base64_decode解密 * @return string */ public static function decrypt($str, $need_base64_decode = TRUE) { // 公钥存放路径 $private_key_path = SpringConstant::LIBRARY_PATH . "/rsa/private_key.pem"; file_exists($private_key_path) or die('private key file path is not correct'); // 生成Resource类型的密钥,如果密钥文件内容被破坏,openssl_pkey_get_private函数返回false $private_key = openssl_pkey_get_private(file_get_contents($private_key_path)); $decrypt_data = ''; $encrypt_data = $str; if($need_base64_decode) { $encrypt_data = base64_decode($encrypt_data); } //解密 @openssl_private_decrypt($encrypt_data, $decrypt_data, $private_key, OPENSSL_PKCS1_PADDING) or die('decrypt failed'); return $decrypt_data; }}
4.使用PHP-RAS加解密
$str = 'niky'; $encrypt_str = RSA::encrypt($str,true); $decrypt_str = RSA::decrypt($encrypt_str,true); var_dump($str,$encrypt_str,$decrypt_str);exit;
- PHP-RAS加解密示例
- PHP RSA加解密示例
- PHP RSA加解密示例
- PHP RSA加解密示例
- PHP RSA加解密示例
- php字符串加解密
- PHP加解密基础知识
- AES加解密以及示例
- RSA算法加解密示例
- RAS 加密解密
- rsa加解密,js加密,php解密
- 微信公众平台安全模式消息体签名及加解密PHP代码示例
- php文本加解密算法
- PHP JS RSA 加解密
- PHP的Mcrypt加解密
- PHP RC4 加解密类
- Java之AES加解密示例
- iOS之AES加解密示例
- Jsoup文档
- JSP知识小结
- C#中Image.FromFile(string path)函数报内存不足错误解决方法
- JavaScript-Array 对象及方法(上)
- myeclipse开发 spring+struts2.0+hibernate
- PHP-RAS加解密示例
- maven管理工程,引入MyBatis、MySQL遇到的问题
- mysql常用基础操作语法(八)~~多表查询合并结果和内连接查询【命令行模式】
- (五)浏览器对象
- TabHost的两种实现方式
- MapReduce 进阶:Partitioner 组件
- 【CSS3】与背景相关的样式--慕课网【学习总结】
- 做技术到底是应该俗还是雅
- PTA-基础编程题目-5-35有理数的均值(c)