首页 > 其他分享 >【web_逆向08】对称加密之AES、DES

【web_逆向08】对称加密之AES、DES

时间:2023-08-16 23:12:02浏览次数:34  
标签:web AES 16 08 DES mode bs MODE

对称解密

  • 所谓对称加密就是加密和解密用的是同一个秘钥. 就好比. 我要给你邮寄一个箱子. 上面怼上锁. 提前我把钥匙给了你一把, 我一把. 那么我在邮寄之前就可以把箱子锁上. 然后快递到你那里. 你用相同的钥匙就可以打开这个箱子.

  • 常见的对称加密: AES, DES, 3DES等

安装第三方模块

  • pip install pycrypto => 很多人装不上....
  • pip install pycryptodome => 可以装..
  • AES源码
# 创建加密器
# 秘钥必须是 16, 24, 32位字节...
# 99%的网站使用的aes都是16位秘钥..

# mode: AES的加密方式
# 常见的mode:
# ECB,  可以没有iv
# CBC,  必须有iv. 长度是16字节..
def new(key, mode, *args, **kwargs):
    """Create a new AES cipher.

    Args:
      key(bytes/bytearray/memoryview):
        The secret key to use in the symmetric cipher.

        It must be 16 (*AES-128)*, 24 (*AES-192*) or 32 (*AES-256*) bytes long.

        For ``MODE_SIV`` only, it doubles to 32, 48, or 64 bytes.
      mode (a ``MODE_*`` constant):
        The chaining mode to use for encryption or decryption.
        If in doubt, use ``MODE_EAX``.

    Keyword Args:
      iv (bytes/bytearray/memoryview):
        (Only applicable for ``MODE_CBC``, ``MODE_CFB``, ``MODE_OFB``,
        and ``MODE_OPENPGP`` modes).

        The initialization vector to use for encryption or decryption.

        For ``MODE_CBC``, ``MODE_CFB``, and ``MODE_OFB`` it must be 16 bytes long.

        For ``MODE_OPENPGP`` mode only,
        it must be 16 bytes long for encryption
        and 18 bytes for decryption (in the latter case, it is
        actually the *encrypted* IV which was prefixed to the ciphertext).

        If not provided, a random byte string is generated (you must then
        read its value with the :attr:`iv` attribute).
    """

使用案例

from Crypto.Cipher import AES
from Crypto.Util.Padding import pad,unpad
import base64,json

## 加密
def encrypt(s:str):
    # 准备加密器
    aes = AES.new(key=b'1234567890123456',mode=AES.MODE_CBC,iv=b'qwertyuioplkjhgf')
    #将需要加密的数据处理成字节
    bs = s.encode()
    # 要求数据的长度必须是16的倍数.不够的需要填充.
    bs_pad = pad(bs,16)  # 默认的填充方式 pkcs7
    # 加密
    mi_wen = aes.encrypt(bs_pad)

    #加密后是字节,需要使用base64编码后 还原成字符串
    ret = base64.b64encode(mi_wen).decode()
    return ret   #  rIRmEG7oqVCFOEvaCjTMlXH+BjhluQVp6l/Hq6guEHM=


## 解密
def decrypt(s:str):
    # 创建解密器
    aes2 = AES.new(key=b'1234567890123456',mode=AES.MODE_CBC,iv=b'qwertyuioplkjhgf')

    # 将密文转换成字节
    mi_bs = base64.b64decode(s)
    #解密
    ming_bs = aes2.decrypt(mi_bs)
    #解密后,去除填充---解码成字符串
    ret2 = unpad(ming_bs,16).decode('utf-8')
    return ret2

if __name__ == '__main__':
    dic = {
        "name": "xwl",
        "password": 18
    }
    s = json.dumps(dic,separators=(',', ':'))
    miwen = encrypt(s)
    print(f'miwen===>{miwen}')

    mingwen = decrypt(miwen)
    print(f'mingwen===>>>{mingwen}')


""""
运行结果
miwen===>rIRmEG7oqVCFOEvaCjTMlXH+BjhluQVp6l/Hq6guEHM=
mingwen===>>>{"name":"xwl","password":18}
"""

DES加密

  • 与AES几乎一致
from Crypto.Cipher import DES, AES, DES3
from Crypto.Util.Padding import pad, unpad
import base64

# s = "雪中悍刀行"
# des = DES.new(key=b'12345678', mode=DES.MODE_CBC, iv=b'55511122')
# result = des.encrypt(pad(s.encode("utf-8"), 8))
# print(base64.b64encode(result).decode())

# # DES解密
# s = "KTF6QlkTXPN1qhcBtm6mUzZh4XLqzJsw"
# des = DES.new(key=b'12345678', mode=DES.MODE_CBC, iv=b'55511122')
# ming_bs = des.decrypt(base64.b64decode(s))
# print(unpad(ming_bs, 8).decode("utf-8"))

标签:web,AES,16,08,DES,mode,bs,MODE
From: https://www.cnblogs.com/xwltest/p/17636449.html

相关文章

  • 20230816比赛
    T1矩形Description现在我们在一个平面上画了n个矩形。每一个矩形的两边都与坐标轴相平行,且矩形定点的坐标均为整数。现我们定义满足如下性质的图形为一个块:每一个矩形都是一个块;如果两个块有一段公共的部分,那么这两个块就会形成一个新的块,否则这两个块就是不同的。示......
  • 【web_逆向07】base64变种
    简介标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSISQL中已将“%”号用作通配符。解决方案为解决此问题,可采用一种用于URL的改进Base64编码,它在末尾填......
  • 5708: 逆序对 归并排序
    描述  给定 一个序列,求其逆序对的总数。所谓逆序对是指:序列a中存在两个元素a[i]和a[j],满足 i<j 且a[i]>a[j],则a[i]和a[j]为一个逆序对。  输入  第一行为正整数n(n<=100000)。第二行有n个正整数,最大不超过1000000。  输出  输出逆序对的总数。......
  • [代码随想录]Day19-二叉树part08
    题目:235.二叉搜索树的最近公共祖先思路:BST和普通二叉树不同的一点是可以根据特性来找最近公共祖先,只要找到第一个值比p大比q小(假设p<q)的节点返回即可。代码:/***Definitionforabinarytreenode.*typeTreeNodestruct{*Valint*Left*TreeNode......
  • 王道408---CO---存储系统知识点
    一、读写信号线一般是两根(如无特殊说明)二、如果DRAM采用复用技术,虽然地址线减半,但需要添加行片选线和列片选线三、SRAM与DRAM1、SRAM是六晶体管MOS(半导体材料),DRAM是电容2、SRAM依靠双稳态电路的两个稳定状态来分别存储0和1,DRAM依靠电容来存储信息四、U盘采用Flash存储技......
  • WebSocket_入门案例
           ......
  • day08-字符串part01
    344. 反转字符串详解classSolution{public:voidreverseString(vector<char>&s){intleft=0;intright=s.size()-1;while(left<=right){//chartmp=s[left];//s[left]=s[right];......
  • 2023.08.12 codeforces round 893 div2
    年轻人的第四场div2rank:8217solved:2ratingchange:+31newrating:1354A.Buttons题意:给定a,b,c三种按钮的数量,a按钮只能被Anna按,b按钮只能被Katie按,两个人都可以按c按钮,最后没有按钮可以按的人输,Anna先手,问谁是赢家;两个人肯定优先按c按钮,且Anna是先手,只需比较两人能按的按......
  • ASEMI整流桥GBU808和KBU808有什么区别
    编辑-ZASEMI整流桥GBU808和KBU808是两种常见的整流器件,它们在功能和性能方面有一些区别。  1.构造:GBU808和KBU808都是四个二极管连接而成的整流桥,但它们的封装形式略有不同。GBU808使用GBU-4封装,而KBU808使用KBU-4封装。 2.电流和电压能力:GBU808和KBU808......
  • ASEMI整流桥GBU808和KBU808有什么区别
    编辑-ZASEMI整流桥GBU808和KBU808是两种常见的整流器件,它们在功能和性能方面有一些区别。 1.构造:GBU808和KBU808都是四个二极管连接而成的整流桥,但它们的封装形式略有不同。GBU808使用GBU-4封装,而KBU808使用KBU-4封装。 2.电流和电压能力:GBU808和KBU808在电流和电......