php 非对称加密解密类

<?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>‘;

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

时间: 2024-10-28 06:57:18

php 非对称加密解密类的相关文章

[C#] 常用工具类——加密解密类

using System; using System.Configuration; using System.Collections.Generic; using System.Text; using System.Web; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using S

DES加密/解密类。

/// <summary> /// DES加密/解密类. /// </summary> public class DESEncrypt { #region ========加密======== /// <summary> /// 加密 /// </summary> /// <param name="Text"></param> /// <returns></returns> public s

Java对称与非对称加密解密,AES与RSA

加密技术可以分为对称与非对称两种. 对称加密,解密,即加密与解密用的是同一把秘钥,常用的对称加密技术有DES,AES等 而非对称技术,加密与解密用的是不同的秘钥,常用的非对称加密技术有RSA等 为什么要有非对称加密,解密技术呢 假设这样一种场景A要发送一段消息给B,但是又不想以明文发送,所以就需要对消息进行加密.如果采用对称加密技术,那么加密与解密用的是同一把秘钥.除非B事先就知道A的秘钥,并且保存好.这样才可以解密A发来的消息. 由于对称技术只有一把秘钥,所以秘钥的管理是一个很麻烦的问题.而非

java文本文件加密解密类

原文:http://www.open-open.com/code/view/1420031154765 import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; import java.security.*; import javax.crypto.*; import javax.crypto.spec.*; /** * 文本文件加密解密类 * * 文件名:FileEncrypter.j

DES加密解密类-java

import java.security.*; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; /** * Copyright 2007 GuangZhou Cotel Co. Ltd. * All right reserved. * DES加密解密类. * @author <a

C#实现基于Base64的加密解密类实例

本文实例讲述了C#实现基于Base64的加密解密类.分享给大家供大家参考.具体如下: 这个C#类是一个基于Base64的加密和解密类,用户可以可以使用默认的秘钥进行加密.解密,也可以自己设定秘钥进行加密和解密,非常实用 using System; using System.Security.Cryptography; using System.Text; namespace DotNet.Utilities { /// <summary> /// Encrypt 的摘要说明. /// <

(转)C#实现RSA非对称加密解密

转自:http://blog.csdn.net/u010678947/article/details/48652875 一.RSA简介 RSA公钥加密算法是1977年由Ron Rivest.Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的.RSA取名来自开发他们三者的名字.RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准.RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式

php rsa 非对称加解密类

<?php header("Content-Type: text/html;charset=utf-8"); /* 生成公钥.私钥对,私钥加密的内容能通过公钥解密(反过来亦可以) 下载开源RSA密钥生成工具openssl(通常Linux系统都自带该程序),解压缩至独立的文件夹,进入其中的bin目录,执行以下命令: openssl genrsa -out rsa_private_key.pem 1024 #生成原始 RSA私钥文件 rsa_private_key.pem opens

C# 常见加密解密类

常见的加密方式分为可逆和不可逆两种方式 可逆:RSA,AES,DES等 不可逆:常见的MD5,SHAD等 常见的加密方式封装到一个Password类中     public class Password     {         /// <summary>         /// 此代码示例通过创建哈希字符串适用于任何 MD5 哈希函数 (在任何平台) 上创建 32 个字符的十六进制格式哈希字符串         /// 官网案例改编         /// </summary>