分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

php 非对称加密解密类

发布时间:2023-09-06 01:34责任编辑:郭大石关键词:加密解密

<?php
header("Content-Type: text/html;charset=utf-8");
// ?????????????让敲代码成为一种 ___"时尚" ??

// 让敲代码成为一种 ___"时尚"
//
// ??????????????????????.::::.
// ????????????????????.::::::::.
// ???????????????????:::::::::::
// ????????????????..:::::::::::‘
// ?????????????‘::::::::::::‘
// ???????????????.::::::::::
// ??????????‘::::::::::::::..
// ???????????????..::::::::::::.
// ?????????????``::::::::::::::::
// ??????????????::::``:::::::::‘ ???????.:::.
// ?????????????::::‘ ??‘:::::‘ ??????.::::::::.
// ???????????.::::‘ ?????:::: ????.:::::::‘::::.
// ??????????.:::‘ ??????::::: ?.:::::::::‘ ‘:::::.
// ?????????.::‘ ???????:::::.:::::::::‘ ?????‘:::::.
// ????????.::‘ ????????::::::::::::::‘ ????????``::::.
// ????...::: ??????????::::::::::::‘ ?????????????``::.
// ???```` ‘:. ?????????‘:::::::::‘ ?????????????????::::..
// ??????????????????????‘.:::::‘ ???????????????????‘::‘````..
// ?????????????????????????????????美女保佑 ———— ??项目无BUG_

/*本文oppenssl地方需结合上篇文章

生成公钥、私钥对,私钥加密的内容能通过公钥解密(反过来亦可以)

下载开源RSA密钥生成工具openssl(通常Linux系统都自带该程序),解压缩至独立的文件夹,进入其中的bin目录,执行以下命令:

openssl genrsa -out rsa_private_key.pem 1024 #生成原始 RSA私钥文件 rsa_private_key.pem
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out private_key.pem #将原始 RSA私钥转换为 pkcs8格式
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem #通过私钥生成对应 RSA公钥 rsa_public_key.pem

*/
$private_key = ‘-----BEGIN PRIVATE KEY-----
MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAMJZKm/28UWvNtIP
PiDx6VgmM8wE5CnPl/SqUH6HkDptTBAxSj7GuZ+/5Ci6X32MOBaBvQi0s9bbuEj3
R8soTMSUTUF7aMLLMCjGRYRtsZms85buCaZzu85AStHYAcN73CyW9jg5KuCXHwZo
314KDQEKCi8sENigOc5iRg+hxZSnAgMBAAECgYEAj9xxDXA+KNcKPXQLCVgI4rdk
oCD+w/RnBzULYJ34pUdChrn1u4Je5WGmAn/zL3wcCI0A4PDiLql2QIzLGBc8uvsW
ZG5P0jrvneueTj6lYGKvavGmHlWxLEmVbu4Q7UZylaFWmvym7ugi4pC2SA2tb/bh
PQgGOk0hGblf35IFbAECQQD3H+CuD8OHQoE5dKKqYKgoZJbVrrVooHpgXNkX83dV
ikuDjhec52S1tP1gebmc9k4+gKkwlVAQ1yAspMTtmWJ1AkEAyVQNBSKenhe9W91p
Ck4T7H8OGveQeXaBKIharHfc6bKo6EgP9cCNXO4IFcZwu39oTXkJ0T++KDui7LbG
Y0J/KwJAbH4OQdyh1uwXl4XhNDOjH7ipj75X3ks17sBUfvNgXKmOZX8oVrYvvKZs
5sIJ/yMTTtVlcfLbZ8lKUs8ztaw1UQJBALGWi3mZJRNM24J6Fpq5boexN28AKxeJ
ObrYNCtn+5zFNIrYbgOX2to7OTSD+5LYetfDya4jLQhuOnPVcb/Cu0sCQQDjMihu
Ei11tbheQN6U/nQkWpg5XpRY2Cfh/wbHA1TWr/eTz31LOzAfdgdSaKMHU3BZCqwx
4H30DRqxM/D+COWn
-----END PRIVATE KEY-----‘;
$public_key = ‘-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCWSpv9vFFrzbSDz4g8elYJjPM
BOQpz5f0qlB+h5A6bUwQMUo+xrmfv+Qoul99jDgWgb0ItLPW27hI90fLKEzElE1B
e2jCyzAoxkWEbbGZrPOW7gmmc7vOQErR2AHDe9wslvY4OSrglx8GaN9eCg0BCgov
LBDYoDnOYkYPocWUpwIDAQAB
-----END PUBLIC KEY-----‘;
file_put_contents(‘public_key.txt‘, $public_key);
file_put_contents(‘private_key.txt‘, $private_key);

/**
* rsa 非对称加解密
*/
class rsa {
???private $public_key = ‘‘; //公密钥
???private $private_key = ‘‘; //私密钥
???private $public_key_resource = ‘‘; //公密钥资源
???private $private_key_resource = ‘‘; //私密钥资源
???/**
????* 架构函数
????* @param [string] $public_key_file ?[公密钥文件地址]
????* @param [string] $private_key_file [私密钥文件地址]
????*/
???public function __construct($public_key_file,$private_key_file) {
???????try {
???????????if(!file_exists($public_key_file) || !file_exists($private_key_file)) {
???????????????throw new Exception(‘key file no exists‘);
???????????}
???????????if (false == ($this->public_key = file_get_contents($public_key_file)) || false == ($this->private_key = file_get_contents($private_key_file))) {
???????????????throw new Exception(‘read key file fail‘);
???????????}
???????????if(false == ($this->public_key_resource = $this->is_bad_public_key($this->public_key)) || false == ($this->private_key_resource = $this->is_bad_private_key($this->private_key))) {
???????????????throw new Exception(‘public key or private key no usable‘);
???????????}

???????} catch (Exception $e) {
???????????die($e->getMessage());
???????} ???
???}
???private function is_bad_public_key($public_key) {
???????return openssl_pkey_get_public($public_key);
???}
???private function is_bad_private_key($private_key) {
???????return openssl_pkey_get_private($private_key);
???}
???/**
????* 生成一对公私密钥 成功返回 公私密钥数组 失败 返回 false
????*/
???public function create_key() {
???????$res = openssl_pkey_new();
???????if($res == false) return false;
???????openssl_pkey_export($res, $private_key);
???????$public_key = openssl_pkey_get_details($res);
???????return array(‘public_key‘=>$public_key["key"],‘private_key‘=>$private_key);
???}
???/**
????* 用私密钥加密
????*/
???public function private_encrypt($input) {
???????openssl_private_encrypt($input,$output,$this->private_key_resource);
???????return base64_encode($output);
???}
???/**
????* 解密 私密钥加密后的密文
????*/
???public function public_decrypt($input) {
???????openssl_public_decrypt(base64_decode($input),$output,$this->public_key_resource);
???????return $output;
???}
???/**
????* 用公密钥加密
????*/
???public function public_encrypt($input) {
???????openssl_public_encrypt($input,$output,$this->public_key_resource);
???????return base64_encode($output);
???}
???/**
????* 解密 公密钥加密后的密文
????*/
???public function private_decrypt($input) {
???????openssl_private_decrypt(base64_decode($input),$output,$this->private_key_resource);
???????return $output;
???}
}

$time = time();
echo ‘时间戳==‘.$time.‘<br>‘;
$rsa = new rsa(‘public_key.txt‘,‘private_key.txt‘);
$str = ‘撇如惊鸿 矫若游龙&‘.$time;
$str = $rsa->public_encrypt($str); //用公密钥加密
echo ‘公秘钥加密==‘.$str.‘</br>‘;
$str = $rsa->private_decrypt($str); //用私密钥解密
echo ‘私秘钥解密==‘.$str.‘</br>‘;
//=============================================================
$str = $rsa->private_encrypt($str); //用丝密钥加密
echo ‘私密钥加密==‘.$str.‘</br>‘;
$str = $rsa->public_decrypt($str); //用公密钥解密
echo ‘公密钥解密==‘.$str.‘</br>‘;

php 非对称加密解密类

原文地址:https://www.cnblogs.com/yszr/p/8215124.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved