2019“嘉韦思杯”3.30初赛一部分Write Up

同学们TQL。佩服李长兴同学的超神瓜皮思维。

一、飞虎队(希尔密码)

本题是我今天大部分时间的花费处。先百度学习了希尔密码,然后尝试手动计算逆矩阵和矩阵乘法,还求助于线性代数课本,可谓苦不堪言。

        做题千万条,数学第一条。线代学不好,老师两行泪。

简要介绍希尔密码

希尔密码是以矩阵的线性方式为加密方式。将26个字母分别对应0到25这26个数字(之前我还徘徊过A对应0还是1,想到取余数会有0,所以确定从0开始),明文排成一个含n个m维列向量(即mn矩阵)的矩阵M的格式。密钥K为nn矩阵。加密方式为:密文X=(明文M 乘 密钥K)Mod 26。解密方式为:明文M=(密钥K的逆矩阵K^-1 乘 密文X)Mod 26。

使用MATLAB进行计算。

一开始我也是手算的,然而徘徊于0和1如何抉择,列和行如何计算,算出的分数如何取整,负数如何化正,可谓是心力交瘁。最终我决定怒占室友电脑,使用MATLAB来进行计算问题,以把自己解放于思考更高层次的问题。
1.计算密钥的逆矩阵。下图中x为原密钥,xx为x的逆矩阵。

大家看图里那些小数哦,我手动算的时候是以3为底的分数,是完全匹配的。可是使用分数进行下面的计算会很伤脑筋啊。于!是!我找到了一篇深度好文,里面介绍了如何处理分数问题,具体的与矩阵的计算原理有关,这里我就采取了最小公倍数法,让xx矩阵乘上数27,则不会影响结果。

下一步呢,继续处理xx,手动把每一个数改成0到25的值,该取模的取模,该加上n倍26的加。

2.逆矩阵与密文相乘。下图中xx为密钥的逆矩阵,密文为a。

nia!这样就算出来了,然后大家都取个模(这里我是写了个C程序然后手动一个个输入算出的,别嫌笨||)

#include<stdio.h>
int main()
{
    int n;
    scanf("%d", &n);
    printf("%d\n", n%26);
    return 0;
}

手动把这些数按格式记在纸上!

然后!对照我们的字母数字表,ding!flag出现辣!


那么flag就是flag{hillisflagxx},结束。

二、死亡真相

那么下面这一题就完全是马老师@李长兴的功劳了。(为了凑题所以我把他解的题放在我WP上了:p)
首先用音频软件(我使用的是AU)打开文件,直接就看到了一个flag有木有。

得到flag:85a9d4517d4725_b9_8cbc9fd_554216
(让我想到了b站上有段时间臭名昭著的图像midi...)
然鹅啊,介并不是最终的flag。而且尝试了一些解码后也解不开。下面我就跪服马老师的想法了。他竟然把这里的下划线全都换成0(此处应有惊叹),然后md5解密就结束了。

所以答案是flag{hsd132456},完成。

赛后...

我和室友们又有新游戏可以玩了:)

原文地址:https://www.cnblogs.com/hardcoreYutian/p/10628099.html

时间: 2024-11-03 21:58:28

2019“嘉韦思杯”3.30初赛一部分Write Up的相关文章

2019嘉韦思杯线上初赛writeup

1 土肥原贤二 看到页面怀疑是sql注入,写了个4'进去就发生报错.could not to the database You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''4''' at line 1直接丢到sqlmap里id,flag20_welcome_19,20_welco

上海嘉韦思杯部分writeup

第二题 打开赛题,看到加密字符串,进行base64解密,发现是JSFUCK,再次解密,控制台得到flag. 第三题 打开频谱图得到flag,flag中有三个_,联想到音频文件详细信息中的三个zero,带入MD5解密得到flag. 第四题 打开赛题发现是加密字符串,进行15次base64解密,发现有栅栏规律,解密得到flag. 第六题 题目要求2秒内输入数学表达式结果,写脚本得到flag. #coding:utf-8 import requests improt re import sys rel

【大坑特坑】第六届华为“创新杯”编程大赛初赛题目(第五场)

简直没法吐槽华为的服务器质量了,登一次半小时,提交一次等半小时,然后第二个题的结果还不知道呢,服务器就挂了... 题目本身倒是还挺简单的. A题是鸡兔同笼问题: 给出鸡和兔子的头数和脚数(可能不对),让你判断鸡的个数和兔子的个数..小学经典问题. 关键是不合法的情况,总共有4种. 1.头比脚多.. 2.脚是奇数= = 3.脚>4*头或者脚<2*头. so.出来了. #include <iostream> #include <cstring> #include <c

单项奖金最高50万!2019年“逐梦杯”大学生创新创业大赛项目招募,全面开启!

深圳是创新创业的城市这里有数不清的机会和平台令无数创业者热血沸腾?大学生们2019年深圳 "逐梦杯"大学生创新创业大赛正式拉开帷幕啦!?总奖金共360万,单项奖最高50万! 这么丰厚的奖励,这么难得的机会,赶紧带着你的优秀创业项目来报名吧! 注意啦,注意啦,注意啦报名时间从即日起至5月31日赶紧来报名吧50万大奖拿回家项目详情请扫下方二维码▼▼▼ 原文地址:https://blog.51cto.com/14260752/2386839

2019 年百度之星&#183;程序设计大赛 - 初赛三

P.S:关于初赛二,在高铁上打代码真是奇怪的体验!!! 1003,1004的题解很不错,学习了! =========================================== 一开场把所有的题目看了一遍,这题面风格,感觉凉凉.还好,往下做时,题目不是太坑. 1002 floyd转dijkstra+堆优化,感觉是套路题了 1 #include <cstdio> 2 #include <cstdlib> 3 #include <cmath> 4 #include

2019年百度之星&#183;程序设计大赛 初赛一 题解

1001 Polynomial:若第一个多项式的次数大于第二个,就是1/0,若小于就是0/1,若等于就是第一个多项式最高次项系数/第二个多项式最高次项系数. 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #define rep(i,l,r) for (int i=(l); i<=(r); i++) 5 typedef long long ll; 6 using namespace st

2019 年百度之星&#183;程序设计大赛 - 初赛二

1001 度度熊与数字 #pragma comment(linker, "/STACK:36777216") #include <bits/stdc++.h> #define REP(i,n) for(int i=0;i<int(n);++i) #define FOR(i,a,b) for(int i=int(a);i<int(b);++i) #define DWN(i,b,a) for(int i=int(b);i>=int(a);--i) /// ty

蓝桥杯 BASIC 30 阶乘计算(大数)

[思路]:大数基本都是这思路,采用数组或者字符串,每个数采用倒序的方式从头开始存储.每次进位进到下一位上. [AC代码]:两个数组来回颠倒. #include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <cmath> #include <iomanip> using namespace std; #define MAX 3

蓝桥杯 BASIC 30 高精度加法(大数)

[思路]:大数处理都一样. [AC代码]:代码细节可以美化一下. #include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <cmath> #include <iomanip> using namespace std; #define MAX 100+10 int main() { //freopen("in.