【问题标题】:Python RSA Brute Force CheckPython RSA 蛮力检查
【发布时间】:2015-03-31 01:14:09
【问题描述】:

我有一个练习来暴力破解一段已用非常小的密钥加密的文本。我拥有的公钥是(e = 5,n = 203)。文本已被转换为 ASCII,移动了一个固定数字,然后使用 RSA 公钥加密。我必须仅使用蛮力解密此文本。要解密,我使用以下简单公式:

decrypt = (value**d)%n

其中 value 是我要解密的东西,d 是我不确定的值,n 是模数。

到目前为止,我已经将数字放在一个名为 en 的元组中,并像这样循环遍历它:

for i in range(1,10):   
    for a in range(0,41):
       ans = (en[a]**i)%203
       print (chr(ans))

第一个 for 循环是“d”我不确定的私钥值,第二个 for 循环用于遍历 41 长度的元组。我还没有实现块移位部分,但我想检查这是否是暴力强制简单 RSA 密钥的正确方法。

【问题讨论】:

    标签: python encryption cryptography rsa brute-force


    【解决方案1】:

    我冒昧地改进了 L3viathan 的答案,并提供了一个完整的工作源,可以复制粘贴并运行:

    def egcd(a, b):
        if a == 0:
            return (b, 0, 1)
        else:
            g, y, x = egcd(b % a, a)
            return (g, x - (b // a) * y, y)
    
    def modinv(a, m):
        g, x, y = egcd(a, m)
        if g != 1:
            raise Exception('modular inverse does not exist')
        else:
            return x % m
    
    def factor(n):
        for i in range(3, n):
            if n%i == 0:
                return i
    
    e = 5
    n = 203
    
    p = factor(n)
    q = n//p
    phi_n = (p-1) * (q-1)
    
    # Only for python >= 3.8
    # From https://docs.python.org/3/library/functions.html#pow
    # If mod is present and exp is negative, base must be relatively prime to mod.
    # In that case, pow(inv_base, -exp, mod) is returned, where inv_base is an inverse to base modulo mod.
    # d_crack = pow(e, -1, phi_n)
    
    # python < 3.8
    d_crack = modinv(e, phi_n)
    
    print('cracked d:', d_crack) # prints "cracked d: 101"
    

    【讨论】:

      【解决方案2】:

      你应该尝试通过蛮力来分解 n:

      for i in range(n):
          if n%i == 0:
              print i
      

      ,从中可以找到 p=7 和 q=29。

      d = e^-1 mod phi(n) = e^-1 mod (p-1)*(q-1)

      因此d = e^-1 mod 168,因此d=162

      【讨论】:

      • 非常感谢您的建议,但我不应该以最常识的方式去做。我必须一直坚持下去,直到我得到 d。这就是为什么我要检查我使用的公式是否正确。
      • 你的 10 来自for i in range(1,10)
      • 这只是一个需要检查的初始范围。没有什么真正的背后。
      • d 不等于 162。
      猜你喜欢
      • 2021-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多