CTF-希尔加解密

CTF-加密与解密(六) 声明:以下CTF题均来自网上收集,在这里主要是给新手们涨涨见识,仅供参考而已。需要题目数据包的请私信或在下方留言。 11.Hash还原 (来源:网络) 1.关卡描述 小明一直将电脑密码的Hash值写在标签纸上,结果一不小心墨水撒到了上面,只能看到前十位是c2979c7124,另外小明记得他的密码是4位的数字加字母,你能帮小明恢复密码的Hash值吗?(密码的Hash值即为Flag值) 2.解题步骤 2.1 通过分... 阅读详情

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

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

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
    elif char == '.':
        return 28
    else:
        return string.ascii_lowercase.index(char)

def num_to_char(num):
    """
    将数字转换回对应的字符。与char_to_num函数相对应。
    """
    if num == 26:
        return ' '
    elif num == 27:
        return ','
    elif num == 28:
        return '.'
    else:
        return string.ascii_lowercase[num]

def prepare_text(text, block_size):
    """
    准备文本以适应加密/解密过程,确保文本长度是block_size的倍数,不足部分以'x'填充。
    """
    while len(text) % block_size != 0:
        text += 'x'
    return text

def text_to_numbers(text):
    """
    将文本字符串转换为数字序列,每个字符映射到其在字母表中的位置。
    """
    return [char_to_num(char) for char in text]

def numbers_to_text(numbers):
    """
    将数字序列转换回文本字符串,每个数字映射回其对应的字符。
    """
    return ''.join(num_to_char(number) for number in numbers)

def hill_encrypt_decrypt(text, key_matrix, operation="encrypt"):
    """
    执行希尔加密或解密操作。根据操作类型,此函数使用key_matrix直接加密,
    或首先计算其逆矩阵进行解密。
    """
    block_size = key_matrix.shape[0]  # 确定密钥矩阵的大小,用于分块大小
    text = prepare_text(text, block_size)  # 根据分块大小调整文本长度
    text_numbers = text_to_numbers(text)  # 将文本转换为数字序列
    result = []  # 存储加密或解密结果的数字序列

    # 如果是解密操作,计算密钥矩阵的逆矩阵
    if operation == "decrypt":
        key_matrix = matrix_mod_inv(key_matrix, 29) 

    # 对每个文本块执行矩阵乘法和模运算
    for i in range(0, len(text_numbers), block_size):
        block = np.array(text_numbers[i:i+block_size])
        encrypted_block = np.dot(key_matrix, block) % 29  # 模29保证结果在字母表范围内
        result.extend(encrypted_block)
    return numbers_to_text(result)  # 将数字序列转换回文本

# 主函数,负责用户交互和调用加密/解密函数
def main():
    choice = input("请选择操作:\n1. 加密\n2. 解密\n")  # 用户选择加密还是解密
    text = input("请输入明文:" if choice == '1' else "请输入密文:")  # 获取用户输入的文本
    key_numbers = create_numbers_from_string(alphabet, key_phrase, 0)  # 根据密钥短语生成密钥数字序列
    
    # 尝试不同的密钥矩阵维度和重叠度进行加密/解密
    for dim in range(2, 5):  # 维度从2到4
        for overlap in range(1, 5):  # 重叠度从1到4
            if overlap > dim:
                break  # 如果重叠度大于维度,则不再尝试
            try:
                key_matrix = np.array(create_matrix_from_list(key_numbers, dim, overlap))
                if choice == '1':
                    encrypted = hill_encrypt_decrypt(text, key_matrix, "encrypt")
                    print(f"使用dim={dim}, overlap={overlap}加密后的密文:{encrypted}")
                else:
                    decrypted = hill_encrypt_decrypt(text, key_matrix,"decrypt")
                    print(f"使用dim={dim}, overlap={overlap}解密后的明文:{decrypted}")
            except ValueError as e:
                print(e)
                break  # 如果出现异常,则停止尝试当前维度和重叠度的组合

if __name__ == "__main__":
    main()  # 运行主函数

'''
请选择操作:
1. 加密
2. 解密
1
请输入明文:love and peaceee
使用dim=2, overlap=1加密后的密文:....vveeddbbqqcc
使用dim=2, overlap=2加密后的密文:....vveeddbbqqcc
使用dim=3, overlap=1加密后的密文: cgweozrcmhmrik, q
使用dim=3, overlap=2加密后的密文: hcwwezhrmmhrmi,u 
使用dim=3, overlap=3加密后的密文:   wwwzzzmmmrrr,,,
使用dim=4, overlap=1加密后的密文:waoootu.epj,nv o
使用dim=4, overlap=2加密后的密文:wspooq,uedhjnyt 
使用dim=4, overlap=3加密后的密文:wesaonqte.dpnjyv
使用dim=4, overlap=4加密后的密文:wwwwooooeeeennnn

1. 加密
2. 解密
2
请输入密文:waoootu.epj,nv o
Singular matrix
使用dim=3, overlap=1解密后的明文:tpzhhnkhfxvqotthau
使用dim=3, overlap=2解密后的明文:ftgczahelg .ielcjq
Singular matrix
使用dim=4, overlap=1解密后的明文:love and peaceee
使用dim=4, overlap=2解密后的明文:e.nlnldaayiekhkb
使用dim=4, overlap=3解密后的明文:znwwvkzandgqvdex
Singular matrix
'''

代码文件util_create_matrix.py

def create_matrix_from_list(numbers, dim=4, overlap=1):
    """
    根据提供的数字列表、矩阵维度和重叠度,生成指定维度的矩阵。
    
    参数:
    - numbers: 数字列表,用于填充矩阵。
    - dim: 整数,表示矩阵的维度(例如2x2, 3x3, 4x4等)。
    - overlap: 整数,指定相邻行之间的重叠数字数量。
    
    返回:
    - 生成的矩阵,为dim x dim大小。如果提供的数字不足以填满矩阵,返回错误信息。
    """
    # 计算根据维度和重叠度需要的数字总数
    total_numbers_needed = dim * dim - (dim - 1) * overlap

    # 如果提供的数字不足以构成矩阵,返回错误信息
    if len(numbers) < total_numbers_needed:
        return "提供的数字不足以形成指定维度的矩阵。"

    # 构造矩阵
    matrix = []
    for i in range(dim):
        start_index = i * (dim - overlap)  # 计算当前行起始数字的索引
        end_index = start_index + dim  # 计算当前行结束数字的索引
        row = numbers[start_index:end_index]  # 提取当前行的数字
        matrix.append(row)  # 将当前行添加到矩阵中

    return matrix

# 示例:使用整数参数调用函数并打印结果
numbers_list = [22, 22, 22, 28, 21, 4, 17, 24, 12, 20, 2, 7, 28, 13, 4, 19]
dim = 4  # 矩阵的维度
overlap = 1  # 行之间的重叠数字数量
matrix = create_matrix_from_list(numbers_list, dim, overlap)
print(matrix)

def create_numbers_from_string(alphabet, key_string, start=0):
    """
    根据给定的字母表和字符串,返回一个数字列表,表示字符串中每个字符在字母表中的位置。
    位置计数从start参数指定的数字开始。

    参数:
    - alphabet: 字符串,定义可用字符的序列。
    - key_string: 字符串,需要转换为数字列表的文本。
    - start: 整数,数字列表的起始值,默认为0。

    返回:
    - 数字列表,其中包含key_string中每个字符对应的位置。
    """
    return [alphabet.index(char) + start for char in key_string]

# 示例:将字符串转换为数字列表并打印结果
alphabet = "abcdefghijklmnopqrstuvwxyz ,."
print(create_numbers_from_string(alphabet, "www.verymuch.net", 0))

哈希拓展攻击CTF题做法 kali下载相关工具hash-ext-attack:hash拓展题目特征:2023楚慧杯upload_shell实验吧之让我进去:前言:具体怎么加密解密补位的原理我不懂,深入理解的部分我在文末挂了链接,以下也只是我做题的结论和通解,可能不准确(但是做题还挺准确),有错误欢迎指出:是在密码加密过程中引入的一个随机值,它与密码结合使用,目的是增加密码的复杂性和安全性。在密码加密中,常见的做法是将用户提供的密码进行哈希处理,然后存储哈希值而不是明文密码 阅读详情

相关推荐

CTF工具集

关于ctf比赛的话,如果是平时自己练习,那的确是可以各种在线的解密、破解、分析工具随便用的,但如果到了正式比赛就可能只会让你连接赛组特定的内网,到时候就只能依赖本地的一些工具和资料了。 所以这里就将一些离线和在线的资源整理一下,不全面,但如果以后找到更好的资源也是会继续填充的。 离线资源: 一 合集包系列: 1.CTFToolkit工具包(工具相对来说比较全面的工具包,但忘记以前是在哪儿下载的了...

Deeeelete的博客 4558

希尔密码详解

翻译英文的希尔密码教程

lcn463365355的博客 1万+

CTF-Crypto 密码原理及解密方法

常见的CTF-Crpto密码原理及解密工具网址

yifijhjh的博客 3300

希尔密码的加密、解密与破解

简介 希尔密码是运用基本矩阵论原理的替换密码,由Lester S. Hill在1929年发明。 每个字母当作26进制数字:A=0, B=1, C=2… 一串字母当成n维向量,跟一个n×n的矩阵相乘,再将得出的结果模26。(注意用作加密的矩阵(即密匙)在 必须是可逆的,否则就不可能解码。只有矩阵的行列式和26互质,才是可逆的。) 例子: 加密: 密文向量 = 密钥矩阵 * 明文向量 (mod 26) python实现: import numpy as np m = 'YOURPINNOISFOURONETW

Pioo_的博客 9838

用 Python 实现希尔密码算法

希尔密码算法是一种古老而经典的加密方式,它采用了多次迭代加密的方法,使得密文的可读性非常低。在本文中,我们将会使用 Python 语言来实现希尔密码算法,并提供完整的源代码。希尔密码算法的原理很简单,就是将明文按照固定的规则分组,然后在每个分组内部做一个简单的加密操作,接着再进行多次迭代,最终得到密文。值得注意的是,在实际应用中,我们需要保证密钥的机密性,不要把密钥泄露出去,否则就会导致整个加密过程失去了保密性。通过使用 Python 语言,我们可以很容易地实现这个算法,并得到加密后的密文和解密后的明文。

qq_37934722的博客 570

hill密码,加密过程

希尔密码(Hill Cipher)是运用基本矩阵论原理的替换密码,由Lester S. Hill在1929年发明。每个字母当作26进制数字:A=0, B=1, C=2... 一串字母当成n维向量,跟一个n×n的矩阵相乘,再将得出的结果模26。注意用作加密的矩阵(即密钥)必须是可逆的,否则就不可能译码。

[CTF]中那些脑洞大开的编码和加密

[CTF]中那些脑洞大开的编码和加密 摘自:https://www.cnblogs.com/mq0036/p/6544055.html 0x00 前言 正文开始之前先闲扯几句吧,玩CTF的小伙伴也许会遇到类似这样的问题:表哥,你知道这是什么加密吗?其实CTF中脑洞密码题(非现代加密方式)一般都是各种古典密码的变形,一般出题者会对密文进行一些处理,但是会给留一些线索,所以写此文的目的是想给小伙...

Fllowone的博客 2623

[南大ICS-PA2] 字符串处理函数和printf实现

[南大ICS-PA2] 程序、运行时环境与AM 字符串处理函数和printf实现

qq_42474104的博客 2987

CTF密码学总结

同音替换密码(Homophonic Substitution Cipher)是单字母可以被其他几种密文字母同时替换的密码,通常要比标准替换密码破解更加困难,破解标准替换密码最简单的方法就是分析字母出现频率,通常在英语中字母'E'(或'T')出现的频率是最高的,如果我们允许字母'E'可以同时被3种不同字符代替,那么就不能还是以普通字母的频率来分析破解,如果允许可代替字符越多,那么密文就会更难破译。注意,在以上所示的字母表密钥的底部,列有四个附加符号1,2,3,4.他们可以放在密文中的任何地方。

2201_75719295的博客 269

ZYNQ出现问题及解决办法汇总(一直更新)

问题目录使用软件及开发板版本一,vitis在build project时卡住。二,Could not find FPGA device on the board for connection 'Local'三,FPGA configuration failed:DONE PIN is not high四,Could not find ARM device on the board for connection 'Local' 使用软件及开发板版本 开发板:MZ7XA-7020 软件:vitis2020.2(

qq_45057368的博客 1万+

软件测试工程师最常用的Linux系统命令大全(汇总)

cd命令这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径。

1334

CTF常用工具_实时更新

内附ctf常用工具、常用网站

qq_53229503的博客 1万+

游戏开发实战:如何用旋转矩阵实现2D角色平滑转向(附Unity代码)

本文深入探讨了在Unity游戏开发中,如何运用旋转矩阵原理实现2D角色的平滑转向。文章从核心理论出发,提供了计算目标旋转、实现平滑插值(Lerp与SmoothDamp)的完整C#代码,并解决了与动画系统、物理引擎协同的常见难题,帮助开发者提升游戏操作手感与视觉流畅度。

weixin_29057237的博客 290

CTF 编码工具 v7.2,一款搞定所有 CTF 编码 / 隐写难题

摘要:CTF编码工具是一款专为网络安全竞赛设计的全能离线加解密工具,集成百余种编码算法(Base/Rot/古典密码等)和实用模块(文件隐写/图片分析/哈希计算)。支持离线操作,涵盖凯撒密码、摩斯电码等传统算法,以及零宽字符、佛论禅等特色编码。工具提供进制转换、密钥加解密、文件处理(ZIP爆破/图片隐写提取)及Web安全检测功能,内置智能分段、字符处理等辅助功能。适用于CTF选手、安全研究人员及密码学爱好者,可显著提升解题效率。当前版本为v7.2,支持Windows平台离线使用。(149字)

Chengbei11的博客 1336

FlinkCDC数据同步Bug——同步性能由于写入并行度限制无法提升问题的解决

使用FlinkCDC进行数据同步时,出现增量阶段写入并行度强制为1导致整体同步性能无法提升问题的解决方案

csdn_lan的博客 2081

PCL DBSCAN密度聚类【2026最新版】

点云密度聚类的PCL代码实现,与matlab自带的密度聚类算法进行对比验证,结果一致。3万多个点能再2秒左右运行出结果,算法效率尚可。

点云侠的博客 5682

CTF100题

涵盖(含信息泄露、暴力破解等 11 类问题及解决方法)、(含 15 种加解密任务及破解思路)、(含 6 类日志分析任务及分析过程)、(含 9 类编程任务及实现代码)、(含 9 种隐写任务及提取方法)、(含 17 类进阶问题及绕过技巧)、(含 8 类杂项任务及处理方式)、(含 11 类逆向任务及分析过程)、(含 5 类溢出任务及攻击代码)等多个 CTF 常见领域,详细介绍了各题目任务、提示及具体解题步骤。

yy1715713348的博客 481

告别JavaScript!C#通过WebAssembly在浏览器中实现“原生级“性能

C# + WebAssembly:前端开发的革命性替代方案 摘要:本文探讨了C#通过WebAssembly取代JavaScript开发前端应用的新趋势。文章分析了JavaScript的局限性(弱类型、回调地狱等),并详细介绍了C#+WebAssembly组合的优势:强类型系统、高性能、多线程支持和代码重用。技术实现方面,阐述了C#通过Mono/.NET编译为WebAssembly字节码的原理,重点介绍了Blazor框架的两种模式。文章还提供了实战指南,包括项目创建、多线程配置,以及一个与ChatGPT AP

墨夶的博客 946

ctf古典密码从0到1

亲爱的,关注我吧9/7本文共计6357个词阅读预计花费8分钟1.古典密码和现代密码的区别: 2.代换密码 a)单表代换密码 i.字符或数学型 1.凯撒密码 2.仿射密码 3.四方密码 4...

蚁景网安学院 3826

司法AI系统的架构设计:法律知识图谱如何辅助智能庭审?架构师亲测

简单来说,法律知识图谱是一种采用图数据结构(节点Node + 边Edge/关系Relation)来组织和表达法律领域知识的语义网络。它以。

AI 算法实战派 1088

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

[随波逐流]CTF编码工具 V6.5 20250115(文末附带文件下载地址)

[随波逐流]CTF编码工具介绍

m0_74190241的博客 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

​​CTF常用工具:攻防利器分享(超详细),收藏这一篇就够了

本文整理了CTF竞赛中常用的工具和网站资源,包括编码解码工具、16进制编辑器、二维码提取工具、隐写工具、压缩包破解工具、流量分析工具等12款实用软件,均提供百度网盘永久下载链接。同时推荐了加解密、反序列化、二维码解析等15个在线工具网站。最后分享了网络安全学习资料包,包含学习路线图、视频教程、技术文档、工具包等资源,适合零基础入门和进阶学习。

资深程序员,曾自学JAVA,C#,如今从业于网安行业 1632

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

CTF中编码与加解密总结

CTF中那些脑洞大开的编码和加密 转自:https://www.cnblogs.com/mq0036/p/6544055.html 0x00 前言 正文开始之前先闲扯几句吧,玩CTF的小伙伴也许会遇到类似这样的问题:表哥,你知道这是什么加密吗?其实CTF中脑洞密码题(非现代加密方式)一般都是各种古典密码的变形,一般出题者会对密文进行一些处理,但是会给留一些线索,所以写此文的目的是想给小伙...

weixin_30387799的博客 3848

【ctf】Crypto初步基础概要

这里是关于密码的整体概要,不管你是否喜欢ctf,只要你喜欢安全的,都可以进行学习和交流,也欢迎各位师傅的指点。

JacinLee的博客 1万+
上一篇: 时间之外的往事
下一篇: 攻防世界GFSJ1229 Three
铭记北宸
博客等级 码龄18年 289粉丝 148原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铭记北宸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值