JS逆向 数据类型/常用加密之小白入门基础篇一

JS逆向 数据类型/常用加密之小白入门基础篇一


前言

常用的数据类型,常用算法加密


提示:以下是本篇文章正文内容,下面案例可供参考

一、JavaScript 基础常识

语法基础

1.1基本数据类型

String:字符串
number:数字
Boolean:布尔值
null:空值
Undefined:未定义
Symbol:独一无二的值

1.2 引用数据类型

object:对象
array:数组
function:函数

1.3 语句标识符

let:声明块作用域变量
var:声明变量
this:当前所属对象

2.作用域

2.1 全局作用域

内置全局对象window(浏览器当前打开的窗口),引用方式:window.xxx,window[“xxx”];
var声明的变量可以在全局访问,比如:var name = “xiaozhou”;
调用:console.log(name),console.log(window[“name”]);

2.2 块作用域

块作用域是指在if,switch,for,while语句范围内,使用let,const声明,在块作用域外无法被访问;
函数内定义的变量不能在控制台直接访问,打断点进入函数后可以在控制台中访问打印

二、什么是加密?

加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。

三、线性散列算法(签名算法)MD5

1.JS-代码示例

<!DOCTYPE html>
<html lang="en">
    <!-- md5源码地址:https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.js -->
    <!-- md5常用于登录-->
    <script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.js"></script>
    <script type="text/javascript">
        var hashCode = md5("i am xiaozhou!");
        alert(hashCode) // 在弹窗中输出文本 7887d52bb2dde5477e6d308146fda57c
    </script>
</html>

四、对称性加密算法 AES,DES

1.JS-代码示例

<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 = "i am xiaozhou ?";  // 需要加密的内容
		  // 加密 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=转字符串类型

		  alert(encrypt); // 在弹窗中打印字符串 QHr5kLVBfNmlLaVEReBEvQ==

		  //解密
		  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 ?"
	</script>
</html>

五、非对称性加密算法 RSA

1.JS-代码示例

<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 KEY-----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);//对指定数据进行加密
		alert(encrypted)  // ulHUPF/MDvKa0GnaB6zESIgMkaQc7FJtx9NwN/tJjcQ6YyfjoiKCzs6KUbAL+ASvJ6irUDh7MtSce4c+hEO21Q==
        //使用私钥解密
        var decrypt = new JSEncrypt(); // 创建解密对象
        decrypt.setPrivateKey(PRIVATE_KEY); //设置私钥
        var uncrypted = decrypt.decrypt(encrypted); //解密
		alert(uncrypted);
    </script>
    <!-- 总结:可根据setPublicKey,setPrivateKey 确定是否为非对称RSA加密 -->
</html>

5、base64编码伪加密

1.JS-代码示例

<html>
    <script type="text/javascript">
		// 创建Base64对象
		var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(e){var t="";var n,r,i,s,o,u,a;var f=0;e=Base64._utf8_encode(e);while(f<e.length){n=e.charCodeAt(f++);r=e.charCodeAt(f++);i=e.charCodeAt(f++);s=n>>2;o=(n&3)<<4|r>>4;u=(r&15)<<2|i>>6;a=i&63;if(isNaN(r)){u=a=64}else if(isNaN(i)){a=64}t=t+this._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 f=0;e=e.replace(/[^A-Za-z0-9+/=]/g,"");while(f<e.length){s=this._keyStr.indexOf(e.charAt(f++));o=this._keyStr.indexOf(e.charAt(f++));u=this._keyStr.indexOf(e.charAt(f++));a=this._keyStr.indexOf(e.charAt(f++));n=s<<2|o>>4;r=(o&15)<<4|u>>2;i=(u&3)<<6|a;t=t+String.fromCharCode(n);if(u!=64){t=t+String.fromCharCode(r)}if(a!=64){t=t+String.fromCharCode(i)}}t=Base64._utf8_decode(t);return t},_utf8_encode:function(e){e=e.replace(/rn/g,"n");var t="";for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r)}else if(r>127&&r<2048){t+=String.fromCharCode(r>>6|192);t+=String.fromCharCode(r&63|128)}else{t+=String.fromCharCode(r>>12|224);t+=String.fromCharCode(r>>6&63|128);t+=String.fromCharCode(r&63|128)}}return t},_utf8_decode:function(e){var t="";var n=0;var r=c1=c2=0;while(n<e.length){r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r);n++}else if(r>191&&r<224){c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{c2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3}}return t}}
		// 定义字符串
		var string = 'i am xiaozhou!';
		// 加密
		var encodedString = Base64.encode(string);
		alert(encodedString);
		// 解密
		var decodedString = Base64.decode(encodedString);
		alert(decodedString);
	</script>
    <!-- 总结 Base64是一种用64个字符来表示任意二进制数据的方法。base64是一种编码方式而不是加密算法。只是看上去像是加密而已。
         Base64使用A--Z,a--z,0--9+/64个字符实现对数据进行加密。
    -->
</html>

总结

JS视频课程作者(波晓张):https://www.bilibili.com/video/BV1ha411z7FU?p=1&vd_source=8855321bac78c54a94423e390d93d061
例如:以上就是今天要讲的内容,简单记录一下自己的学习笔记。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java@爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值