php基于openssl的rsa加密解密示例

5年以前  |  阅读数:800 次  |  编程语言:PHP 

本文实例讲述了php基于openssl的rsa加密解密。分享给大家供大家参考,具体如下:


    <?php
    $config = array(
    //"config" =>"D:/phpserver/Lighttpd/openssl.cnf",
    //'config' =>'D:/phpStudy/Lighttpd/OpenSSL.cnf',
    'private_key_bits' => 1024,  // Size of Key.
    'private_key_type' => OPENSSL_KEYTYPE_RSA
    );
    //$res = openssl_pkey_new();
    $res = openssl_pkey_new($config);
    // Get private key
    // openssl_pkey_export($res, $privkey, "PassPhrase number 1" );
    openssl_pkey_export($res, $privkey);
    var_dump($privkey);
    // Get public key
    $pubkey=openssl_pkey_get_details($res);
    // echo "------------><br />";
    // print_r($pubkey["rsa"]);
    // $bin_str=$pubkey["rsa"]["n"];
    // print_r($bin_str);
    // echo "<br />";
    // //echo $bin_hex_str = pack("H*" , bin2hex($bin_str));
    // echo $bin_hex_str = bin2hex($bin_str);
    // echo "<br />------------<<br />";
     $pubkey=$pubkey["key"];
    // var_dump($privkey);
    // var_dump($pubkey);
    echo $privkey."<br /><br />";
    echo $pubkey."<br /><br />";
    ?>


    <?php
    $private_key = '-----BEGIN RSA PRIVATE KEY-----
    MIICXQIBAAKBgQDNSQ4AmPZE01MpEO9dabRDsS0XwxKekEFUoWJneFG+NA6P52Js
    ISw79QYNfQwM7akIaPpzU0+kkWjTSXiDqFUv5y2vaA3W2Tre5N51uCwUK6/LfzHX
    Bg0d+Bnlzy6Kb6bpgPgvbhAkNbvjbCS0V9h4v3WUTLR9QauJ05Q8qe70sQIDAQAB
    AoGAb/9aZ1MMkNImfbIilXk1AvVn353qy51yNyTxFfhbyISIKVSYqtuSUYfFbJh7
    eZYz8UWs1jxuqB847IUZ/eJZzpVev480Tv9YejN0DhJ4Yw6y/kpJWo/9kEcET6Tk
    vatXh+wgmieszkxe0kUvk41GPV7a4GWWQj6P4vjx+qktaNECQQDuo7ENW10dZXLG
    YNKqUhgkdi9NPjRlHCgZ4RW0uoRqUsggqNVkaqpY8BaJOkkXWiQ0aVTPBiwo8k0+
    S50rGNYNAkEA3DgxY9OwRc65VqS/UxV28pyLe2gy0XSVwA97SVNvYJJ58iNGEvYs
    vEZ3GrTNAZpbPKcruCS6NiDK761Ot5A0NQJAOsRO1pY4QQP5lsbDOjRLQ7djAKef
    6YJckbrvSHliIHjQVdKd8kOePZaqRhL3auvE3K9Ptkez2kWJJh0i0DkmhQJBAMCm
    F+7wnWA0PEbj0MvqFyiechb/TJWXm/lskbnP17tv6GY/HWoxGWmLa15dlIo2cmJZ
    DBIHby8y+NU7k4VaDZECQQCO018O5TJWl+O+bWyzV1eR603YP+JVjiSKUPtuyzVS
    NIz+ClwspGmdUwPWlLqr5JfKm+OfpaLIepfJinsCgwpP
    -----END RSA PRIVATE KEY-----';
    //$private_key ='-----BEGIN RSA PRIVATE KEY-----
    //MIICXAIBAAKBgQDVFOcE2nEBi+4FYvS36j1ShHHvusR0dXXe9NzAA/biH6NODywH
    //cQo2Lyco6oSvY+cSsPewjjyatRCtq/Ri6c/am64CJu+HM1lZH1Gh05C2KVJ2dveX
    //gcdsz+/XPHDxYKAq/hW9S1NeYr2x4eJdpYNYucLn8XWgeLRnlJUnBl/saQIDAQAB
    //AoGAK2oz28hKKB+DorNT2zktv2de85JhPr1EA+ZuJ+1m2xHJKzlqJiYBB6M53ltS
    //J446YZOPE/kXHgpwWIJlq9Wp1KiZPEfoRWzz1wmuj8koq95vcxBeuyjX4ez4Dio6
    //Vmr9BABFuoAh0GAq8kTJOz0DURCEcwv+iI7ILaNoRjPFWuUCQQDveqRLE2/N8NIy
    //P7YVnniAiaSL/e+XYQXCMIDsdEdqZNRjhjfDoBqpV/tGjnuAn9zBVHNNLbLni5nf
    //2nqgrh5jAkEA48gQmBO9koOnvO//Q581JSBKfga4i7DetQ80OD4kYt6fwezkaeHX
    //k64sjmpfD/Ys2heKFhyNDO/k0NsUxGlNwwJBAKPx7/u9qLLyBNSFrWALhy9oC5AT
    //Hi0iLNEOZ5R43lNGB+jCf/aa6uW357wb2wzpZDWuXOkfOfUuKv+HEKBj00UCQCxd
    //woWsiqcoB5rwcBrevr49fOTxMC7dQ3Omw3gU+odbb2iZWKAbAh9ctIcExwFX5MKS
    //BS5rXzne3AWmNnRPQnsCQDdOCBxkF5YctHqlmEETfKodVZG69COZGykdlenOxK6g
    //qNNAT2y2mxInYGlPIJ+TfxxFIqesHdph4s/lw6T2ISY=
    //-----END RSA PRIVATE KEY-----';
    $public_key = '-----BEGIN PUBLIC KEY-----
    MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNSQ4AmPZE01MpEO9dabRDsS0X
    wxKekEFUoWJneFG+NA6P52JsISw79QYNfQwM7akIaPpzU0+kkWjTSXiDqFUv5y2v
    aA3W2Tre5N51uCwUK6/LfzHXBg0d+Bnlzy6Kb6bpgPgvbhAkNbvjbCS0V9h4v3WU
    TLR9QauJ05Q8qe70sQIDAQAB
    -----END PUBLIC KEY-----';
    //$private_key=$privkey;
    //$public_key=$pubkey;
    $fp=fopen("private_key","w");
    fwrite($fp,$private_key);
    fclose($fp);
    $fp=fopen("public_key","w");
    fwrite($fp,$public_key);
    fclose($fp);
    //echo $private_key;
    $pi_key = openssl_pkey_get_private($private_key);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id
    $pu_key = openssl_pkey_get_public($public_key);//这个函数可用来判断公钥是否是可用的
    print_r($pi_key);echo "\n";
    print_r($pu_key);echo "\n";
    echo "<br />----------------------<br />";
    $data = "woshizhu";//原始数据
    $encrypted = ""; 
    $decrypted = "";
    echo "source data:",$data,"<br />";
    echo "private key encrypt:\n";
    openssl_private_encrypt($data,$encrypted,$pi_key);//私钥加密
    $encrypted = base64_encode($encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的
    echo "<br />----------私钥加密------------<br />";
    echo $encrypted,"<br />";
    echo "<br />----------私钥加密------------<br />";
    echo "public key decrypt:\n";
    $decrypted="";
    openssl_public_decrypt(base64_decode($encrypted),$decrypted,$pu_key);//私钥加密的内容通过公钥可用解密出来
    echo $decrypted,"\n";
    echo "---------------------------------------\n";
    echo "public key encrypt:\n";
    openssl_public_encrypt($data,$encrypted,$pu_key);//公钥加密
    $encrypted = base64_encode($encrypted);
    echo $encrypted,"\n";
    $decrypted="";
    //$encrypted="JBeapcp9iWWYJYElgqtrZxfxM4wVkCaSn/oJZ7NjfR23o76fdbxEXpf+PGWACw3PeTdObwL4108wR3ihKmy2iYkIExGjBYyvx2w9aHies8ZsOIP3LjiMHYTm93Rr8Sc5XxHWQc3Dhbq16JWHYZ2d+RrOpHd4x84GF3JXwivrGO4=";
    echo "private key decrypt:\n";
    openssl_private_decrypt(base64_decode($encrypted),$decrypted,$pi_key);//私钥解密
    echo "--->:".$decrypted,"\n";
    ?>

PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:

密码安全性在线检测:
http://tools.jb51.net/password/my_password_safe

高强度密码生成器:
http://tools.jb51.net/password/CreateStrongPassword

MD5在线加密工具:
http://tools.jb51.net/password/CreateMD5Password

迅雷、快车、旋风URL加密/解密工具:
http://tools.jb51.net/password/urlrethunder

在线散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt

更多关于PHP相关内容可查看本站专题:《php加密方法总结》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php操作office文档技巧总结(包括word,excel,access,ppt)》、《php日期与时间用法总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例