php rsa加密 python,rsa加密解密类库附示例-php&python版

这篇博客介绍了如何在PHP和Python中实现RSA加密。首先展示了PHP的RSA助手类,包括生成密钥对、初始化、加密和解密的方法。接着提供了Python版的RSA加密辅助类,同样实现了私钥加密和公钥解密等功能。这些类库可以帮助开发者在不同场景下进行安全的数据传输。
摘要由CSDN通过智能技术生成

早期造个对象,写了个php的rsa帮助类库,先看使用方法

$keys = RsaHelper::new_rsa_key();

//生成完key之后应该记录下key值,这里省略

$privkey = $keys['privkey'];

$pubkey = $keys['pubkey'];

/* $privkey = '-----BEGIN PRIVATE KEY-----

MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKX0cHYmXyHhIx5/

k6GMneVKpUDsqP2PdKFGollWYCbxJUAHPsHsjILGI0ucGnC+VpfKVX6DEagoRBZv

tz+nnpcreVPtNbKMNzhukSY3Mt7Fo1rMaj0pbsaMom1noQjsKJlVgz6akP7RMm4W

zpnMvcDq/9PucfCQP1FGZTbg1hUxAgMBAAECgYBeGam/ROjChC9utrZWby6E+nuT

wd3c0QA4Bp49+/1Pd4NAuBr8yQ2vhXwz/lL7xOHC9ibeMqHLcPGSq0wEGx6P/XWM

0Ldpwu6cWv4qOdHdBDdqrO6mkyBljt4sq1WtTnkLgZ0cCTTeVnnFDmlc9Zr9oT5k

UezOEb55GziRD5XUxQJBANLx3kUjOFRyR1I/wZYHHJkcm8pSgpDe4b1G60orZa9J

nbUTM+cIvmNKzm99m9aIMvgjk/LBydpxV7W5YYDxHrcCQQDJZpcu5OPWNJ3TdrrK

KNa1lfUo5Vb0sCgpTueZdwngBr043XRTyJHqjziX/9Z19UWrE9Gz6U1Klpa7SBYo

O4NXAkEArsKRCahXJ6cRrXOClx/HMpY//0uCPjFYxa32ipkPgjwz+uswycw1px83

jah7ri1iRK99B9ZCu8XBC53MyL16WwJAISu+dsDILb2YyP1jImy7gEjkignL2p0w

4CzYxFPw0m8Jt1XyFOKR9doE7jP69I6jHNw0y7b/Peuzg8EJtTKoHQJBAITAjM7Q

QnIEgYHvw3gaQI8/6992Y0DSMaHt50peI6uJoMV+X9IcjY1eFUSOHV8nb0uI8xQ7

4SbU2yvLPTqUk50=

-----END PRIVATE KEY-----';

$pubkey = '-----BEGIN PUBLIC KEY-----

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCl9HB2Jl8h4SMef5OhjJ3lSqVA

7Kj9j3ShRqJZVmAm8SVABz7B7IyCxiNLnBpwvlaXylV+gxGoKEQWb7c/p56XK3lT

7TWyjDc4bpEmNzLexaNazGo9KW7GjKJtZ6EI7CiZVYM+mpD+0TJuFs6ZzL3A6v/T

7nHwkD9RRmU24NYVMQIDAQAB

-----END PUBLIC KEY-----'; */

//初始化rsaobject

RsaHelper::init($privkey, $pubkey);

//原文

$data = 'hello';

//私钥加密示例

$encode = RsaHelper::priv_encode($data);

$ret = RsaHelper::pub_decode($encode);

var_dump($ret);

//公钥加密示例

$encode = RsaHelper::pub_encode($data);

$ret = RsaHelper::priv_decode($encode);

var_dump($ret);

类库源码如下

class RsaHelper{

private static $_privkey = '';

private static $_pubkey = '';

private static $_isbase64 = false;

/**

* 初始化key值

* @param string $privkey 私钥

* @param string $pubkey 公钥

* @param boolean $isbase64 是否base64编码

* @return null

*/

public static function init($privkey, $pubkey, $isbase64=false){

self::$_privkey = $privkey;

self::$_pubkey = $pubkey;

self::$_isbase64 = $isbase64;

}

/**

* 私钥加密

* @param string $data 原文

* @return string 密文

*/

public static 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 static 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 static 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 static 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 static 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

);

}

}

妈蛋,win平台下的php protobuf折腾死我了,又改成py了,所以,python版的rsa加密辅助类来了

def new_keys():

(bob_pub, bob_priv) = rsa.newkeys(1024)

return {'pubkey':bob_pub.save_pkcs1(), 'privkey':bob_priv.save_pkcs1()}

class RsaHelper:

def __init__(self, privkey, pubkey):

self._privkey = privkey.decode('string-escape')

self._pubkey = pubkey.decode('string-escape')

def encode_priv(self, data):

privkey = rsa.PrivateKey.load_pkcs1(self._privkey)

crypto = rsa.encrypt(data, privkey)

return crypto

def decode_pub(self, data):

pubkey = rsa.PublicKey.load_pkcs1(self._pubkey)

msg = rsa.decrypt(data, pubkey)

return msg

def decode_priv(self, data):

privkey = rsa.PrivateKey.load_pkcs1(self._privkey)

msg = rsa.decrypt(data, privkey)

return msg

def encode_pub(self, data):

pubkey = rsa.PublicKey.load_pkcs1(self._pubkey)

crypto = rsa.encrypt(data, pubkey)

return crypto

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值