快速搭建电子商务网站,wordpress+插件+h5,网站 框架图,网站如何做支付宝接口js常见的加密方式 加密在前端开发和爬虫中是经常遇见的。掌握了加密算法且可以将加密的密文进行解密破解的#xff0c;也是你从一个编程小白到大神级别质的一个飞跃。且加密算法的熟练和剖析也是很有助于帮助我们实现高效的js逆向。下述只把我们常用的加密方法进行总结。不去深…js常见的加密方式 加密在前端开发和爬虫中是经常遇见的。掌握了加密算法且可以将加密的密文进行解密破解的也是你从一个编程小白到大神级别质的一个飞跃。且加密算法的熟练和剖析也是很有助于帮助我们实现高效的js逆向。下述只把我们常用的加密方法进行总结。不去深究加密的具体实现方式。 常见的加密算法基本分为这几类 线性散列算法签名算法MD5对称性加密算法 AES DES非对称性加密算法 RSA
Md5加密不可逆 MD5是一种被广泛使用的线性散列算法可以产生出一个128位16字节的散列值hash value用于确保信息传输完整的一致性。且MD5加密之后产生的是一个固定长度32位或16位的数据。 结论一旦看到了一个长度为32位的密文数据该数据极有可能是通过md5算法进行的加密 解密 常规讲MD5是不存在解密的。但是理论上MD5是可以进行反向暴力破解的。暴力破解的大致原理就是用很多不同的数据进行加密后跟已有的加密数据进行对比由此来寻找规律。理论上只要数据量足够庞大MD5是可以被破解的。但是要注意破解MD5是需要考虑破解的成本时间和机器性能。假设破解当前的MD5密码需要目前计算能力最优秀的计算机工作100年才能破解完成。那么当前的MD5密码就是安全的。 增加破解成本的方法方法很多这里只说我常用的。 使用一段无意义且随机的私匙进行MD5加密会生成一个加密串我们暂且称之为串1将要加密的的数据跟串1拼接再进行一次MD5这时会生成串2将串2再次进行MD5加密这时生成的串3就是我们加密后的数据。 我们在注册账号时的密码一般都是用的MD5加密。
htmlscript srchttps://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.js/scriptscript typetext/javascriptvar hashCode md5(i am bobo!); alert(hashCode)/script/html上述代码的核心关键字md5
DES/AES加密可逆
DES全称为Data Encryption Standard即数据加密标准是一种使用密钥加密的算法。该加密算法是一种对称加密方式其加密运算、解密运算需要使用的是同样的密钥一组字符串即可。注意 现在用AES这个标准来替代原先的DES。AES和DES的区别 加密后密文长度的不同: DES加密后密文长度是8的整数倍AES加密后密文长度是16的整数倍 应用场景的不同: 企业级开发使用DES足够安全如果要求高使用AES DES和AES切换只需要修改 CryptoJS.AES CryptoJS.DES 使用DES/AES进行数据交互时要求双方都拥有相同的私匙破解方法 暴力破解。DES如果使用 56 位的密钥则可能的密钥数量是 2 的 56 次方个。只要计算足够强大是可以被破解的 DES算法的入口参数有三个 Key、Data、Modepadding。 Key为7个字节共56位是DES算法的工作密钥Data为8个字节64位是要被加密或被解密的数据Mode为DES的工作方式。padding为填充模式如果加密后密文长度如果达不到指定整数倍8个字节、16个字节填充对应字符 padding的赋值固定为CryptoJS.pad.Pkcs7即可
htmlscript srchttps://cdn.bootcss.com/crypto-js/3.1.9-1/crypto-js.js/scriptscript typetext/javascriptvar aseKey 12345678 //定制秘钥长度必须为8/16/32...位var message i am bobo,who are you ?;//加密 DES/AES切换只需要修改 CryptoJS.AES CryptoJS.DESvar encrypt CryptoJS.DES.encrypt(message, CryptoJS.enc.Utf8.parse(aseKey), {mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}).toString();alert(encrypt); // 0Gh9NGnwOpgmB525QS0JhVJlsn5Ev9cHbABgypzhGnM//解密var decrypt CryptoJS.DES.decrypt(encrypt, CryptoJS.enc.Utf8.parse(aseKey), {mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8);alert(decrypt); // 我是一个密码/script/html上述代码的关键字 AESDESencrypt(用于加密的函数名)decrypt(用于解密的函数名)xxxkey秘钥一般是单独生成的一定不会傻到明文的写在代码中
RSA加密可逆
RSA加密 RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。 非对称加密算法 非对称加密算法需要两个密钥 公开密钥publickey:简称公钥私有密钥privatekey:简称私钥公钥与私钥是一对如果用公钥对数据进行加密只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥所以这种算法叫作非对称加密算法。 注意 使用时都是使用公匙加密使用私匙解密。公匙可以公开私匙自己保留。算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂而使得加密解密速度没有对称加密解密的速度快。 使用流程和场景介绍 通过公匙加密使用私匙解密。私匙是通过公匙计算生成的。假设ABC三方之间相互要进行加密通信。大家相互之间使用公匙进行信息加密信息读取时使用各自对应的私匙进行信息解密用户输入的支付密码会通过RSA加密 公钥私钥生成方式 公私匙可以在线生成 http://web.chacuo.net/netrsakeypair
htmlscript srchttps://cdn.bootcss.com/jsencrypt/3.0.0-beta.1/jsencrypt.js/scriptscript typetext/javascript//公钥var PUBLIC_KEY -----BEGIN PUBLIC KEY-----MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALyBJ6kZ/VFJYTV3vOC07jqWIqgyvHulv6us/8wzlSBqQ2eOTX7s5zKfXY40yZWDoCaIGktP/sc0D6dQzjaxECAwEAAQ-----END PUBLIC KEY-----;//私钥var PRIVATE_KEY -----BEGIN PRIVATE KEY-----MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEAvIEnqRn9UUlhNXe84LTuOpYiqDK8e6W/q6z/zDOVIGpDb545NfuznMp9djjTJlYOgJogaT60/xzQPp1DONrEQIDAQABAkEAu7DFsqQEDDnKJpiwYfUE9ySiIWNTNLJWZDN/Bu2dYIV4DO2A5aHZfMe48rga5BkoWq2LALlY3tqsOFTe3M6yoQIhAOSfSAU3H6jIOnlEiZabUrVGqiFLCb5Ut3Jz9NN5p59AiEA0xQDMrxWBBJ9BYq6RRY4pXwa/MthX/8Hy3GnvNw/yUCIG/3Ee578KVYakq5pih8KSVeVjO37C2qj60d3Ok3XPqBAiEAqGPvxTsAuBDz0kcBIPqASGzArumljkrLsoHHkakOfU0CIDuhxKQwHlXFDO79ppYAPcVO3bph672qGD84YUaHFpQ-----END PRIVATE KEY-----;//使用公钥加密var encrypt new JSEncrypt();//实例化加密对象encrypt.setPublicKey(PUBLIC_KEY);//设置公钥var encrypted encrypt.encrypt(hello bobo!);//对指定数据进行加密alert(encrypted)//使用私钥解密var decrypt new JSEncrypt();decrypt.setPrivateKey(PRIVATE_KEY);//设置私钥var uncrypted decrypt.decrypt(encrypted);//解密alert(uncrypted);/script
/html上述代码提取关键字 RSAsetPublicKey设置公钥setPrivateKey设置私钥encrypt,decrypt 只讲这么几个加密算吗吗 是的。重点是区分加密算法是对称的还是非对称的。 对称秘钥加密必须要使用秘钥进行加密和解密非对称的必须使用公钥加密私钥解密
base64伪加密
Base64是一种用64个字符来表示任意二进制数据的方法。base64是一种编码方式而不是加密算法。只是看上去像是加密而已。Base64使用A–Za–z0–9/ 这64个字符实现对数据进行加密。
htmlscript typetext/javascript// 创建Base64对象var Base64{_keyStr:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789/,encode:function(e){var t;var n,r,i,s,o,u,a;var f0;eBase64._utf8_encode(e);while(fe.length){ne.charCodeAt(f);re.charCodeAt(f);ie.charCodeAt(f);sn2;o(n3)4|r4;u(r15)2|i6;ai63;if(isNaN(r)){ua64}else if(isNaN(i)){a64}ttthis._keyStr.charAt(s)this._keyStr.charAt(o)this._keyStr.charAt(u)this._keyStr.charAt(a)}return t},decode:function(e){var t;var n,r,i;var s,o,u,a;var f0;ee.replace(/[^A-Za-z0-9/]/g,);while(fe.length){sthis._keyStr.indexOf(e.charAt(f));othis._keyStr.indexOf(e.charAt(f));uthis._keyStr.indexOf(e.charAt(f));athis._keyStr.indexOf(e.charAt(f));ns2|o4;r(o15)4|u2;i(u3)6|a;ttString.fromCharCode(n);if(u!64){ttString.fromCharCode(r)}if(a!64){ttString.fromCharCode(i)}}tBase64._utf8_decode(t);return t},_utf8_encode:function(e){ee.replace(/rn/g,n);var t;for(var n0;ne.length;n){var re.charCodeAt(n);if(r128){tString.fromCharCode(r)}else if(r127r2048){tString.fromCharCode(r6|192);tString.fromCharCode(r63|128)}else{tString.fromCharCode(r12|224);tString.fromCharCode(r663|128);tString.fromCharCode(r63|128)}}return t},_utf8_decode:function(e){var t;var n0;var rc1c20;while(ne.length){re.charCodeAt(n);if(r128){tString.fromCharCode(r);n}else if(r191r224){c2e.charCodeAt(n1);tString.fromCharCode((r31)6|c263);n2}else{c2e.charCodeAt(n1);c3e.charCodeAt(n2);tString.fromCharCode((r15)12|(c263)6|c363);n3}}return t}}// 定义字符串var string i am bobo!;// 加密var encodedString Base64.encode(string);alert(encodedString); // 解密var decodedString Base64.decode(encodedString);alert(decodedString); /script/html
对称秘钥加密 关键字AESDESxxxkeyencryptdecrypt核心点加密和解密环节必须使用同一个秘钥秘钥获取极为关键 非对称秘钥加密 关键字RSAsetpublickeysetprivatekeyencryptdecrypt核心点加密使用公钥解密使用私钥。因此公钥和私钥的获取极为重要 线性散列散发 md5核心点:加密后不可逆