PC微信协议之AES-192-GCM算法

作者:AiXed日期:2025/11/16

from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes from cryptography.hazmat.primitives import constant_time from cryptography.hazmat.backends import default_backend import os import binascii

===============================

AES-192-GCM 加密函数

===============================

def aes_192_gcm_encrypt(key: bytes, plaintext: bytes, associated_data: bytes = b""): """ 使用 AES-192-GCM 进行加密 :param key: 24 字节密钥 :param plaintext: 明文数据 :param associated_data: 附加认证数据(可选) :return: (nonce, ciphertext, tag) """ if len(key) != 24: raise ValueError("AES-192 需要 24 字节密钥")

# 生成 12 字节随机 nonce(GCM 推荐长度)
nonce = os.urandom(12)

encryptor = Cipher(
    algorithms.AES(key),
    modes.GCM(nonce),
    backend=default_backend()
).encryptor()

# 添加 AAD(可选)
encryptor.authenticate_additional_data(associated_data)

# 执行加密
ciphertext = encryptor.update(plaintext) + encryptor.finalize()

# 返回 nonce、密文、tag
return nonce, ciphertext, encryptor.tag

===============================

AES-192-GCM 解密函数

===============================

def aes_192_gcm_decrypt(key: bytes, nonce: bytes, tag: bytes, ciphertext: bytes, associated_data: bytes = b""): """ 使用 AES-192-GCM 进行解密 :param key: 24 字节密钥 :param nonce: 加密时的随机 nonce :param tag: GCM 认证标签 :param ciphertext: 密文数据 :param associated_data: 附加认证数据(可选) :return: plaintext """ decryptor = Cipher( algorithms.AES(key), modes.GCM(nonce, tag), backend=default_backend() ).decryptor()

decryptor.authenticate_additional_data(associated_data)

# 执行解密
plaintext = decryptor.update(ciphertext) + decryptor.finalize()
return plaintext

===============================

示例测试

===============================

if name == "main":

key_hex = "35FE9BD1DFF7FD1939382935F4AEEF62E2C7895D8F441305"
key = bytes.fromhex(key_hex)

plaintext = b"Hello, AES-192-GCM Encryption!"
aad = b"optional_authenticated_data"

print("原文:", plaintext)

# 加密
nonce, ciphertext, tag = aes_192_gcm_encrypt(key, plaintext, aad)
print("Nonce:", nonce.hex())
print("Ciphertext:", ciphertext.hex())
print("Tag:", tag.hex())

# 解密
decrypted = aes_192_gcm_decrypt(key, nonce, tag, ciphertext, aad)
print("解密结果:", decrypted)

# 校验
print("是否一致:", constant_time.bytes_eq(plaintext, decrypted))

PC微信协议之AES-192-GCM算法》 是转载文章,点击查看原文


相关推荐


Lua 的简介与环境配置
hubenchang05152025/11/15

#Lua 的简介与环境配置 Lua 是一个简洁、轻量、可扩展的脚本语言;有着相对简单的 C 语言 API,因而而很容易嵌入应用中。很多应用程序使用 Lua 作为自己的嵌入式脚本语言,以此来实现可配置性、可扩展性。 #安装 Lua Lua 官方仅以源码形式进行发布,因为其使用纯 ISO C 实现,编译非常轻松。 首先从 Lua 的官方网站 下载源码,以下是部分历史版本的下载链接: Lua 版本发布日期哈希值(sha256)lua-5.4.82025-05-214f18ddae154e793e46e


【AI应用探索】-10- Cursor实战:小程序&APP - 下
bblb2025/11/14

【AI应用探索】-10- Cursor实战:小程序&APP - 下 1 开发商城微信小程序1.1 微信小程序发布流程准备1.2 Cursor需求设计1.3 数据库准备1.4 生成对应代码1.4.1 小程序前端1.4.2 小程序后端API1.4.3 商家后端 2 开发安卓APP2.1 创建项目2.2 Cursor介入2.3 源码开放 1 开发商城微信小程序 1.1 微信小程序发布流程准备 因为我之前开发过微信小程序,所以上一个小程序的信息还在这里留存着,所以有这些信息


flutter项目老是卡在Running Gradle task ‘assembleRelease‘......
Sindyue2025/11/13

调试开发: 1. adb logcat | grep "tag flutter" 2. flutter clean flutter run --verbose 可以看到下载卡在哪里了 Set environment variables set PUB_HOSTED_URL=https://pub.flutter-io.cn set FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn Then run your Flutter com


Python 的内置函数 hex
IMPYLH2025/11/11

Python 内建函数列表 > Python 的内置函数 hex Python 的内置函数 hex() 用于将一个整数转换为以 “0x” 为前缀的小写十六进制字符串。该函数接受一个整数作为参数,并返回对应的十六进制字符串表示。 详细说明 函数语法: hex(x) x:必须是一个整数对象(可以是 Python 的 int 类型,或者实现了 __index__() 方法的自定义对象) 返回值: 返回字符串类型,格式为 "0x" 开头,后面跟随十六进制数字(a-f 使用小写字母


C++ 图片加背景音乐的处理
laocooon5238578862025/11/9

//music_manager.h #pragma once // 播放背景音乐 void playBackgroundMusic(const char* music, bool repeat = false, int volume = -1); // 暂停当前播放的音乐 void pauseBackgroundMusic(); // 恢复暂停的音乐 void resumeBackgroundMusic(); // 停止并关闭当前音乐 void stopBackgroundMusic()


让数据库“听懂“人话:Text2Sql.Net 深度技术解析
许泽宇的技术分享2025/11/6

从自然语言到SQL的智能转换之旅——基于.NET与Semantic Kernel的企业级实践 📖 引言:当AI遇见数据库 想象一下这样的场景:产品经理走到你面前说"帮我查一下上个月销售额最高的前10个产品",你不用打开SQL客户端,不用回忆表结构,甚至不用写一行代码,只需要把这句话原封不动地"告诉"数据库,几秒钟后,结果就呈现在眼前。 这不是科幻,这就是 Text2Sql.Net 正在做的事情。 在数据驱动的时代,SQL依然是连接人与数据的桥梁。但让我们面对现实:不是每个人都会


Redis(98) Redis的安全更新如何进行?
Victor3562025/11/2

保持Redis的安全更新至关重要,以防止潜在的安全漏洞和攻击。以下是详细的Redis安全更新步骤和相关代码示例。 1. 检查当前Redis版本 首先,检查当前安装的Redis版本。 redis-server --version 或通过Redis CLI: redis-cli info server | grep redis_version 2. 备份Redis数据 在进行任何更新之前,务必备份Redis数据,以防止数据丢失。 手动触发RDB快照 redis-cli BGSAVE 备份RDB


Python 的内置函数 eval
IMPYLH2025/10/30

Python 内建函数列表 > Python 的内置函数 eval Python 的内置函数 eval() 是一个强大的功能函数,用于执行动态生成的 Python 表达式。它的完整语法是: eval(expression, globals=None, locals=None) 其中: expression 是必需参数,表示要执行的字符串形式的 Python 表达式globals 是可选的全局变量字典locals 是可选的局部变量字典 示例: x = 10 result = eval


Spring Boot 启动流程源码解析
湮酒2025/10/28

⚙️Spring Boot 启动流程源码解析 文章目录 ⚙️Spring Boot 启动流程源码解析🎯 一、Spring Boot 启动流程概览🔄 启动流程全景图⏱️ 启动阶段时间线 🏗️ 二、SpringApplication 初始化阶段🚀 SpringApplication.run() 入口分析🔧 应用类型推断机制📦 工厂加载机制 ⚙️ 三、启动前准备:Banner、Environment、Listener🚀 run() 方法执行流程🎨 Banner 打印机


BUYCOIN:以社区共治重构加密交易版图,定义交易所3.0时代
焦点链创研究所2025/10/25

2025年,全球加密市场在合规化浪潮与信任重建需求的双重驱动下,正经历一场深刻的范式革命。当FTX暴雷事件的余波仍在引发行业对中心化模式的反思,当传统交易所“少数人受益”的分配壁垒愈发凸显,持有美国MSB合规牌照的BUYCOIN交易所横空出世。它以“非托管架构+DAO治理”为双引擎,以“全民持股”为核心内核,不仅破解了传统交易所的信任难题与价值分配困局,更在加密行业迈入万亿美元规模的关键节点,为全球用户勾勒出“共建、共治、共享”的交易新生态。 破局者登场:瞄准行业沉疴的范式革新 当前加密市场呈

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0