美文网首页
js--数据的加密传输,对称加密和非对称加密

js--数据的加密传输,对称加密和非对称加密

作者: 花拾superzay | 来源:发表于2019-11-16 10:15 被阅读0次

    对称加密

    在对称加密算法中,加密使用的密钥和解密使用的密钥是相同的。也就是说,加密和解密都是使用的同一个密钥。

    对称加密的缺点
    1、密钥的数目难于管理。因为对于每一个合作者都需要使用不同的密钥,很难适应开放社会中大量的信息交流;

    2、对称加密算法一般不能提供信息完整性的鉴别。它无法验证发送者和接受者的身份;

    3、对称密钥的管理和分发工作是一件具有潜在危险的和烦琐的过程。对称加密是基于共同保守秘密来实现的,采用对称加密技术的贸易双方必须保证采用的是相同的密钥,保证彼此密钥的交换途径必须是安全可靠的,同时还要设定防止密钥泄密和更改密钥的程序。

    常用算法:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES

    非对称加密

    指加密和解密使用不同密钥的加密算法。非对称加密算法需要两个密钥:公钥(publickey)和私钥(privatekey)。

    公钥与私钥是一对存在,如果用公钥对数据进行加密,只有用对应的私钥才能解密;如果用密钥对数据进行加密,那么只有用对应的公钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

    非对称加密的缺点

    1、算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。

    2、就是由于像RSA这种非对称加密算法相对于对称加密算来说效率较低,通常RSA算法用来加密小数据,如对称加密使用的密钥等。

    常用算法:RSA、ECC(椭圆曲线加密算法)、Diffie-Hellman、El Gamal、DSA(数字签名用)

    前端向服务器传递加密数据

    前端向服务器传递加密数据比较容易,对于原文数据,直接使用服务器的非对称加密公钥对数据进行加密,然后使用ajax把密文提交即可。

    服务器向前端传递加密数据

    前端可以先生成一个随机对称密钥A,然后用服务器的非对称加密公钥对密钥A进行加密,然后密文提交服务器。服务器使用私钥解析出密钥A,然后用A对待返回数据加密,之后返回。前端则使用密钥A对数据解析,拿到原文,实现思路基本如此。

    非对称加密的使用

    <!--引入jsrsasign库-->
    <script src="https://cdn.bootcss.com/jsrsasign/8.0.12/jsrsasign-all-min.js"></script>
    
    <script type="text/javascript">
        //公钥pubK,密钥对一般用工具生成
        let pubK = '-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqKe4qcEmS+pZECaYTi8Zu+La0JZXCO9yJX6GvqX/gAQgq/8NYiqY0LLM5jlYOomj2mSEovp/kbe5OSnQyfaewbbww0RhyV1muTMQ6GLFskTHfSe3dbRmom3Wa3VC8YmQ4fedSWI2RkneLgBl5NXKJuIfL1ErBvmf9r8Y8oT1R/QIDAQAB-----END PUBLIC KEY-----'; 
        //私钥priK
        let priK = '-----BEGIN PRIVATE KEY-----MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKop7ipwSZL6lkQJphOLxm74trQllcI73Ilfoa+pf+ABCCr/w1iKpjQsszmOVg6iaPaZISi+n+Rt7k5KdDJ9p7BtvDDRGHJXWa5MxDoYsWyRMd9J7d1tGaibdZrdULxiZDh951JYjZGSd4uAGXk1com4h8vUSsG+Z/2vxjyhPVH9AgMBAAECgYEAobWxUYFeWiBr9wKYYlDd5g3US0TAmlKbFa3dEPvquy0f3wUqVpWEt2aXeCYNIGE1kMwbWAY4GzRhWOOmo2kIlrP/UXSMYN0McDcUIKS63TxMzrlJMGDATKnLecm25RriRmRk8RMNqfftbiwUI67hYaN4jl0FddbeIbrgNUWYyt0CQQDXQmgGylWQ47ocvU3Q3u/x5dvmVaQHd2fPOrid4O6pWS+HpKEIjxQvAIP9YTpCphNSD2mSu/lzKre1pNWRsDL/AkEAyl6VfSZBmTyjJyrvc0Rfto65mDdje9GoHMO6oYZK2CpfICX0cpzs2Q/bmejJX9fiF+tuOSPu3Ed16JAYWfhHAwJAdtdsw0L11pZDbBZ/Xa+XXT+AFjx14MFliJ1sy40hdlGM0iBr32POytxIAp2pIp65z/Y+XQp2f8S3xAsK9fIHVQJAV76rEpiD2O1x0InNSS1cUsuPrXBWslk1i0NSqLaRvSiiFk5er1NbXsKBdTp6FhSE89og8KWj698QQMY5yMjeAQJADefUHbEFgM1rZAbc3hOVMWTRgjpYucRXBYTK8iPn4XKn9k6DboAOX39qDCRipsylvA1VSvjqe5LLnXXSCHVNvQ==-----END PRIVATE KEY-----'; 
        //原文        
        let src = '你好世界';
    
        // 使用公钥加密,得到密文enc
        var pub = KEYUTIL.getKey(pubK);
        var enc = KJUR.crypto.Cipher.encrypt(src, pub);
    
        // 使用私钥解密enc        
        var prv = KEYUTIL.getKey(priK);
        var dec = KJUR.crypto.Cipher.decrypt(enc, prv);
        console.log(dec);//你好世界
    </script>
    

    对称加密的使用

    <!--引入crypto-js库-->
    <script src="https://cdn.bootcss.com/crypto-js/3.1.9-1/crypto-js.js"></script>
    <script type="text/javascript">
        
        //密钥,十六位十六进制数
        const key = CryptoJS.enc.Utf8.parse("1234123412ABCDEF");
        //密钥偏移量,十六位十六进制数
        const iv = CryptoJS.enc.Utf8.parse('ABCDEF1234123412');
    
        //解密方法
        function decrypt(str, key, iv) {
            let encryptedHexStr = CryptoJS.enc.Hex.parse(str);
            let srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
            let decrypt = CryptoJS.AES.decrypt(srcs, key, {
                iv: iv,
                mode: CryptoJS.mode.CBC,
                padding: CryptoJS.pad.Pkcs7
            });
            let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
            return decryptedStr.toString();
        }
    
        //加密方法
        function encrypt(str, key, iv) {
            let srcs = CryptoJS.enc.Utf8.parse(str);
            let encrypted = CryptoJS.AES.encrypt(srcs, key, {
                iv: iv,
                mode: CryptoJS.mode.CBC,
                padding: CryptoJS.pad.Pkcs7
            });
            return encrypted.ciphertext.toString().toUpperCase();
        }
        
    </script>
    

    相关文章

      网友评论

          本文标题:js--数据的加密传输,对称加密和非对称加密

          本文链接:https://www.haomeiwen.com/subject/zdzeictx.html