• 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 ,谢谢谢该博主!

  • 相关阅读:
    Linux定时任务调度
    Linux组管理和权限管理
    Linux压缩和解压缩类指令
    leetcode:Compare Version Numbers
    leetcode:Valid Palindrome
    Majority Element
    Min Stack
    leetcode:Intersection of Two Linked Lists(两个链表的交叉点)
    leetcode:Factorial Trailing Zeroes
    leetcode:Rotate Array
  • 原文地址:https://www.cnblogs.com/chrdai/p/8566463.html
Copyright © 2020-2023  润新知