常见的密文编码解码

 

 

最近做JS逆向时遇到了AES,RSA,Base64,Base32等解码,特此汇总一下解密/码方式,不定时更新。

 

RSA

参考文档:RSA加密解密原理

加密方式

加密公式

C = eq?M%5E%7B%5E%7Be%7D%7D % n

解密公式

M = eq?C%5E%7Bd%7D % n

字母MCden
含义明文密文私钥公钥公共模数

n = p*q(p,q为质数,越大越安全)

e*d*eq?%5Cvarphi%20%28p*q%29 =1

1 < e < eq?%5Cvarphi%20%28n%29 (e取值是整数,e和eq?%5Cvarphi%20%28n%29 是互质数)

解密方式

必须知道C,e,n或pq

示例:

已知c = 32949  e = 42667  n = 64741 

对n因式分解p = 101 q = 641

因式分解网站:因式分解网站

解密代码如下:

c = 32949
e = 42667  
n = 64741  
p = 101
q = 641


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


def modinv(a, p, q):
    m = calculate_phi(p, q)
    g, x, y = egcd(a, m)
    if g != 1:
        raise Exception('Modular inverse does not exist')
    else:
        return x % m


# 计算 φ(n)
def calculate_phi(p, q):
    return (p - 1) * (q - 1)


def rsa(c, d, n):
    return c ** d % n


d = modinv(e, p, q)
result = rsa(c, d, n)
print("密码是:", result)

结果为18429

AES

加密方式

加密公式

 eq?C%20%3D%20E%5Cleft%20%28%20K%2CP%20%5Cright%20%29

eq?P%20%3D%20D%5Cleft%20%28%20K%2CC%20%5Cright%20%29

字母KCP
含义秘钥密文明文

加密模式

1.电码本模式(ECB),这种模式是将整个明文分成若干段相同的小段,然后对每一小段进行加密。
2.密码分组链接模式(CBC),这种模式是先将明文切分成若干小段,然后每一小段与初始块或者上一段的密文段进行异或运算后,再与密钥进行加密。
3.计算器模式(CTR),这种模式不常见,在CTR模式中,有一个自增的算子,这个算子用密钥加密之后的输出和明文异或的结果得到密文,相当于一次一密。
4.密码反馈模式(CFB),在这种模式下,输入数据块可以直接与加密算法的输出进行混合,从而得到加密的数据。
5.输出反馈模式(OFB),在这种模式下,输入数据块与加密算法输出的反馈进行混合,从而得到加密的数据。

解密方式

CBC模式

from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes

# 1. 初始化AES加密器
key = get_random_bytes(16)  # 16字节密钥
cipher = AES.new(key, AES.MODE_CBC)  # 使用CBC模式

# 2. 加密数据
plaintext = b'This is a secret message'
ciphertext = cipher.encrypt(plaintext)

# 3. 解密数据
decipher = AES.new(key, AES.MODE_CBC, iv=cipher.iv)  # 使用相同的密钥和IV
decrypted_data = decipher.decrypt(ciphertext)

# 4. 打印解密后的数据
print("解密后的数据:", decrypted_data)

ECB模式

from Crypto.Cipher import AES

# 初始化AES加密器和密钥
key = b'Sixteen byte key'
cipher = AES.new(key, AES.MODE_ECB)

# 解密数据
plaintext = cipher.decrypt(ciphertext)

CFB模式

from Crypto.Cipher import AES

# 初始化AES加密器和密钥
key = b'Sixteen byte key'
iv = b'InitializationVe'  # 16字节的初始向量
cipher = AES.new(key, AES.MODE_CFB, iv=iv)

# 解密数据
plaintext = cipher.decrypt(ciphertext)

OFB模式

from Crypto.Cipher import AES

# 初始化AES加密器和密钥
key = b'Sixteen byte key'
iv = b'InitializationVe'  # 16字节的初始向量
cipher = AES.new(key, AES.MODE_OFB, iv=iv)

# 解密数据
plaintext = cipher.decrypt(ciphertext)

CTR模式

from Crypto.Cipher import AES

# 初始化AES加密器和密钥
key = b'Sixteen byte key'
nonce = b'Nonce'  # 随机数,不是初始向量
cipher = AES.new(key, AES.MODE_CTR, nonce=nonce)

# 解密数据
plaintext = cipher.decrypt(ciphertext)

 

 

Base64

import base64

# 要解码的Base64编码字符串
base64_encoded_data = "5rGf5rmW5LiA5p2h6bG8"

# 使用base64模块解码
decoded_data = base64.b64decode(base64_encoded_data)

# 将解码后的数据转换为字符串
decoded_string = decoded_data.decode('utf-8')

print(decoded_string)

Base32

import base64

# 要解码的Base32编码字符串
base32_encoded_data = "42YZ7ZVZS3SLRAHGTWQ6TMN4"

# 使用base64模块解码
decoded_data = base64.b32decode(base32_encoded_data)

# 将解码后的数据转换为字符串
decoded_string = decoded_data.decode('utf-8')

print(decoded_string)

MD5模拟加密

import hashlib

# 要加密的字符串
string_to_encrypt = "江湖一条鱼"

# 创建md5对象
md5 = hashlib.md5()

# 更新md5对象
md5.update(string_to_encrypt.encode())

# 获取md5哈希值
md5_hash = md5.hexdigest()

print(md5_hash)

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值