js逆向基础必备知识一

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

 

 

 

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

努力学习各种软件

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

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

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

打赏作者

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

抵扣说明:

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

余额充值