您的位置:首页 > 编程语言 > PHP开发

PHP rsa密钥生成 加密解密

2013-05-03 11:01 633 查看
<?php

class Rsa{
private static $_privkey = '';
private static $_pubkey = '';
private static $_isbase64 = false;
/**
* 初始化key值
* @param string $privkey 私钥
* @param string $pubkey 公钥
* @param boolean $isbase64 是否base64编码
* @return null
*/
public function init($privkey, $pubkey, $isbase64=false){
self::$_privkey = $privkey;
self::$_pubkey = $pubkey;
self::$_isbase64 = $isbase64;
}
/**
* 私钥加密
* @param string $data 原文
* @return string 密文
*/
public function priv_encode($data){
$outval = '';
$res = openssl_pkey_get_private(self::$_privkey);
openssl_private_encrypt($data, $outval, $res);
if(self::$_isbase64){
$outval = base64_encode($outval);
}
return $outval;
}
/**
* 公钥解密
* @param string $data 密文
* @return string 原文
*/
public function pub_decode($data){
$outval = '';
if(self::$_isbase64){
$data = base64_decode($data);
}
$res = openssl_pkey_get_public(self::$_pubkey);
openssl_public_decrypt($data, $outval, $res);
return $outval;
}
/**
* 公钥加密
* @param string $data 原文
* @return string 密文
*/
public function pub_encode($data){
$outval = '';
$res = openssl_pkey_get_public(self::$_pubkey);
openssl_public_encrypt($data, $outval, $res);
if(self::$_isbase64){
$outval = base64_encode($outval);
}
return $outval;
}
/**
* 私钥解密
* @param string $data 密文
* @return string 原文
*/
public function priv_decode($data){
$outval = '';
if(self::$_isbase64){
$data = base64_decode($data);
}
$res = openssl_pkey_get_private(self::$_privkey);
openssl_private_decrypt($data, $outval, $res);
return $outval;
}
/**
* 创建一组公钥私钥
* @return array 公钥私钥数组
*/
public function new_rsa_key(){
$res = openssl_pkey_new();
openssl_pkey_export($res, $privkey);
$d= openssl_pkey_get_details($res);
$pubkey = $d['key'];
return array(
'privkey' => $privkey,
'pubkey' => $pubkey
);
}
}

//举个粒子
$Rsa = new Rsa();
$keys = $Rsa->new_rsa_key(); //生成完key之后应该记录下key值,这里省略
p($keys);
$privkey = $keys['privkey'];
$pubkey = $keys['pubkey'];

//初始化rsaobject
$Rsa->init($privkey, $pubkey,TRUE);

//原文
$data = '你妈妈让你回家吃饭了';

//私钥加密示例
$encode = $Rsa->priv_encode($data);
p($encode);
$ret = $Rsa->pub_decode($encode);
p($ret);

//公钥加密示例
$encode = $Rsa->pub_encode($data);

p($encode);
$ret = $Rsa->priv_decode($encode);
p($ret);

function p($str){
echo '<pre>';
print_r($str);
echo '</pre>';
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: