JavaScript 实现 URL 加密解密

1.base64

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8" />

<meta http-equiv="X-UA-Compatible" content="IE=edge" />

<meta name="viewport" content="width=device-width, initial-scale=1.0" />

<title>Document</title>

</head>

<body></body>

        <script>

                //base64 密码加密方式

                var pass = "123456";

                var encryptPass = window.btoa(pass);

                console.log(encryptPass); // MTIzNDU2

                //base密码解密方式

                var decryptPass = window.atob(encryptPass);

                console.log(decryptPass); //123456

        </script>

</html>

2.MD5

<!DOCTYPE html>

   <html lang="en">

   <script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.js"></script>

   <script type="text/javascript">

        var str_encode = md5('12345');

        console.log(str_encode); // 827ccb0eea8a706c4c34a16891f84e7b

   </script>

</html>

3.SHA1

 <!DOCTYPE html>

        <script src="https://cdn.bootcss.com/crypto-js/3.1.9-1/crypto-js.js"></script>

        <script>

                var str_encode = CryptoJS.SHA1('12345').toString(); // 注意:1是数字1

                console.log(str_encode); // 8cb2237d0679ca88db6464eac60da96345513964

        </script>

</html>

4.HMAC

<!DOCTYPE html>

        <script src="https://cdn.bootcss.com/crypto-js/3.1.9-1/crypto-js.js"></script>

        <script>

                var key = 'key';

                var str1 = '12345';

                var hash = CryptoJS.HmacSHA256(key, str1);

                var str_encode = CryptoJS.enc.Hex.stringify(hash);

                console.log(str_encode);

                // fc9961089ceb0bc0f7669039eeaeeb2c88542203f2d0f3d4a540206f9c6d660d

        </script>

</html>

5.AES

<html>

        <script src="https://cdn.bootcss.com/crypto-js/3.1.9-1/crypto-js.js"></script>

        <script type="text/javascript">

                var aseKey = "12345678" // 定制秘钥,长度必须为:8/16/32位, 长度不一致也没问题

                var message = "12345"; // 需要加密的内容

                // 加密 DES/AES切换只需要修改 CryptoJS.AES <=> CryptoJS.DES

                var encrypt = CryptoJS.AES.encrypt(message, CryptoJS.enc.Utf8.parse(aseKey), // 参数1=密钥, 参数2=加密内容

                {

                mode: CryptoJS.mode.ECB, // 为DES的工作方式

                padding: CryptoJS.pad.Pkcs7 // 当加密后密文长度达不到指定整数倍(8个字节、16个字节)则填充对应字符

                }).toString(); // toString=转字符串类型

                console.log(encrypt); // trkIXb0fyvVoLh0pLyVb/Q==

                //解密

                var decrypt = CryptoJS.AES.decrypt(encrypt, CryptoJS.enc.Utf8.parse(aseKey), // 参数1=密钥, 参数2=解密内容

                {

                mode: CryptoJS.mode.ECB,

                padding: CryptoJS.pad.Pkcs7

                }).toString(CryptoJS.enc.Utf8); // toString=转字符串类型,并指定编码

                console.log(decrypt);  // "12345"

        </script>

</html>

6.DES

<html>

        <!-- 对称加密特征,加密和解密需要相同的密钥DES,AES-->

        <script src="https://cdn.bootcss.com/crypto-js/3.1.9-1/crypto-js.js"></script>

        <script type="text/javascript">

                var aseKey = "12345678"; // 定制秘钥,长度必须为:8/16/32位, 长度不一致也没问题

                var message = "12345"; // 需要加密的内容

                // 加密 DES/AES切换只需要修改 CryptoJS.AES <=> CryptoJS.DES

                var encrypt = CryptoJS.DES.encrypt(

                message,

                CryptoJS.enc.Utf8.parse(aseKey), // 参数1=密钥, 参数2=加密内容

                {

                mode: CryptoJS.mode.ECB, // 为DES的工作方式

                padding: CryptoJS.pad.Pkcs7, // 当加密后密文长度达不到指定整数倍(8个字节、16个字节)则填充对应字符

                }).toString(); // toString=转字符串类型

                console.log(encrypt); //AGgKdx/Qic8=

                //解密

                var decrypt = CryptoJS.DES.decrypt(

                encrypt,

                CryptoJS.enc.Utf8.parse(aseKey), // 参数1=密钥, 参数2=解密内容

                {

                mode: CryptoJS.mode.ECB,

                padding: CryptoJS.pad.Pkcs7,

                }).toString(CryptoJS.enc.Utf8); // toString=转字符串类型,并指定编码

                // alert(decrypt); // 控制台打印 "i am xiaozhou ?"

                console.log(decrypt); // 12345

        </script>

</html>

7.PSA

<html>

        <!-- 公私匙可以在线生成:http://web.chacuo.net/netrsakeypair -->

        <!-- 非对称加密特征,加密使用公钥和解密使用私钥,公钥(可以公开暴露出来,只能加密)和私钥(必须隐藏)成对出现,公钥和私钥有着某种联系 RSA -->

        <script src="https://cdn.bootcss.com/jsencrypt/3.0.0-beta.1/jsencrypt.js"></script>

        <script type="text/javascript">

                // 公钥 私匙是通过公匙计算生成的,不能盲目设置

var PUBLIC_KEY =

"-----BEGIN PUBLIC K        EY-----MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALyBJ6kZ/VFJYTV3vOC07jqWIqgyvHulv6us/8wzlSBqQ2+eOTX7s5zKfXY40yZWDoCaIGk+tP/sc0D6dQzjaxECAwEAAQ==-----END PUBLIC KEY-----";

                //私钥

var PRIVATE_KEY =

"-----BEGIN PRIVATE KEY-----MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEAvIEnqRn9UUlhNXe84LTuOpYiqDK8e6W/q6z/zDOVIGpDb545NfuznMp9djjTJlYOgJogaT60/+xzQPp1DONrEQIDAQABAkEAu7DFsqQEDDnKJpiwYfUE9ySiIWNTNLJWZDN/Bu2dYIV4DO2A5aHZfMe48rga5BkoWq2LALlY3tqsOFTe3M6yoQIhAOSfSAU3H6jIOnlEiZabUrVGqiFLCb5Ut3Jz9NN+5p59AiEA0xQDMrxWBBJ9BYq6RRY4pXwa/MthX/8Hy+3GnvNw/yUCIG/3Ee578KVYakq5pih8KSVeVjO37C2qj60d3Ok3XPqBAiEAqGPvxTsAuBDz0kcBIPqASGzArumljkrLsoHHkakOfU0CIDuhxKQwHlXFDO79ppYAPcVO3bph672qGD84YUaHF+pQ-----END PRIVATE KEY-----";

                //使用公钥加密

                var encrypt = new JSEncrypt(); //实例化加密对象

                encrypt.setPublicKey(PUBLIC_KEY); //设置公钥

                var message = "hello xiaozhou!"; // 需要加密的数据

                var encrypted = encrypt.encrypt(message); //对指定数据进行加密

                console.log(encrypted);

//X7IjC/6SOU/mgXiYtnXUHk1n297koejuPCRMWMV4+jJXKi/r+L4RQ2Dsf+ZmpgZY2SAEJiCbyLEyAqJQ4r70fA==

                //使用私钥解密

                var decrypt = new JSEncrypt(); // 创建解密对象

                decrypt.setPrivateKey(PRIVATE_KEY); //设置私钥

                var uncrypted = decrypt.decrypt(encrypted); 

                console.log(uncrypted); //解密 '12345'

        </script>

        <!-- 总结:可根据setPublicKey,setPrivateKey 确定是否为非对称RSA加密 -->

</html>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值