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协议。
赞赏一下