曲路密码(Bend crypto)

简介: 曲路密码(Bend crypto)

曲路密码(Bend crypto)

  • 加密对象: 所有字符
  • 原理
  • 该密码和栅栏密码类似,是一种移位密码
  • 秘钥就是行列数,但我感觉只需要列数就好了(可能是我理解有问题),使用行列数构成一个表格,将明文依次填入,例如:行列为6列3行, 明文为: “flag{y0u_are_p1g@}”
f l a g { y
0 u _ a r e
_ p 1 g @ }

然后从最后一个字符像如下方式串起来即构成了密文:}ey{r@gaga_1pulf0_


5c18c117ab7948e697f59bbecfd4014f.png

代码:

# write by 2021/8/4
# 曲路密码
import re
def encrypt_bend(string, col, row=10):
    ciphertext = ""
    temp = []
    for i in range(col):
        temp.append([])
    for index, i in enumerate(string):
        temp[index % col].append(i)
    re_temp = list(reversed(temp))
    for index, i in enumerate(re_temp):
        if index % 2 == 0:
            i = list(reversed(i))
        ciphertext += "".join(i)
    return ciphertext
def decrypt_bend(string, col, row=10):
    plaintext = ""
    length = len(string)
    min_row = length // col       # 最小的行数
    min_num = col - length % col  # 最小行数的列数
    # 分组
    temp = []
    index = 0
    for i in range(col):
        if i < min_num:
            temp.append(string[index:index+min_row])
            index += min_row
        else:
            temp.append(string[index:index+min_row+1])
            index += min_row + 1
    print(temp)
    # 改回列顺序
    for index, i in enumerate(temp):
        if index % 2 == 0:
            # print(re.findall(".{1}", temp[index]))
            temp[index] = "".join(list(reversed(re.findall(".{1}", temp[index]))))
    temp.reverse()
    for i in range(length):
        plaintext += temp[i % col][i // col]
    return plaintext
if __name__ == '__main__':
    col_ = 7
    row_ = 5
    ciphertext_ = encrypt_bend("i will beat you this day", col_, row_)
    plaintext_ = decrypt_bend(ciphertext_, col_, row_)
    print(f"{plaintext_} : {ciphertext_}")


目录
相关文章
|
JavaScript
vue vue-clipboard2(剪切板)
vue vue-clipboard2(剪切板)
212 0
|
数据安全/隐私保护 Windows
Windows 技术篇 - 远程桌面连接不保存密码、每次都要输入密码问题解决
Windows 技术篇 - 远程桌面连接不保存密码、每次都要输入密码问题解决
2634 0
Windows 技术篇 - 远程桌面连接不保存密码、每次都要输入密码问题解决
|
机器学习/深度学习 数据采集 人工智能
|
缓存 弹性计算 数据库
2核4G云服务器可以支持多少人同时在线访问?
阿里云2核4G服务器性能受多种因素影响,如应用效率、并发数、内存使用、CPU性能、公网带宽、数据库及CDN/OSS服务。优化代码、配置Web服务器、管理内存、选择高效数据库策略、利用缓存、使用CDN和OSS可提升服务器承载能力。实际支持在线人数因场景不同而变化,需综合评估并进行压力测试。年租仅199元
329 10
|
安全 数据安全/隐私保护
数字证书的主要作用是什么?
【5月更文挑战第11天】数字证书的主要作用是什么?
1074 2
|
传感器 机器人
|
存储 人工智能 固态存储
掌握未来:打造适用于AI人工智能开发的理想电脑配置指南
在当下技术快速发展的时代,人工智能(Artificial Intelligence, AI)已然成为大势所趋。从语音助手到自动驾驶汽车,AI的应用日渐普及。作为计算机科学的一个分支,AI侧重于创造能够执行各种复杂任务的智能机器。为了进行有效的AI研发,一个强大的电脑配置是必不可少的。本文旨在为AI开发者提供一份详尽的电脑配置建议,帮助您在这个时代浪潮中占得先机。
|
Rust 资源调度 前端开发
【一起学Rust | 框架篇 | Tauri2.0框架】使用Barcode Scanner实现扫码功能(安卓)
【一起学Rust | 框架篇 | Tauri2.0框架】使用Barcode Scanner实现扫码功能(安卓)
853 0
|
网络架构
计算机网络硬件介绍
计算机网络硬件是指用于构建计算机网络的各种硬件设备。计算机网络硬件包括网络接口卡、交换机、路由器、网关、集线器、网桥等。 网络接口卡(Network Interface Card,NIC)是计算机连接到计算机网络的接口设备。它负责将计算机的数据转换成适合在网络上传输的格式,并将接收到的网络数据转换成计算机可以理解的格式。网络接口卡通常使用以太网接口,支持各种传输速率和连接方式。 交换机(Switch)是用于连接多个计算机或其他网络设备的网络设备。它通过物理地址(MAC地址)来决定数据包的转发方向,从而实现数据的高效传输。交换机可以分为传统交换机和智能交换机两种类型,智能交换机具有更强大的功
502 0