1.1基础 三元运算 v1 = 条件?值A:值B; 条件成立v1为值A,条件不成立v1为值B res = 1 ===1?99:88; 三个等于号表示是否完全相等,==则不然,若1=="1"会报正确 console.log(res); console.log相等于执行,里面放变量相当于print 结果为99 赋值和比较 v1 = 11 ===(n=123) 先把123赋值给n,再判断l1与n是否相等,最后把false赋值给v1 console.log(n); 123 console.log(v1); false 逻辑运算 ||表示或,&&表示且 v2 = 9||14 v2值为多少,取决于9||14哪一个决定了为false或true,因为9为true,所以后面为啥都没关系,v2 就等于9 v3 = 0||15 0为false,整体结果取决于后面的值,v3值为15 v4 = 0||15||"杨鑫" 0||15先弄,整体取决于15,相当于15||"杨鑫",v4结果为15 逻辑运算优先级比三元运算高 1.2函数 function sign(v1){ //this console.log(v1); } 定义函数,sign为函数名 sign(123); 执行函数,函数内部this=window sign.call(123,456) 执行结果会把从第二个开始的值赋值进去,结果为456 function sign(v1,v2){ console.log(v1,v2); } sign.call(123,456,888)执行结果为456,888,函数内部this=123 若函数需要两个参数值,而只传入一个参数,则后面的值默认undefined 若函数没有定义参数,也可以传入参数值,会在arguments中记录 function x1(){ console.log(arguments); } x1(123,234,456,6778); 1.3其他 v1 = {k1:123} v2 = {k2:99,k3:888} Object.assign(v1,v2) console.log(v1); 将v2填充到v1,结果为{k1:123,k2:99,k3:888} 2.js对象 let obj = { "name":"杨鑫" }; let 声明变量 console.log(obj.name); 函数定义方法一: function Person(name,age){ console.log(this); this.name = name; this.age = age; } let p = new Person("zs",18); console.log(p.name); console.log(p.age);访问对象 console.log(p["name"]);访问对象 函数定义方法二: let add = new Function('a','b','return a+b'); res = add(1,5); console.log(res); 函数立即执行一: let res = function add(a,b){ console.log("函数执行了") return a+b; }(1,2); 定义和赋值放在一起 console.log(res); 函数立即执行二: !和~表示函数立即执行 !function addd(a,b){ console.log("函数执行了") return a+b; }(1,2); 函数立即执行三: 整体上套一个括号 (function adddd(a,b){ console.log("函数执行了") return a+b; }(1,2)); 3.字符串编解码 3.1unicode字符串 https://www.bejson.com/convert/unicode_chinese/ '我是猪' unicode为:\u6211\u662f\u732a 3.2bs64编码 btoa("i love you china"); 将字符串转换为bs64编码 atob("aSBsb3ZlIHlvdSBjaGluYQ==");将bs64编码转换为字符串 在浏览器中有这样的方法 再node中用Buffer方法 let buffer = Buffer.from("i love you china"); let base64Str = buffer.toString("base64"); console,log(base64Str);转换为bs64编码 let str = Buffer.from("密文","base64").toString(); console.log(str); 解码 4.常见加密算法 4.1base64编码: 工具:https://www.sojson.com/base64.html '我是猪' bs64结果:5oiR5piv54yqCiA= 4.2md5算法: 工具:https://www.sojson.com/encrypt_md5.html '我是猪' md5结果(32位小写):13166076ba99caf9e9e33e0c2ff76464 4.3对称加密算法AES&DES 可逆的,只要知道密钥 工具:https://www.sojson.com/encrypt_aes.html '我是猪':AES结果: Javascript实现AES加密:
<!DOCTYPE html>
<html>
<head>
<title>AES Encryption Example</title>
</head>
<body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>
<script>
// 加密函数
function encryptData(data, key) {
var encrypted = CryptoJS.AES.encrypt(data, key);
return encrypted.toString();
}
// 解密函数
function decryptData(encryptedData, key) {
var decrypted = CryptoJS.AES.decrypt(encryptedData, key);
return decrypted.toString(CryptoJS.enc.Utf8);
}
// 加密和解密示例
var dataToEncrypt = "Hello, world!";
var encryptionKey = "MySecretKey123";
var encryptedData = encryptData(dataToEncrypt, encryptionKey);
console.log("Encrypted data:", encryptedData);
var decryptedData = decryptData(encryptedData, encryptionKey);
console.log("Decrypted data:", decryptedData);
</script>
</body>
</html>
Javascript实现DES加密:
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/cipher-core.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/tripledes.min.js"></script>
// 加密函数
function encryptDES(text, key) {
var encrypted = CryptoJS.TripleDES.encrypt(text, key);
return encrypted.toString();
}
// 解密函数
function decryptDES(ciphertext, key) {
var decrypted = CryptoJS.TripleDES.decrypt(ciphertext, key);
return decrypted.toString(CryptoJS.enc.Utf8);
}
// 使用示例
var plaintext = "Hello, World!";
var key = "supersecretkey";
var encrypted = encryptDES(plaintext, key);
console.log("Encrypted:", encrypted);
var decrypted = decryptDES(encrypted, key);
console.log("Decrypted:", decrypted);
4.4非对称加密算法RSA 分为公钥和私钥,公钥用来加密,私钥用来解密 工具:
代码展现:
<!DOCTYPE html>
<html>
<head>
<title>RSA Encryption Example</title>
<!-- 引入 jsencrypt 库 -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jsencrypt/3.0.0-rc.1/jsencrypt.min.js"></script>
</head>
<body>
<h1>RSA Encryption Example</h1>
<textarea id="plaintext" rows="4" cols="50">Enter text to encrypt here...</textarea><br>
<button onclick="encryptAndSend()">Encrypt and Send</button>
<script>
// 创建一个 JSEncrypt 实例
var encryptor = new JSEncrypt();
// 设置 RSA 公钥
var publicKey = '-----BEGIN PUBLIC KEY-----\n' +
'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvYk12LBMqAeIN9/wGwB1\n' +
'xP7H1OyPcgmzN0nskjq1laJp2RgUgec33i1c3pE65aW1ddtRbFt4GtY7Ej2z+jlM\n' +
'NQyPJ6tqCQcO2TYg7ZqIQzN/hIXB0x2hhwifZ4ug1ppkew+ME1/Jf77rA08Rq7+Y\n' +
'1sifXQKdGjBMBKvhSK+n3i7bFq8iwZvnfdN0pHZ40lP4bqXuYUQ6bYbfmJr1CGCJ\n' +
'gXTMnKKOQpGFRiLxI8UefEg2j9RysVg8sQQI7/tMwW3h7E8jDLlfMpTal0AeTMu7\n' +
'qzFjgFpnnT7O2Nfq5yYoUlaK+zCuC2qcnj+HScwZGxHsWD7GmvySxFUYd1tkzgAS\n' +
'1wIDAQAB\n' +
'-----END PUBLIC KEY-----';
// 设置 RSA 公钥
encryptor.setPublicKey(publicKey);
function encryptAndSend() {
var plaintext = document.getElementById("plaintext").value;
// 使用 RSA 公钥加密数据
var encryptedData = encryptor.encrypt(plaintext);
// 这里将加密后的数据发送到服务器,示例中没有发送的代码
console.log("Encrypted Data:", encryptedData);
alert("Encrypted Data sent to server:\n" + encryptedData);
}
</script>
</body>
</html>
5.逆向中加密的分类:
消息摘要加密算法:
md5加密,加密长度32位16进制字符串,什么内容被加密,找在线md5网站看结果一样吗
hamc 有key和加密的内容,同样32位16进制字符串
sha sha1 40个16进制字符
sha2
sha224 56
sha256 64
sha384 96
sha512 128
sha3
sha3-224 56
sha3-256 64
sha3-384 96
sha3-512 128