(python)爆破函数解仿射加密

目录

前言

仿射加密的逻辑

解密的逻辑

分析思路

代码

示例


前言

对于仿射加密的爆破攻击,可以使用暴力破解方法来尝试解密。仿射加密是一种线性替换密码,它通过使用一个线性变换和一个移位来对明文进行加密。攻击者可以通过穷举法尝试所有可能的密钥组合,直到找到正确的解密密钥。

仿射加密的逻辑

仿射加密是一种对称加密算法,它使用线性变换和模运算来对数据进行加密和解密。其加密逻辑如下:

  1. 设置密钥:选择一个整数a作为乘法因子,选择一个整数b作为加法因子。这两个因子构成了仿射加密算法的密钥。

  2. 明文转换:将明文中的每个字符转换为对应的数值。可以使用ASCII码或其他字符编码方法进行转换。

  3. 加密计算:对每个明文字符x,应用仿射加密算法进行加密计算。加密计算公式为:y = (ax + b) mod m,其中m是字符的总数,mod表示模运算。

  4. 密文转换:将加密后的数值y转换为对应的字符。如果使用ASCII码进行转换,可以将数值映射回ASCII码表。

  5. 密文输出:将转换后的密文字符连接起来形成最终的密文。

解密的逻辑

  1. 设置密钥:使用与加密时相同的乘法因子a和加法因子b。

  2. 密文转换:将密文中的每个字符转换为对应的数值。

  3. 解密计算:对每个密文字符y,应用仿射解密算法进行解密计算。解密计算公式为:x = a^(-1)(y - b) mod m,其中a^(-1)表示a的逆元。

  4. 明文转换:将解密后的数值x转换为对应的字符。

  5. 明文输出:将转换后的明文字符连接起来形成最终的明文。

分析思路

仿射加密存在一个密钥空间较小的问题,因此穷举法通常是一种有效的攻击方式。

代码

在代码中,函数 affine_decrypt 用于解密给定的密文,其中 ab 分别是仿射加密的参数。函数 brute_force 则使用两层循环来尝试所有可能的密钥组合,并输出解密后的明文。你可以根据实际情况修改代码中的密文和其他参数。

def affine_decrypt(ciphertext, a, b):
    plaintext = ""
    inverse_a = 0
    for i in range(26):
        if (a * i) % 26 == 1:
            inverse_a = i
            break

    for char in ciphertext:
        if char.isalpha():
            char_num = ord(char) - ord('A')
            decrypted_char_num = (inverse_a * (char_num - b)) % 26
            decrypted_char = chr(decrypted_char_num + ord('A'))
            plaintext += decrypted_char
        else:
            plaintext += char

    return plaintext

def brute_force(ciphertext):
    for a in range(1, 26):
        for b in range(26):
            plaintext = affine_decrypt(ciphertext, a, b)
            print(f"Using key: a={a}, b={b} -> {plaintext}")

# 示例
ciphertext = "TKFKKRL"
brute_force(ciphertext)

示例

text = "fsivy umvy, dmxkwlcx cr lfk ksxcjkiv irxmwi dmzmemcv cr lfk dkjixlokvl cr mvlkxvilmcvih wccjkxilmcv cr lfk omvmelxu cr mvdselxu ivd mvrcxoilmcv lkwfvchcyu, eimd lfil lfk omvmelxu cr mvdselxu ivd mvrcxoilmcv lkwfvchcyu gmhh rsxlfkx ysmdk lfk pkhixsemiv xkekixwf wkvlkx cr vivtmvy svmzkxemlu cr ewmkvwk ivd lkwfvchcyu lc mojhkokvl lfk ewmkvwk ivd lkwfvchcyu wccjkxilmcv jhiv lc jxcoclk lfk dkzkhcjokvl cr lfk mvdselxmih ivd lxidk mvdselxmke mv lfk lgc wcsvlxmke. fk elilke lfil lfk omvmelxu gmhh fkhj cxyivmbk knjkxle lc wcvdswl wchhipcxilmzk xkekixwf cv lfk jchmlmwih, kwcvcomw ivd wshlsxih rmkhde mv Bkhixse, ivd gcxa lcyklfkx lc psmhd i fmyf-kvd jchmwu lfmva liva."


ciphertext = text  # Using key: a=7, b=14
brute_force(ciphertext)
# 运行过程,展示a和b不同组合下的结果, 然后会发现连接词为OF的明文,更符合实际.

你可能感兴趣的:(算法系列,安全)