第五周学习

pycharm

python调库实现64位加解密。

image-20231124232216396

在Python中,有多个库可以用于实现64位加解密。以下是使用PyCryptodome库进行示例的代码:

首先,确保已安装PyCryptodome库。可以使用以下命令来安装:

使用64位的加密算法,可以考虑使用其他算法,比如DES算法。DES算法使用8字节的密钥长度,可以实现64位的加解密。

以下是使用PyCryptodome库进行DES加解密的示例代码:

代码由GPT提供

from Crypto.Cipher import DES
from Crypto.Util.Padding import pad, unpad
from Crypto.Random import get_random_bytes

def encrypt(key, data):
    cipher = DES.new(key, DES.MODE_ECB)
    ciphertext = cipher.encrypt(pad(data, DES.block_size))
    return ciphertext

def decrypt(key, ciphertext):
    cipher = DES.new(key, DES.MODE_ECB)
    data = unpad(cipher.decrypt(ciphertext), DES.block_size)
    return data

# 生成随机的64位密钥
key = get_random_bytes(8)

# 选择加密或解密
choice = input("请选择加密或解密 (encrypt/decrypt): ")

if choice == "encrypt":
    # 输入要加密的数据
    data = input("请输入要加密的数据: ").encode()

    # 加密数据
    encrypted_data = encrypt(key, data)
    print('加密后的数据:', encrypted_data)

elif choice == "decrypt":
    # 输入要解密的数据
    ciphertext = input("请输入要解密的数据: ").encode()

    # 解密数据
    decrypted_data = decrypt(key, ciphertext)
    print('解密后的数据:', decrypted_data)

else:
    print("无效的选择。请选择 encrypt 或 decrypt。")

效果如图

image-20231124233851690

CTF show

crypto2

JSFuck是一种基于JavaScript的编码技术,它通过使用极少量的字符来表示完整的JavaScript代码。它的原理是利用JavaScript中的一些基本操作符和全局对象来构建完整的代码逻辑。

image-20231125184014134

crypto3

aaencode是一种JavaScript代码混淆工具,用于将JavaScript代码转换为一串难以阅读和理解的字符。解密aaencode编码的代码需要使用特定的解码器。

这里可能会出错,页面编码显示问题如图

image-20231125195653994

原本应该是

image-20231125195721323

控制台输入密文回车即可

image-20231125201414692

crypto4

RSA算法是一种非对称加密算法,它使用两个密钥:公钥和私钥。这些密钥是成对生成的,其中一个用于加密,另一个用于解密。

下面是RSA算法的基本步骤:

  1. 选择两个不同的质数 p p p q q q,计算它们的乘积 N = p × q N=p \times q N=p×q N N N将作为RSA的模数。
  2. 计算欧拉函数 ϕ ( N ) \phi(N) ϕ(N),它等于 ( p − 1 ) × ( q − 1 ) (p-1) \times (q-1) (p1)×(q1)
  3. 选择一个整数 e e e,满足 1 < e < ϕ ( N ) 1 < e < \phi(N) 1<e<ϕ(N),且 e e e ϕ ( N ) \phi(N) ϕ(N)互质。 e e e将作为公钥的一部分。
  4. 计算私钥 d d d,使得 d × e ≡ 1 m o d    ϕ ( N ) d \times e \equiv 1 \mod \phi(N) d×e1modϕ(N)。可以使用扩展的欧几里得算法来找到 d d d的值。
  5. 公钥是一个由 N N N e e e组成的公钥对 ( N , e ) (N, e) (N,e)
  6. 私钥是一个由 N N N d d d组成的私钥对 ( N , d ) (N, d) (N,d)

加密过程:

  • 要加密一个消息 M M M,将其转换为一个整数 m m m,满足 0 ≤ m < N 0 \leq m < N 0m<N
  • 使用公钥 ( N , e ) (N, e) (N,e),计算密文 C C C C = m e m o d    N C = m^e \mod N C=memodN

解密过程:

  • 要解密密文 C C C,使用私钥 ( N , d ) (N, d) (N,d),计算原始消息 M M M M = C d m o d    N M = C^d \mod N M=CdmodN
import math

def extended_gcd(a, b):
    if b == 0:
        return a, 1, 0
    else:
        gcd, x, y = extended_gcd(b, a % b)
        return gcd, y, x - (a // b) * y

def calculate_private_key(p, q, e):
    n = p * q
    phi_n = (p - 1) * (q - 1)
    _, d, _ = extended_gcd(e, phi_n)
    d = d % phi_n
    return d

# 用户输入参数
p = int(input("请输入素数 p: "))
q = int(input("请输入素数 q: "))
e = int(input("请输入公钥 e: "))

private_key = calculate_private_key(p, q, e)
print("私钥 (d):", private_key)

python代码

image-20231126151859158

crypto5

同样是RSA加密,这次求明文

import math

def gcd(a, b):
    if b == 0:
        return a
    return gcd(b, a % b)

def extended_gcd(a, b):
    if b == 0:
        return a, 1, 0
    d, x, y = extended_gcd(b, a % b)
    return d, y, x - (a // b) * y

def mod_inverse(a, m):
    d, x, _ = extended_gcd(a, m)
    if d == 1:
        return (x % m + m) % m
    raise ValueError("逆元不存在。")

def rsa_decrypt(ciphertext, private_key):
    n, d = private_key
    return pow(ciphertext, d, n)

def main():
    p = int(input("请输入 p 的值:"))
    q = int(input("请输入 q 的值:"))
    e = int(input("请输入 e 的值:"))
    c = int(input("请输入密文:"))

    n = p * q
    phi_n = (p - 1) * (q - 1)

    if gcd(e, phi_n) != 1:
        raise ValueError("e 和 phi(n) 不互质。")

    d = mod_inverse(e, phi_n)
    private_key = (n, d)

    plaintext = rsa_decrypt(c, private_key)
    print("明文:", plaintext)

if __name__ == "__main__":
    main()

image-20231126153149245

crypto6

rabbit加密

Rabbit加密是一种对称加密算法,它使用了一个变种的分组密码结构。Rabbit算法的设计目标是在保持较高的加密强度的同时,提供更高的加密速度。

Rabbit算法使用了一个128位的密钥和一个64位的初始化向量(IV)。它将密钥和IV作为输入,生成一个伪随机数流,并使用该流对明文进行异或操作,从而实现加密和解密。

Rabbit算法的核心是一个基于非线性的函数,该函数接受一个128位的输入块和一个128位的密钥,生成一个128位的输出块。这个函数被迭代使用,以生成伪随机数流。

image-20231126153333196

密钥为Rabbit

image-20231126162008396

crypto7

Ook!加密是一种基于Ook!语言的加密方法。Ook!是一种简单的编程语言,由三个关键字组成:Ook.、Ook?和Ook!。在Ook!加密中,我们使用Ook!语言来表示明文,并通过一系列规则将其转换为密文。

下面是一些基本的Ook!加密规则:

  1. 每个Ook!指令由两个Ook!关键字组成,用空格分隔。

  2. 每个Ook!指令以"Ook."开头,并以"Ook!"结尾。

  3. "Ook."指令表示0,"Ook?"指令表示1。

  4. 将明文转换为二进制表示。

  5. 将二进制表示的明文转换为Ook!语言表示。例如,0可以表示为"Ook. Ook.“,1可以表示为"Ook. Ook!”。

  6. 将Ook!语言表示的明文按照规则连接起来形成密文。

image-20231126162305549

crypto8

Brainfuck是一种极简的编程语言,由八个指令组成:“>”, “<”, “+”, “-”, “.”, “,”, “[”, “]”。Brainfuck加密是一种使用Brainfuck语言来对明文进行加密的方法。

下面是一些基本的Brainfuck加密规则:

  1. 将明文转换为ASCII码表示。

  2. 将ASCII码表示的明文转换为Brainfuck语言表示。例如,字母"A"的ASCII码是65,可以表示为"++++++++[>++++++++<-]>."。

  3. 将Brainfuck语言表示的明文按照规则连接起来形成密文。

image-20231126162622622

crypto9

文件时一个.zip压缩包,解压需要密码,使用ARCHPR爆破

image-20231126163202705

爆破成功4132

得到一个.dat文件,是serpent加密

image-20231126163638707

crypto10

Quoted-Printable是一种用于在电子邮件和其他文本传输协议中表示非ASCII字符的编码方法。它允许将非ASCII字符转换为一系列ASCII字符,以便在传输过程中保持数据的可靠性。

Quoted-Printable编码的基本规则如下:

  1. ASCII字符(0-127)保持不变,不需要进行编码。

  2. 非ASCII字符被转换为"="后跟两位十六进制表示的ASCII码。

  3. 换行符(ASCII码10)和回车符(ASCII码13)保持不变。

  4. 若一行的长度超过了规定的最大长度(通常是76个字符),则在行尾添加"="符号,并在下一行继续编码。

import quopri

def quoted_printable_encode(text):
    encoded_text = quopri.encodestring(text.encode('utf-8'))
    return encoded_text.decode('utf-8')

def quoted_printable_decode(encoded_text):
    decoded_text = quopri.decodestring(encoded_text.encode('utf-8'))
    return decoded_text.decode('utf-8')

# 提示用户选择编码还是解码
choice = input("请选择操作(输入'E'进行编码,输入'D'进行解码):")

if choice.lower() == 'e':
    # 编码操作
    text = input("请输入要编码的内容:")
    encoded_text = quoted_printable_encode(text)
    print("编码结果:", encoded_text)
elif choice.lower() == 'd':
    # 解码操作
    encoded_text = input("请输入要解码的内容:")
    decoded_text = quoted_printable_decode(encoded_text)
    print("解码结果:", decoded_text)
else:
    print("无效的选择!")



xt = input("请输入要编码的内容:")
    encoded_text = quoted_printable_encode(text)
    print("编码结果:", encoded_text)
elif choice.lower() == 'd':
    # 解码操作
    encoded_text = input("请输入要解码的内容:")
    decoded_text = quoted_printable_decode(encoded_text)
    print("解码结果:", decoded_text)
else:
    print("无效的选择!")

image-20231126165130807

  • 18
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

梦择懿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值