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

php rsa 非对称加密

2016-01-09 23:05 633 查看

php rsa 加密 相关 api

openssl_pkey_get_private

// 用来判断私钥是否可用,可用则返回 Resource id

resource openssl_pkey_get_private(mixed key[,stringpassphrase = “”])

openssl_pkey_get_public

// 用来判断公钥是否可用,可用则返回 Resource id

resource openssl_pkey_get_public(mixed $certificate)

参数问题

其中参数 $key $certificate 有一种传递形式:容易出错
file://path/to/file.pem


// return false
// 'file:///' 多了一个 '/'
openssl_pkey_get_private('file:///E:/SAFARI_SHI/tmp/key/rsa_private_key.pem');
// 应该是两个 '//'
// resource(4) of type (OpenSSL key)
$privateKey = openssl_pkey_get_private('file://E:/SAFARI_SHI/tmp/key/rsa_private_key.pem');
// resource(4) of type (OpenSSL key)
openssl_pkey_get_private('file://E:/SAFARI_SHI/tmp/key/private_key.pem');
// --------------------------------------------------------
// return false
// 这种形式亦是错误的
openssl_pkey_get_public('key/rsa_public_key.pem');
// return false
openssl_pkey_get_public('file:///E:/SAFARI_SHI/tmp/key/rsa_public_key.pem');
// resource(5) of type (OpenSSL key)
openssl_pkey_get_public('file://E:/SAFARI_SHI/tmp/key/rsa_public_key.pem');


ps

关于私钥的话,会有两个 rsa_private_key.pem private_key.pem
我试了下,两个都可以使用


code demo

<?php

/**
* php rsa demo
* rsa 非对称加密
* 公钥、私钥对
* 私钥加密的内容能通过公钥解密(反过来亦可以)
*
* 2016-01-09 21:58:48
*/

// 这个函数可用来判断私钥是否可用,可用返回 Resource id
$privateKey = openssl_pkey_get_private('file://E:/SAFARI_SHI/tmp/key/rsa_private_key.pem');

// 这个函数可用来判断公钥是否可用,可用返回 Resource id
$publicKey = openssl_pkey_get_public('file://E:/SAFARI_SHI/tmp/key/rsa_public_key.pem');

print_r($privateKey);
echo "\n";
print_r($publicKey);
echo "\n";

// 原始数据
$data = 'aa11-22-334';
$encrypted = '';
$decrypted = '';

echo "---------------------------------------\n";
var_dump('原始数据', $data);
echo "---------------------------------------\n";
var_dump('私钥加密');
// 私钥加密
openssl_private_encrypt($data, $encrypted, $privateKey);
// 加密后的内容通常含有特殊字符,需要编码转换下
// 在网络间通过url传输时要注意base64编码是否是url安全的
$encrypted = base64_encode($encrypted);

var_dump($encrypted);

var_dump('公钥解密');
// 私钥加密的内容可通过公钥解密出来
openssl_public_decrypt(base64_decode($encrypted), $decrypted, $publicKey);

var_dump($decrypted);

echo "---------------------------------------\n";
var_dump('公钥加密');
// 公钥加密
openssl_public_encrypt($data, $encrypted, $publicKey);
$encrypted = base64_encode($encrypted);

var_dump($encrypted);

var_dump('私钥解密');
// 私钥解密
openssl_private_decrypt(base64_decode($encrypted),$decrypted,$privateKey);

var_dump($decrypted);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php rsa 加密