js加密php解密---jsencrypt


原理:javascript加密PHP解密; 完全依賴openssl;

一. openssl 是干嘛的
它集成了眾多密碼算法及實用工具

rsa加密流程;(今天只講眾多加密方式中的一種)
1. 在當前文件夾下生成一個包含 "公鑰"和"私鑰" 兩部分內容的文本文件; 命名test.key
[root@iZ28pw7sv4qZ openssl]#openssl genrsa -out test.key 1024

2.將這個文本文件中的“公鑰”提取出來: 命名test_pub.key
[root@iZ28pw7sv4qZ openssl]#openssl rsa -in test.key -pubout -out test_pub.key

3.創建一個hello.txt的文本文件,然后利用此前生成的公鑰加密文件;
[root@iZ28pw7sv4qZ openssl]#echo "1234561122" > ./hello.txt
[root@iZ28pw7sv4qZ openssl]#openssl rsautl -encrypt -in hello.txt -inkey test_pub.key -pubin -out hello.en.txt

4.解密文件
[root@iZ28pw7sv4qZ openssl]#openssl rsautl -decrypt -in hello.en.txt -inkey test.key -out hello.de.txt

5.解析后的結果
[root@iZ28pw7sv4qZ openssl]# cat hello.de.txt

二. jsencrypt.js這個文件定義了一個JSEncrypt方法 可以去git搜一下 對於此篇文檔就不展開太多
使用步驟
var res = new JSEncrypt
res.setPublicKey('---這里就填寫test_pub.key文件中的字符串內容---'); //設置公有key
var temp = res.encrypt("填寫需要加密的內容");//利用剛設好的key 對明文進行加密;
var data = encodeURI(temp).replace(/\+/g, '%2B'), //+號的處理: 加密完成后就可以ajax傳送了

前端頁面代碼:

<!DOCTYPE html> 
<html>
<head> // 引入 jquery 和 jsencrypt.js <script src="./jquery.min.js"></script>
    <script src="./jsencrypt.js"></script>
    
    <script type="text/javascript"> $(function () { var encrypt = new JSEncrypt(); encrypt.setPublicKey('MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC0Llg1bVZhnyslfezwfeOkvnXWq59bDtmQyHvxkP/38Fw8QQXBfROCgzGc+Te6pOPl6Ye+vQ1rAnisBaP3rMk40i3OpallzVkuwRKydek3V9ufPpZEEH4eBgInMSDiMsggTWxcI/Lvag6eHjkSc67RTrj96oxj0ipVRqjxW4X6HQIDAQAB');//設置公有key
            var data = encrypt.encrypt("需要機密的內容"); console.log(data); $("#btn").click(function () { $.ajax({ url: '/openssl/index.php', data: "password=" + encodeURI(data).replace(/\+/g, '%2B'), //+號的處理:因為數據在網絡上傳輸時,非字母數字字符都將被替換成百分號(%)后跟兩位十六進制數,而base64編碼在傳輸到后端的時候,+會變成空格,因此先替換掉。后端再替換回來
 type: 'post', success: function (msg) { alert(msg); } }); }); }); </script>
</head>
<body>
    <div class="main">
        <input type="button" id="btn" value="點我" />
        <hr/> 注意+好的處理 </div>
</body>
</html>

 

后台代碼:

<?php class Index{ public function index { if(isset($_POST['password'])) { $txt = $this->decodeing($_POST['password']); die('解密字符串:'.$txt); } } /** * 公鑰加密 * * @param string 明文 * @return string 密文(base64編碼) */  
    public function encodeing($sourcestr) { $key_content = file_get_contents('./_test_public.key'); $pubkeyid    = openssl_get_publickey($key_content); if (openssl_public_encrypt($sourcestr, $crypttext, $pubkeyid)) { return base64_encode("".$crypttext); } } /** * 私鑰解密 * * @param string 密文(二進制格式且base64編碼) * @param string 密文是否來源於JS的RSA加密 * @return string 明文 */  
    public function decodeing($crypttext) { $key_content = file_get_contents('./_test.key'); $prikeyid    = openssl_get_privatekey($key_content); $crypttext   = base64_decode($crypttext); if (openssl_private_decrypt($crypttext, $sourcestr, $prikeyid, OPENSSL_PKCS1_PADDING)) { return "".$sourcestr; } return ; } }


下載地址: http://files.cnblogs.com/files/sixiong/openssl.zip

源自:https://www.cnblogs.com/sixiong/p/5885111.html ,謝謝謝該博主!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM