=_=_=js复习

// 数组 浅拷贝 let arr = [7, 2, 3] let cparr = []; arr.forEach((v, index) => { cparr[index] = v }) cparr[1] = 12 console.log(cparr, arr); let cparr2 = arr.slice() cparr2[1] = 12 console.log(cparr2, arr); //浅拷贝对象 let obj = {name: '小米', age: 12, test: {c: 1}}; let cpobj = {} for (const v of Object.keys(obj)) { cpobj[v] = obj[v] } console.log(cpobj) obj.test.c = 12 console.log(cpobj) cpobj2 = Object.assign({}, obj); console.log(cpobj2) // 深拷贝 cp = structuredClone(obj) console.log(cp) // 遍历方法 arr.forEach((value, index, array) => { }) for (let v of arr) { console.log(v) } for (let index in arr) { console.log(index) } // 赋值 let arr2 = [7, 2, 3]; let [a, b, c] = arr2; console.log(a, b, c); let human = {name: 'jocker', sex: 'girl', inex: undefined} let {name, sex, inex = 12} = human console.log(name, sex, inex); // ... 操作时 function add(a,...v){ console.log(a,v) } add(1,2,3,4)//函数是和argument 差不多 a = [1,2,3,4]; let v = [1,2,3,...a];//和 concat console.log(v); console.log([].concat(a,[4,5,6])); //String console.log('hhhhhx'.charCodeAt(2)); console.log(String.fromCharCode(104)); //数组 python arr[1:2] js如何操作 console.log(arr.slice(1, 2),arr); console.log(arr.splice(1, 0, 1, 2, 3)); //可以插入 console.log(arr) console.log(arr.splice(1, 3),'删除内容会返回'); //可以删除 console.log(arr) // 正则环节 // 隐式 let tag = ` <a href="http://localhost.com">主页1</a> <a href="http://localhost.com">主页2</a> <a href="http://localhost.com">主页3</a> <a href="http://localhost.com">主页4</a> `; let reg = /<a href="(?<url>[\w|\/|:|\.]+)">(?<text>.+)?<\/a>/ig; console.log(reg.test(tag)) //判断是否有 console.log(reg.exec(tag)); let key; while (key = reg.exec(tag)?.groups){ console.log(key) } // 说起这个?. a = {test:{add(a,b){return a+b;}}}; console.log(a.test && a.test.add &&a.test.add(1,2)) console.log(a.txst?.xsaxa?.sadsa) //Map 升级版 Obj <====> 我就不复习了 Set 总的来看没啥东西 js 可能还有Promise还有一些东西后面完善

let CryptoJS = require('crypto-js'); let crypto = require('crypto'); let cipherText = '123456'; // 密码加密 //信息摘要加密 // MD5 let md5_ciphertext = CryptoJS.enc.Utf8.parse(cipherText); console.log(CryptoJS.MD5(md5_ciphertext).toString(), 'md5'); // SHA1 - SHA256 let sha1_cipherText = CryptoJS.enc.Utf8.parse(cipherText); console.log(CryptoJS.SHA1(sha1_cipherText).toString(), 'sha1') //1 -> 160 128 -> 256 256 -> 512位 // DES or DES3 //format 重写加密和解密处理过程 let des_cipher = CryptoJS.enc.Utf8.parse(cipherText); let key = CryptoJS.enc.Utf8.parse('12345678');//貌似不检测二进制最后一位 let iv = CryptoJS.enc.Utf8.parse('12345678');//null or 64bit let cfg = { iv: iv, padding: CryptoJS.pad.Pkcs7, mode: CryptoJS.mode.CBC } let en_cipher_des = CryptoJS.DES.encrypt(des_cipher, key, cfg).ciphertext.toString(); let de_cipher_des = CryptoJS.DES.decrypt(CryptoJS.enc.Hex.parse(en_cipher_des).toString(CryptoJS.enc.Base64), key, cfg).toString(CryptoJS.enc.Utf8); console.log(en_cipher_des, 'des', de_cipher_des) let key_3 = CryptoJS.enc.Utf8.parse('123456781234567812345678');//前面2租加密解密 和后面那一串一样的话就没意义了 let en_des3 = CryptoJS.TripleDES.encrypt(des_cipher, key_3, cfg).toString(); let de_des3 = CryptoJS.TripleDES.decrypt(en_des3, key_3, cfg).toString(CryptoJS.enc.Utf8) console.log(en_des3, 'des3', de_des3) //AES let aes_cipher = CryptoJS.enc.Utf8.parse(cipherText); let aes_key = CryptoJS.enc.Utf8.parse('1234567812345678') //16or24or32 let aes_iv = CryptoJS.enc.Utf8.parse('1234567812345678') let aes_cfg = { iv: aes_iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 } let en_aes = CryptoJS.AES.encrypt(aes_cipher, aes_key, aes_cfg).toString(); let de_aes = CryptoJS.AES.decrypt(en_aes, aes_key, aes_cfg).toString(CryptoJS.enc.Utf8); console.log(en_aes, 'aes', de_aes) // RSA let public_key = "-----BEGIN PUBLIC KEY-----\n" + "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApPiTwq4SBuKYR1wZAkGp\n" + "2zKiZ6hz9e2WMMlYSpt1h1Deel9C7IBinH0Szyt4F7JyOaUrHbJiOpnsvN493DiQ\n" + "GBbmfzWTKJXgkeWoHWD1BC53vIxIyQ9+fofHk0gDJwuazKPILmG+unZpHOw8LQAP\n" + "VuWh4V8AFvXpUJ3CftysGplZchZNSRaIabLfsI5fxRV5Kw1h0GN/fBhyHaNJT7xw\n" + "SwMsLf/dNvc8C9RY7lHeU622kS2XNe/hF486wYhzqNPx83LtddEo3RE5xCj9QZjX\n" + "/V+CkrlmUd25pKLowoY2E9y3fgcsZLbVK8JpC7GtT94j+6AEIO5hmFc/LkzEED6I\n" + "rwIDAQAB\n" + "-----END PUBLIC KEY-----"; let priv_key = "-----BEGIN PRIVATE KEY-----\n" + "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCk+JPCrhIG4phH\n" + "XBkCQanbMqJnqHP17ZYwyVhKm3WHUN56X0LsgGKcfRLPK3gXsnI5pSsdsmI6mey8\n" + "3j3cOJAYFuZ/NZMoleCR5agdYPUELne8jEjJD35+h8eTSAMnC5rMo8guYb66dmkc\n" + "7DwtAA9W5aHhXwAW9elQncJ+3KwamVlyFk1JFohpst+wjl/FFXkrDWHQY398GHId\n" + "o0lPvHBLAywt/9029zwL1FjuUd5TrbaRLZc17+EXjzrBiHOo0/Hzcu110SjdETnE\n" + "KP1BmNf9X4KSuWZR3bmkoujChjYT3Ld+ByxkttUrwmkLsa1P3iP7oAQg7mGYVz8u\n" + "TMQQPoivAgMBAAECggEAO1SzP6b/EL7Z6YAz9l3LSuxRAFrTKbWC+JTRTjPO9xWc\n" + "jgJIvWoHDSTmaN/HVy50akr+0LVhIpZNUDfVo6gsGp3R1BpejJAqrg4cgkRmmlRj\n" + "98m0O6t44OTQYCXcDGTeDY8x5Yx93e3MK/zCP6Tv317C850JGTjj6nxygNG4i+/a\n" + "7JRz8wiiU1RksxcZPF281fWrWwqCxcew7PHZvzB44WzYC/+d759uU996Kvd99vQ0\n" + "U++tyMihQe0MmfLJ6ss4mv8tAcSbkmdgYz7SeqAfE1oelyBryfrVZQFbOxHt2ZGA\n" + "lnbdmtHea0xUkRmbut8p4PkRPhsmY/Krmocd5nUz4QKBgQDZs82yJD+37g2CJKLV\n" + "GcJ+s27kVw4RfdR5/B6br9yecWi3YGFGnTbUk0LbyYpgncK6OMyZPU9I6Bo7vbXl\n" + "DqfNotIZOaxNDEZUB20nymyjlpVGTH9WKi9PoRRvq1aG9Zhf40aXerL/jmxAvVxc\n" + "baGHUz6jsGGuIVhUIMhLynIvlwKBgQDB/gY3Wy67f9oxvOKF9hUfDSE5R3thhXYk\n" + "AOeCGl2BaaBviYXj9nhfcPIhxh29uNk/CChSLzYnVK+kKRVP1CMy3d7YyVKoK4+K\n" + "+UhyX5NTJQXdSjZ4DKxmlV8opb0WdS+S4rmWFy6Ml64419Aw99dKOCE6TcoP0S0a\n" + "6o7eyS+SqQKBgQCYBfRdMuz//w+V0wmWcE+edKS6dYRQeKMYsBObunoAdseeToJ/\n" + "cieo2FD29E1aXLBvpFxTojmsetBe6YKMuug5NDss/FYy06CE606xW6zzq6MAHUlK\n" + "nVi+bYi81lQtGHHYe/h+rWM0DHvR1aoarUAAJQR4ACKmG4j37pCQRIXqbwKBgHTH\n" + "kr5oKa29vYALkOHLzdMveDyfB2shiIkL8lGjxX5OM8JxKyScDsKFn30tYmH/kOgc\n" + "5Qj0Wsk6dbGA+c9giP/qCGjAaP3Lm1Gx1ybi2jFHLEyWjEugdXgbm3lArJ+EU+s8\n" + "iTQNKHyCIuMdJ7sSt4t6VqZehbEX3utBIFiFDBphAoGAHSRtXMez4rdXSCyTm0NY\n" + "S+03AuTmsOtnJZvZk3CHEmV5kyNVSRwb50ZF7ennFafpGSpwg0PCoCCl2jrhhfNb\n" + "0Pz3wHbM3smofQBDyJ154wdnTw/rrefhoTcbUqlxC8cSFa1rSDwNFHwWJdlR/0fR\n" + "jmT0C0ARjEPfotA9YOCPgkU=\n" + "-----END PRIVATE KEY-----"; // 使用公钥进行加密 function encrypt(publicKey, data) { return crypto.publicEncrypt(publicKey, Buffer.from(data)); } // 使用私钥进行解密 function decrypt(privateKey, encryptedData) { return crypto.privateDecrypt(privateKey, encryptedData); } x = encrypt(public_key,'hello'); console.log(x.toString('base64')) let base64Value = atob(x.toString('base64')); // Base64编码的值 console.log(decrypt(priv_key,Buffer.from(x,'binary')).toString())