zoukankan      html  css  js  c++  java
  • 2019“嘉韦思杯”3.30初赛一部分Write Up

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

    一、飞虎队(希尔密码)

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

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

    简要介绍希尔密码

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

    使用MATLAB进行计算。

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

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

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

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

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

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

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

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

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

    二、死亡真相

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

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

    表情包

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

    赛后...

    赛后剁手

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

  • 相关阅读:
    ffmpeg和opencv 播放视频文件和显示器
    ExtJS学习笔记:定义extjs类别
    debian软件安装基础(同tomcat案件)
    java逼出来的递归中间
    HDOJ 1047 Integer Inquiry
    BZOJ 3589 动态树 树链拆分+纳入和排除定理
    hdu 4884 TIANKENG’s rice shop(模拟)
    JQuery EasyUI学习框架
    excel
    Java和C#中String直接赋值与使用new创建(==与equals进行比较)的区别
  • 原文地址:https://www.cnblogs.com/hardcoreYutian/p/10628099.html
Copyright © 2011-2022 走看看