php实现RSA加密

Posted by 甘家城 on 2017-07-14 Viewed times

RSA加密具体细节这里就不说了可以自行搜索。这里做php实现的例子。

思路:在服务器端php先产生一个公钥给js用于加密,同时产生一个私钥用于解密并保存在session中,js获取用户输入并用公钥加密,然后将加密的字符串提交到后端,后端php用私钥解密后得到实际用户输入。

这里主要安全的一点就是信息传输过程中始终是加密后的字符串,即使被抓包也无法得到实际用户输入。

首先下载用于rsa加密的一些文件,点击这里下载

将这个文件夹与下面的php文件放在服务器中的同目录。

下面编写文件file1.php

<?php
//产生公钥与私钥
@session_start();
set_include_path('rsa/classes/phpseclib/');
include_once('Crypt/RSA.php');
$rsa = new Crypt_RSA();
$rsa->setPrivateKeyFormat(CRYPT_RSA_PRIVATE_FORMAT_PKCS1);
$rsa->setPublicKeyFormat(CRYPT_RSA_PUBLIC_FORMAT_RAW);
$key = $rsa->createKey(1024);
$privatekey = $key['privatekey'];
$_SESSION['privatekey'] = $privatekey;
$publickey = $key['publickey']['n']->toHex();
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>test</title>
</head>
<body>
    <input type="text" placeholder="要加密字符串" id="str">
    <button id="sub">submit</button>
    <div id="encrypted"></div>
    <div id="decrypted"></div>
    <script src="//cdn.bootcss.com/jquery/3.1.0/jquery.min.js"></script>
    <script type="text/javascript" src="rsa/jsbn/jsbn.js"></script>
    <script type="text/javascript" src="rsa/jsbn/prng4.js"></script>
    <script type="text/javascript" src="rsa/jsbn/rng.js"></script>
    <script type="text/javascript" src="rsa/jsbn/rsa.js"></script>
    <script type="text/javascript">
    //js获得公钥进行加密
    var publickey = "<?=$publickey?>";
    var rsakey = new RSAKey();
    rsakey.setPublic(publickey, "10001");
    $("#sub").click(function(){
        var enc = rsakey.encrypt($("#str").val());
        $('#encrypted').html("加密后\n"+enc);
        $.post('file2.php', {enc: enc}, function(data) {
            $('#decrypted').html("解密后\n"+data);
        });
    });
    </script>
</body>
</html>

下面是file2.php

<?php
//获取私钥与加密后字符串进行解密
@session_start();
set_include_path('rsa/classes/phpseclib/');
include_once('Crypt/RSA.php');
$encrypted = $_POST['enc'];
$rsa = new Crypt_RSA();
$encrypted=pack('H*', $encrypted);
$rsa->loadKey($_SESSION['privatekey']);
$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
$decrypted = $rsa->decrypt($encrypted);
echo $decrypted;

效果展示:

完成rsa加密咯,目前还算比较安全的一种加密,可以在一些比较重要的信息传递中使用。


版权声明:本文为原创文章,转载请注明出处和作者,不得用于商业用途,请遵守 CC BY-NC-SA 4.0协议。

支付宝打赏 微信打赏

赞赏一下