前言
上篇文章介绍了实数域上的线性代数求解可逆矩阵的方法,但有时候我们有更复杂的需求,如在有限域上求解可逆矩阵,有限域是一个很有意思的东西,它的知识可见这篇文章
今天我们简单描述如何在GF(2)有限域上求解4X4矩阵的可逆矩阵。
数据结构
总所周知,GF(2)上的加法和乘法可以分别用异或(^)和逻辑与(&)来表示,因此,我们可以将矩阵中的每一行都可以被定义为一个数字,而不是一个二进制数组。这样做除了内存成本外,运行也会更高效。因为行上的操作比列上的操作更快,例如,两个8位向量之间的乘法(即,向量的内乘)需要GF(2)域上的8次乘法和7次加法。但是如果两个向量定义为单字节数字,则部分乘法的运算将减少为1个逻辑与。类似地,向量加法也可以减少为1个异或操作。
在C语言中我们使用结构体来定义4x4矩阵,我们将矩阵每一行看作一个数,那么实现代码如下:
typedef unsigned char uint8_t;
typedef struct M4
{
uint8_t M[4];
}M4;
随机生成GF(2)上4X4的矩阵
使用时间作种子 srand(time(NULL)) ,让rand() 产生的随机数。因为我们将4X4矩阵的每一行看作一个数,而一个数只有4个bit,所以将rand()%16,取值范围为0-15.
#include<stdlib.h>
#include<time.h>
void GetRandMatrix4(M4 *MT) {
srand((unsigned int)time(NULL));
for (int i = 0; i < 4; i++)
{
(*MT).M[i]=rand()%16;
}
}
判断GF(2)上有限域矩阵是否可逆
跟上篇文章的求解思路是一样,只不过现在,4x4矩阵中所有元素为0和1,我们不需要考虑系数,并且我们把一行看成一个数,需要分别与0x08, 0x04, 0x02, 0x01进行逻辑与操作提取相应的比特位。
实现代码如下:
int is_invert(M4 *MT) {
int flag;
M4 temp;
copyM4(MT, &temp);
int row_index;
//消除为下三角矩阵
for (int k = 0; k < 4; k++) {
if ((temp.M[k] & idM4[k]) != 0) {
for (int i = k + 1; i < 4; i++)
{
if ((temp.M[i] & idM4[k]) !=0) {
temp.M[i] = temp.M[i] ^ temp.M[k];
}
}
}
else {
flag = 1;
for (int i = k + 1; i < 4; i++) {
if ((temp.M[i] & idM4[k]) != 0) {
swap4(i, k,&temp);
flag = 0;
break;
}
}
if (flag) {
printf(“\n矩阵不可逆\n”);
return 0; }
for (int i = k + 1; i < 4; i++)
{
if ((temp.M[i] & idM4[k]) != 0) {
temp.M[i] = temp.M[i] ^ temp.M[k];
}
}
}
}
//判断对角线是否为0
for (int i = 0; i < 4; i++) {
if ((temp.M[i] & idM4[i]) == 0)
{
printf(“\n矩阵不可逆\n”);
return 0;
}
}
return 1;
}
求GF(2)上有限域矩阵的可逆矩阵
在矩阵可逆的前提下,我们可以计算GF(2)有限域上的可逆矩阵,需要把矩阵扩展为
[
M
∣
E
]
[M|E]
[M∣E],然后经过变化变为
[
E
∣
M
−
1
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!
王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。
对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!
【完整版领取方式在文末!!】
93道网络安全面试题
内容实在太多,不一一截图了
黑客学习资源推荐
最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
😝朋友们如果有需要的话,可以联系领取~
1️⃣零基础入门
① 学习路线
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
② 路线对应学习视频
同时每个成长路线对应的板块都有配套的视频提供:
2️⃣视频配套工具&国内外网安书籍、文档
① 工具
② 视频
③ 书籍
资源较为敏感,未展示全面,需要的最下面获取
② 简历模板
因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!**](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算