首页 > 编程语言 >js逆向中常见加密/解密算法实现(js、python)

js逆向中常见加密/解密算法实现(js、python)

时间:2023-02-16 14:35:30浏览次数:41  
标签:enc python text base64 解密 js pwd key new

常见加密、解密算法实现(JS、python)

    • base64

      • Nodejs

        const CryptoJS = require('crypto-js')
        
        // 加密
        let pwd = '密码'
        let b64_pwd = Buffer.from(pwd).toString('base64')
        console.log(b64_pwd) // 5a+G56CB
        
        // 解密
        console.log(Buffer.from(b64_pwd, 'base64').toString()) // 密码
      • python

        import base64
        
        # 加密
        pwd = '密码'
        b64_pwd = base64.b64encode(pwd.encode('utf-8'))
        print(b64_pwd)
        
        # 解密
        print(base64.b64decode(b64_pwd).decode('utf-8'))
    • MD5/SHA1

      • 逆向关键词:md5 / sha1

      • Nodejs

        const CryptoJS = require('crypto-js')
        
        let pwd = '密码'
        
        // md5加密
        let md5_enc_pwd = CryptoJS.MD5(pwd).toString()
        
        // sha1加密
        let sha1_enc_pwd = CryptoJS.SHA1(pwd).toString()
        
        console.log(md5_enc_pwd) // a8105204604a0b11e916f3879aae3b0b
        console.log(sha1_enc_pwd) // c839a8ff17885af0b098662ccc3ac5e3111b3b3b
      • python

        from hashlib import md5, sha1
        
        # 加密
        pwd = '密码'
        print(md5(pwd.encode('utf-8')).hexdigest())
        print(sha1(pwd.encode('utf-8')).hexdigest())
    • HMAC

      • Nodejs

        const CryptoJS = require('crypto-js')
        
        let key = 'key' // 密钥
        let pwd = '密码'
        
        // hmac中的sha256加密
        let hash = CryptoJS.HmacSHA256(pwd, key)
        let hmac_sha256_pwd = CryptoJS.enc.Hex.stringify(hash)
        console.log(hmac_sha256_pwd) // 2c3a5556c71f76f1270ca87db60e1e91c69d812d748767468459a46912feed9c
      • python

        import hashlib
        import hmac
        
        # 加密
        key = 'key'
        pwd = '密码'
        enc_pwd = hmac.new(key.encode('utf-8'), pwd.encode('utf-8'), hashlib.sha256).hexdigest()
        print(enc_pwd)
    • DES

      • js逆向关键词:DES、mode、padding等

      • Nodejs

        const CryptoJS = require('crypto-js')
        
        let key = '12345678' // 密钥
        let pwd = '密码'
        
        let new_key = CryptoJS.enc.Utf8.parse(key)
        let new_pwd = CryptoJS.enc.Utf8.parse(pwd)
        
        let config = {
            mode: CryptoJS.mode.ECB,
            padding: CryptoJS.pad.Pkcs7
        }
        
        // 加密
        let enc_pwd = CryptoJS.DES.encrypt(new_pwd, new_key, config).toString()
        console.log(enc_pwd) // 80lOPdkA6f4=
        
        // 解密
        let dec_pwd = CryptoJS.DES.decrypt(enc_pwd, new_key, config).toString(CryptoJS.enc.Utf8)
        console.log(dec_pwd)
      • python
        import base64
        
        from Crypto.Cipher import DES
        from Crypto.Util.Padding import pad
        
        
        def encrypt(key, text, mode):
            '''
            DES加密
            :param key: 密钥
            :param text: 待加密文本
            :param mode: 模式
            :return:
            '''
            key = key.encode('utf-8')
            text = text.encode('utf-8')
            pad_text = pad(text, DES.block_size, style='pkcs7')
            cipher = DES.new(key, mode)
            enc_data = cipher.encrypt(pad_text)
            return base64.b64encode(enc_data).decode('utf-8')
        
        
        def decrypt(key, text, mode):
            '''
            DES解密
            :param key: 密钥
            :param text: 待解密文本
            :param mode: 模式
            :return:
            '''
            new_key = key.encode('utf-8')
            new_text = base64.b64decode(text)  # base64解码
            cipher = DES.new(new_key, mode)
            dec_data = cipher.decrypt(new_text)return dec_data[:-dec_data[-1]].decode('utf-8') # 去除末尾填充的字符
        
        
        if __name__ == "__main__":
            key = '12345678'
            pwd = '密码'
            enc_pwd = encrypt(key, pwd, DES.MODE_ECB)
            print(enc_pwd)
            dec_data = decrypt(key, enc_pwd, DES.MODE_ECB)
            print(dec_data)

        ECB模式没有使用初始化向量(IV)

    • AES

      • 逆向关键词:AES、mode、padding等

      • Nodejs

        const CryptoJS = require('crypto-js')
        
        let pwd = "密码";
        let key = "1234567890abcdef"
        
        let new_key = CryptoJS.enc.Utf8.parse(key)
        let new_pwd = CryptoJS.enc.Utf8.parse(pwd)
        
        let cfg = {
            mode: CryptoJS.mode.ECB,
            padding: CryptoJS.pad.Pkcs7
        }
        
        // AES加密
        let enc_pwd = CryptoJS.AES.encrypt(new_pwd, new_key, cfg).toString()
        console.log(enc_pwd) // cdT+fh971Dgn3ji5v3+0AQ==
        
        // AES解密
        let dec_pwd = CryptoJS.AES.decrypt(enc_pwd, new_key, cfg).toString(CryptoJS.enc.Utf8) // 指定解码方式
        console.log(dec_pwd)  // 密码
      • python

        import base64
        
        from Crypto.Cipher import AES
        from Crypto.Util.Padding import pad
        
        
        def encrypt(key, text, mode):
            '''
            AES加密
            :param key: 密钥
            :param text: 待加密文本
            :param mode: 模式
            :return:
            '''
            key = key.encode('utf-8')
            text = text.encode('utf-8')
            pad_text = pad(text, AES.block_size, style='pkcs7')
            cipher = AES.new(key, mode)
            enc_data = cipher.encrypt(pad_text)
            return base64.b64encode(enc_data).decode('utf-8')
        
        
        def decrypt(key, text, mode):
            '''
            AES解密
            :param key: 密钥
            :param text: 待解密文本
            :param mode: 模式
            :return:
            '''
            new_key = key.encode('utf-8')
            new_text = base64.b64decode(text)  # base64解码
            cipher = AES.new(new_key, mode)
            dec_data = cipher.decrypt(new_text)
            print(dec_data)
            return dec_data[:-dec_data[-1]].decode('utf-8') # 去除末尾填充的字符
        
        
        if __name__ == "__main__":
            key = '1234567890abcdef'
            pwd = '密码'
            enc_pwd = encrypt(key, pwd, AES.MODE_ECB)
            print(enc_pwd)
            dec_data = decrypt(key, enc_pwd, AES.MODE_ECB)
            print(dec_data)
  • RSA

    • 逆向关键词:setPublicKey

    • Nodejs

      window = global;
      const JSEncrypt = require('jsencrypt'); // npm install [email protected]
      publickey = `
      -----BEGIN PUBLIC KEY-----
      MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCdRivxDSsUknPXJ4iGLwmezwgc
      1mue6d+Xyf67NWeHc6vC5vq2BfSmGgOz42dQ1JOwzWM+1TG6gocJbfSSsW1dFy3G
      sMLUblq1iIQ9/NZLjGRgF7+MUxCxTp+okPyhhUCeeg7u44B9F3OdDXIc3peAs4hV
      QI241AHnQqKJJVrEIwIDAQAB
      -----END PUBLIC KEY-----
      `;
      
      // 加密
      let jse = new JSEncrypt();
      jse.setPublicKey(publickey);
      var enc_pwd = jse.encrypt('密码');
      console.log(enc_pwd) // dYxPVvIG/O2rHq0M6IG1H2yB0euqgL3pJ8jS+oFyGg7ZNHsWtLH/T6sYFRmVeMQwPJ4+c0ReEr/8wdzPcDg8NA==
      
      // 解密
      privatekey = `
      -----BEGIN RSA PRIVATE KEY-----
      MIICWwIBAAKBgQCdRivxDSsUknPXJ4iGLwmezwgc1mue6d+Xyf67NWeHc6vC5vq2
      BfSmGgOz42dQ1JOwzWM+1TG6gocJbfSSsW1dFy3GsMLUblq1iIQ9/NZLjGRgF7+M
      UxCxTp+okPyhhUCeeg7u44B9F3OdDXIc3peAs4hVQI241AHnQqKJJVrEIwIDAQAB
      AoGAPW7dGDYUF1+Tlz3ugreZ8uoc2aLZ/AOP3ss80OSt8Yd51tKBqRtPcphjzN8t
      irHWlO/Nbgw59ggpdkH4kFp1BJRyqTIxNibZaBK4vrvP6nnta6Us3zsdmYvql6v8
      zpa7mIiXkchftj2M2bZEsJib3Xor9idzg805H2pyYWSsd2ECQQDAG/7tIHJ5hsAa
      dyqjbHDpFoVa1t6JpNVlttj+NLIuQKi8Atd5xXF5SPGFwVjeYfyvFbPp0rAoFje1
      ldfUNB5DAkEA0ZRWIOHOMV+h2NMx5PCRnPClmx450I2bqdOo14CnG6gmipw15Oh5
      oeLGqM1XsNKobDclU8YbR5B/YRxaw8eUoQJAEnYeR3doyNj0ORbemBnht+ScKCCh
      /iRDBaVOsQ8rWFqKXJcBUghxYTBrVWlBOw27lK/HPF8s4o1QCTk/JntjtQJAQKk/
      mY2RjHIxATDH6BbBFma48Y71z36hVFhVc4fiBwpuOb3Qcvu261eIa3RPZeLYy+qH
      vb0VlZLjehbBej4NgQJAF9RKBmh7VtqrzhBU53KzVzpwSUdpiuNGnb563xNt4FtS
      Ybwh5wrMDHf6y8GNUgI2ICKZA+0LCWDs/PxekA8URg==
      -----END RSA PRIVATE KEY-----
      `
      jse.setPrivateKey(privatekey);
      var dec_pwd = jse.decrypt(enc_pwd);
      console.log(dec_pwd) // 加密

      每次加密的结果都会不同,密钥对可通过在线工具生成

    • python

      import base64
      from Crypto.Cipher import PKCS1_v1_5
      from Crypto import Random
      from Crypto.PublicKey import RSA
      
      
      # ------------------------生成密钥对------------------------
      def create_rsa_pair(is_save=False):
          '''
          创建rsa公钥私钥对
          :param is_save: default:False
          :return: public_key, private_key
          '''
          f = RSA.generate(1024)
          private_key = f.exportKey("PEM")  # 生成私钥
          public_key = f.publickey().exportKey()  # 生成公钥
          if is_save:
              with open("crypto_private_key.pem", "wb") as f:
                  f.write(private_key)
              with open("crypto_public_key.pem", "wb") as f:
                  f.write(public_key)
          return public_key, private_key
      
      
      def read_public_key(file_path="crypto_public_key.pem") -> bytes:
          with open(file_path, "rb") as x:
              b = x.read()
              return b
      
      
      def read_private_key(file_path="crypto_private_key.pem") -> bytes:
          with open(file_path, "rb") as x:
              b = x.read()
              return b
      
      
      # ------------------------加密------------------------
      def encryption(text: str, public_key: bytes):
          # 字符串指定编码(转为bytes)
          text = text.encode('utf-8')
          # 构建公钥对象
          cipher_public = PKCS1_v1_5.new(RSA.importKey(public_key))
          # 加密(bytes)
          text_encrypted = cipher_public.encrypt(text)
          # base64编码,并转为字符串
          text_encrypted_base64 = base64.b64encode(text_encrypted).decode()
          return text_encrypted_base64
      
      
      # ------------------------解密------------------------
      def decryption(text_encrypted_base64: str, private_key: bytes):
          # 字符串指定编码(转为bytes)
          text_encrypted_base64 = text_encrypted_base64.encode('utf-8')
          # base64解码
          text_encrypted = base64.b64decode(text_encrypted_base64)
          # 构建私钥对象
          cipher_private = PKCS1_v1_5.new(RSA.importKey(private_key))
          # 解密(bytes)
          text_decrypted = cipher_private.decrypt(text_encrypted, Random.new().read)
          # 解码为字符串
          text_decrypted = text_decrypted.decode()
          return text_decrypted
      
      
      if __name__ == '__main__':
          # 生成密钥对
          public_key, private_key = create_rsa_pair(is_save=False)
      
          # create_rsa_pair(is_save=True)
          # public_key = read_public_key()
          # private_key = read_private_key()
      
          # 加密
          pwd = '密码'
          enc_pwd = encryption(pwd, public_key)
          print('密文:', enc_pwd)
      
          # 解密
          dec_pwd = decryption(enc_pwd, private_key)
          print('明文:', dec_pwd)

       

标签:enc,python,text,base64,解密,js,pwd,key,new
From: https://www.cnblogs.com/eliwang/p/17121385.html

相关文章

  • python配置包
    配置python环境在python官网(https://www.python.org)下载python3.7版本   选择 download   进行安装  installnow选择addpython3.7topath......
  • jupyter notebook(python 3.7)网页版安装
    参考链接:https://blog.csdn.net/NickHan_cs/article/details/108204297 #1.进入python的Scripts目录下 >activate.bat    ------->#激活Scripts >cdd:\Ope......
  • 直播app开发搭建,js对时间日期判断今天昨天明天
    直播app开发搭建,js对时间日期判断今天昨天明天lettime=function(date){lettime_str="";if(newDate(date).getDate()===newDate().getDate()){time_str="......
  • 使用docker部署Python-Flask实现ChatGPT的使用
    首先说下背景:自从申请ChatGPT到现在也有个把月了,余额一直还很多,想想三月下旬就过期了,还是计划把里面的18美刀用掉,于是结合着之前做的Django简单cv一个"简易网站"。简......
  • 【Python】字母表的循环迭代
     字母循环迭代器defforward(letter,jump):"""字母表上的循环迭代器"""ifletter.islower():start_character=ord('a')......
  • python读取json 生成Excel表格
    importjsonimportxlwtbiaotou='[{"name_cn":"企业名称","name_en":"QYMC"},{"name_cn":"类别","name_en":"LB"},{"name_cn":"地市","name_en":"DS&q......
  • vue js 预览word, Excel, TXT,PDF 图片等。
    npm安装插件npminstallxlsx--savenpminstalldocx-preview--save  npminstallaxios template部分//这里封装成一个组件<template><divclass=""......
  • 【Python】递归获取嵌套json 的所有key及value值
     代码classrecurPostDict:"""递归获取多维嵌套字典所有层级的key和value"""def__init__(self,datas):self.datas=datasdefrecur_dat......
  • Python导出项目依赖包
    只导出当前项目依赖包1、安装pipreqs:pipinstallpipreqs2、进入当前项目目录下,导包:pipreqs./(导包完成会生成一个requirements.txt文件)3、安装依赖的时候使用:pip......
  • Python实现随机森林RF并对比自变量的重要性
      本文介绍在Python环境中,实现随机森林(RandomForest,RF)回归与各自变量重要性分析与排序的过程。  其中,关于基于MATLAB实现同样过程的代码与实战,大家可以点击查看MATLA......