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协议。
赞赏一下
支付宝打赏
微信打赏