python源码 PBOCMaster MAC的计算函数及计算过程 2des

注意最后一步要用整个key加密

计算过程:

MAC: PBOC-MAC DES算法
密钥 长度16(0x10)字节
57 75 20 4D 69 61 6F 6A 75 6E 40 47 26 44 43 11
初始向量 长度8(0x08)字节
00 00 00 00 00 00 00 00
数据 长度74(0x4A)字节
43 48 45 4E 48 41 4F 2D 50 43 7C 42 46 45 42 46 42 46 46 30 30 30 33 30 36 43 33 7E 39 42 50 30 50 44 32 43 4E 37 30 31 36 33 36 36 49 30 30 34 33 7C 32 30 32 34 30 31 31 31 7C 32 30 32 35 30 31 30 31 7C 38 31 39 31 7C 30
结果 长度8(0x08)字节
40 89 81 9D 3D 99 1C C7

计算过程
强制补0x80再用0x00补齐8的倍数得到4348454E48414F2D50437C424645424642464630303033303643337E39425030504432434E3730313633363649303034337C32303234303131317C32303235303130317C383139317C30800000000000
后续步骤与X99/X9.19一样

0000000000000000异或4348454E48414F2D得到4348454E48414F2D

用5775204D69616F6A对4348454E48414F2D进行DES加密得到9E21A468008DB6B4

9E21A468008DB6B4异或50437C4246454246得到CE62D82A46C8F4F2

用5775204D69616F6A对CE62D82A46C8F4F2进行DES加密得到196C0FEDC9D24187

196C0FEDC9D24187异或4246463030303330得到5B2A49DDF9E272B7

用5775204D69616F6A对5B2A49DDF9E272B7进行DES加密得到C41CE10A60F953E1

C41CE10A60F953E1异或3643337E39425030得到F25FD27459BB03D1

用5775204D69616F6A对F25FD27459BB03D1进行DES加密得到A31ED80C9E6D58F7

A31ED80C9E6D58F7异或504432434E373031得到F35AEA4FD05A68C6

用5775204D69616F6A对F35AEA4FD05A68C6进行DES加密得到82024776C27DDC18

82024776C27DDC18异或3633363649303034得到B43171408B4DEC2C

用5775204D69616F6A对B43171408B4DEC2C进行DES加密得到788739F54CE3DEF2

788739F54CE3DEF2异或337C323032343031得到4BFB0BC57ED7EEC3

用5775204D69616F6A对4BFB0BC57ED7EEC3进行DES加密得到6A808D8F7991B2FC

6A808D8F7991B2FC异或31317C3230323530得到5BB1F1BD49A387CC

用5775204D69616F6A对5BB1F1BD49A387CC进行DES加密得到B7EFC86C359642EA

B7EFC86C359642EA异或3130317C38313931得到86DFF9100DA77BDB

用5775204D69616F6A对86DFF9100DA77BDB进行DES加密得到FEC7A7C308C3357E

FEC7A7C308C3357E异或7C30800000000000得到82F727C308C3357E

用5775204D69616F6A756E404726444311对82F727C308C3357E进行DES加密得到4089819D3D991CC7

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

from Crypto.Cipher import DES, DES3def des_encrypt(data, key):"""DES加密函数,返回加密后的字节数据。"""cipher = DES.new(key, DES.MODE_ECB)return cipher.encrypt(data)def des3_encrypt(data, key):"""双倍长密钥的DES3加密函数,返回加密后的字节数据。"""cipher = DES3.new(key, DES3.MODE_ECB)return cipher.encrypt(data)def xor_bytes(a, b):"""对两个字节序列进行异或操作,返回结果字节序列。"""return bytes(x ^ y for x, y in zip(a, b))def pboc_mac(data, key, iv):"""PBOC MAC计算函数:param data: 原始数据,字节序列:param key: 加密密钥,字节序列,长度必须为16字节:param iv: 初始向量,字节序列,长度为8字节:return: 计算出的MAC值,字节序列"""# 确保密钥长度为16字节,切分成两个8字节的密钥key1, key2 = key[:8], key[8:]# 强制补0x80再用0x00补齐8的倍数data += b'\x80'data += b'\x00' * ((8 - len(data) % 8) % 8)print(f"补齐后的数据: {data.hex().upper()}")# 逐步进行异或和DES加密操作block = ivprint(f"初始向量: {block.hex().upper()}")final_mac=  b''for i in range(0, len(data), 8):block = xor_bytes(block, data[i:i + 8])print(f"异或后第{i // 8 + 1}块: {block.hex().upper()}")if i//8+1 != len(data)//8:        block = des_encrypt(block, key1)print(f"加密后第{i // 8 + 1}块: {block.hex().upper()}")else:# 最后一步用key1-key2双倍长密钥对结果进行DES-EDE加密print("block=",block.hex().upper())print("key=",(key).hex().upper())final_mac = des3_encrypt(block, key)print(f"最终加密结果: {final_mac.hex().upper()}")return final_mac# 示例数据
key = bytes.fromhex('5775204D69616F6A756E404726444311')
iv = bytes.fromhex('0000000000000000')
data = bytes.fromhex('1148454E48414F2D50437C424645424642464630303033303643337E39425030504432434E3730313633363649303034337C32303234303131317C32303235303130317C383139317C30')# 计算MAC
mac = pboc_mac(data, key, iv)# 打印结果
print("计算的MAC:", mac.hex().upper())# 验证结果是否正确
expected_mac = bytes.fromhex('B519448B9A29F920')
print("计算是否正确:", mac == expected_mac)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/53234.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python股票接口实现量化交易的优势是什么

炒股自动化:申请官方API接口,散户也可以 python炒股自动化(0),申请券商API接口 python炒股自动化(1),量化交易接口区别 Python炒股自动化(2):获取…

MSP430F149实现1.8寸TFT_LCD真彩屏显示

目录 一、功能实现 二、设备准备 三、接线表设计 四、代码实现 五、实现效果 六、代码链接 一、功能实现 实现1.8寸TFT_LCD真彩屏显示。显示数字、图片、字符串等。 二、设备准备 1.TFT_LCD真彩屏(1.8寸) 该真彩屏使用SPI通信。 2.MSP430F149开…

CSRF,SSRF和重放攻击的区别

CSRF是跨站请求伪造攻击,由客户端发起 SSRF是服务器端请求伪造,由服务器发起 重放攻击时将截获的数据包进行重放,达到身份认证等目的 三种是不同的网络安全攻击方式,他们在攻击方式,目标,影响以及防御策略…

微服务CI/CD实践(五)Jenkins Docker 自动化构建部署Node服务

微服务CI/CD实践系列: 微服务CI/CD实践(一)环境准备及虚拟机创建 微服务CI/CD实践(二)服务器先决准备 微服务CI/CD实践(三)gitlab部署及nexus3部署 微服务CI/CD实践(四&#xff09…

【软件设计】常用设计模式--策略模式

软件设计模式(三) 策略模式(Strategy Pattern)1. 概念2. 模式结构3. UML 类图4. 实现方式C# 示例步骤1:定义策略接口步骤2:实现具体策略类步骤3:实现上下文类步骤4:使用策略模式 Jav…

.NET/C#⾯试题汇总系列:基础语法

1. 字符串中string strnull和string str""和string strstring.Empty的区别? string str null;:这种方式声明了一个字符串变量str,并将其初始化为null。这意味着str不指向任何实际的字符串对象。如果你试图访问str的属性或方法&…

HTTPS SEO优势

搜索引擎优化(SEO)是提高网站在搜索引擎结果页(SERP)中的排名以吸引更多访问者的过程。HTTPS作为网站安全的标准,对SEO有着直接和间接的优势: 1. HTTPS作为排名信号 2014年,Google宣布HTTPS成…

穿越机的应用行业!!!

1. 军事领域 侦察与目标搜索:穿越机能够快速穿越危险区域,执行侦察任务,实时获取战场信息,对敌方目标进行精确搜索和定位。其灵活性和机动性使其成为战场上的重要侦察工具。 目标摧毁:经过改装的穿越机可挂载火箭弹或…

华三防火墙第-安全策略02

一 安全策略的图解 安全策略是一种根据报文的属性信息对报文进行精细化转发控制的智能安全防护措施。它 融合了多维度精确报文识别、深度报文检测、安全动作执行、智能策略分析、应用风险调 优等多种安全防护功能,为网络的安全性提供全方位保障。 安全策略运行原理 安全策略对…

CSS实现文字环绕圆形展示

展示区域 代码区域 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><s…

ubuntu20.04搭建kubernetes1.28.13集群配置calico网络插件

写在前面 这里是我在搭建过程中从某站找到的教学视频,搭载的都是最新的,大家可以参考一下 搭建kubernetes集群学习视频: 视频链接。最后面会有我遇见报错信息的所有连接和解决方案,自行查看 不说废话,直接开搭 搭建集群大纲 一、三台虚拟机的初始化 二、三台虚拟机连接…

[240905] 如何使用 JAX 和 Equinox 构建图卷积网络 | Cascadia 字体家族迎来新成员

目录 如何使用 JAX 和 Equinox 构建图卷积网络1 使用邻接矩阵1.1 邻接矩阵表示法1.2 图卷积层实现1.3 计算过程解释 2 使用边列表2.1 边列表表示法2.2 图卷积层实现2.3 代码解析&#xff1a;jax.ops.segment_sum2.4 计算节点度数示例2.5 边列表表示法的优势 3 模型训练3.1 任务…

VTK平面切割

文章目录 一、vtkClipPolyData二、CapClip三、SolidClip四、vtkClipClosedSurface 本文的主要内容&#xff1a;简单介绍VTK中通过平面切割模型的相关功能。 哪些人适合阅读本文&#xff1a;有一定VTK基础的人。 一、vtkClipPolyData VTK官网描述&#xff1a; vtkClipPolyData使…

解决AbortController中断请求无法再次请求

示例代码 express代码 const express require(express) const app express()//导入cors跨域中间件 const cors require(cors) // 全局注册&#xff0c;加前缀 app.use(cors())app.get(/list, (req, res) > {// 直接返回对象console.log(接收到的参数是, req.query)//结…

一个平台重要的规则改了!

大家好&#xff0c;我是凡人小哥。 是一个不黑、不吹、不跟风、有知识、有骨气的五好小号主。 现在是凌晨1点13分&#xff0c;就在昨天微信公众平台又又又调整了&#xff0c;可能朋友们还在想是不是又要严格了&#xff1f;这次恰恰相反&#xff0c;腾讯把注册微信公众号的门槛…

F - Simplified Reversi 矩阵侧边视角 修改

1 行修改的时候只&#x1f525;影响的是哪些位置 因为Queries are pairwise distinct. 也就是当前行修改过之后 当前行就不会重复修改。额。实际上如果没有这个条件也无所谓的 我们可以用一个vis来判重就行 2 用什么东西可以维护这样的区间修改 主要还是行列间的 查询和修改的互…

【Linux网络编程八】实现最简单Http服务器(基于Tcp套接字)

基于TCP套接字实现一个最简单的Http服务器 Ⅰ.Http请求和响应格式1.请求格式2.响应格式3.http中请求格式中细节字段4.http中响应格式中细节字段 Ⅱ.域名ip与URLⅢ.web根目录Ⅳ.Http服务器是如何工作的&#xff1f;一.获取请求二.分析请求2.1反序列化2.2解析url 三.构建响应3.1构…

RK3588开发板利用udp发送和接收数据

目录 1 send.cpp 2 receive.cpp 3 编译运行 4 测试 1 send.cpp #include <iostream> #include <string> #include <cstring> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> //…

Nginx源码阅读1-内存池

首先我们来看一下他的一个基础组件&#xff1a;内存池组件。为什么先从内存池开始呢&#xff0c;因为后面 nginx 的内置数据结构&#xff0c;如&#xff1a;array&#xff0c;string 等都是从内存池分配的。 为什么需要内存池呢&#xff1f;在高并发的前提下&#xff0c;会大量…

【机器学习】K近邻

2. K近邻 K近邻算法&#xff08;KNN&#xff09;的基本思想是通过计算待分类样本与训练集中所有样本之间的距离&#xff0c;选取距离最近的 K 个样本&#xff0c;根据这些样本的标签进行分类或回归。KNN 属于非参数学习算法&#xff0c;因为它不假设数据的分布形式&#xff0c…