CTF-希尔加解密

news/2024/5/20 0:06:11 标签: CTF, python, 哈希算法

对于希尔加解密很多writeup都说用在线工具,所以研究了一下,写了一个方便的加解密python代码,根据给定的字母表及私钥字符串,尝试不同纬度不同重叠的加密矩阵输出加解密结果。运行效果如下:

代码文件Hill希尔加解密_final.py

python">import numpy as np
import string
# 导入自定义模块以创建矩阵和转换字符串
from util_create_matrix import create_matrix_from_list, create_numbers_from_string

# 定义了使用的字符集,包括所有小写字母、空格、逗号和句点
alphabet = "abcdefghijklmnopqrstuvwxyz ,."
# 密钥短语,用于生成加密/解密所需的密钥矩阵
key_phrase = "www.verymuch.net"

def mod_inverse(a, m):
    """
    计算模m下a的逆元。逆元是满足 (a * x) % m == 1 的整数x。
    """
    a = a % m
    for x in range(1, m):
        if (a * x) % m == 1:
            return x
    return None

def matrix_mod_inv(matrix, modulus):
    """
    计算给定矩阵在模modulus下的逆矩阵。这是通过先计算矩阵的行列式及其模逆,
    然后应用数学公式来实现的。
    """
    det = int(np.round(np.linalg.det(matrix)))  # 计算行列式并取整
    det_inv = mod_inverse(det, modulus)  # 计算行列式的模逆
    matrix_modulus_inv = (
        det_inv * np.round(det * np.linalg.inv(matrix)).astype(int) % modulus
    )
    return matrix_modulus_inv

def char_to_num(char):
    """
    将字符转换为对应的数字。这里将空格、逗号和句号也视为字符集的一部分。
    """
    if char == ' ':
        return 26
    elif char == ',':
        return 27
    el

http://www.niftyadmin.cn/n/5432016.html

相关文章

maven-compiler-plugin是Maven项目构建工具中的一个重要插件

maven-compiler-plugin是Maven项目构建工具中的一个重要插件,主要用于编译项目的源代码。在Maven项目中,如果没有特别指定,通常会使用maven-compiler-plugin的默认配置进行编译。然而,对于特定的项目需求,可能需要调整…

代码随想录 贪心算法-中等题目-序列问题

目录 376.摆动序列 738.单调递增的数字 376.摆动序列 376. 摆动序列 中等 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列…

如何在CasaOS系统玩客云中安装内网穿透工具实现远程访问内网主机下载资源

文章目录 1. CasaOS系统介绍2. 内网穿透安装3. 创建远程连接公网地址4. 创建固定公网地址远程访问 2月底,玩客云APP正式停止运营,不再提供上传、云添加功能。3月初,有用户进行了测试,局域网内的各种服务还能继续使用,但…

算法练习:二分查找

目录 1. 朴素二分查找2. 在排序数组中查找元素的第一个和最后一个位置3. 搜索插入位置4. x的平方根5. 山脉数组的峰值索引6. 寻找峰值7. 寻找旋转排序数组中的最小值8. 点名 1. 朴素二分查找 题目信息: 题目链接: 二分查找二分查找的使用前提为数据具有&…

ubuntu安装docker的详细教程

检查卸载老版本docker ubuntu下自带了docker的库,不需要添加新的源。 但是ubuntu自带的docker版本太低,需要先卸载旧的再安装新的。 注:docker的旧版本不一定被称为docker,docker.io 或 docker-engine也有可能,所以卸载的命令为: sudo apt-get remove -y docker docke…

git checkout不同分支时,为啥会把当前分支的修改内容也带到新分支里面?

git checkout不同分支时,为啥会把当前分支的修改内容也带到新分支里面? 当你在Git中从一个分支切换到另一个分支时,如果没有先将当前分支未提交的改动暂存或提交,这些改动会被带到新分支。这是因为Git的工作目录是共享的&#xf…

设计模式 — — 代理模式

一、是什么 代理模式(Proxy Pattern)是为一个对象提供一个代用品或占位符,以便控制对它的 生活场景: 租房、买房,比如链家等房屋中介机构,起到的作用就是代理 二、使用 const proxy new Proxy(target, …

cf(163)

D. Tandem Repeats? 找最长串联字串的长度 #include<iostream> #include<algorithm> #include<cstring> #include<queue> #include<vector> #include<map> using namespace std; typedef pair<int,int>PII; typedef long long ll…