Suppose 发表于 2020-5-29 01:35

一个蛮奇怪的算法(也许是我看不懂)

本帖最后由 yujian1991 于 2020-5-29 17:34 编辑

算法是分析某软件时弄出来的,看了半天没看明白是个什么算法,所以写个小程序给大佬研究研究。PS:易语言写的,无花无壳
大概介绍一下,就是加、解密的时候,算法是一样的,用到的"密钥"不同。我不确定加密后的数据在没有对应解密"密钥"的时候是否可逆,因为这个不是RSA,看起来计算过程很简单
flag是14位

monvvv 发表于 2020-5-29 21:12

本帖最后由 monvvv 于 2020-5-29 21:17 编辑

逆出算法:
def encode(data, key):
    assert len(data) == 14

    result = bytearray(14)
    for i in range(14):
      val = 0
      sub_key = key
      for j in range(14):
            val += data * sub_key

      result = val & 0xFF
    return result
KEY = [
      '01FF000000000000000000000000',
      'FF02FF0000000000000000000000',
      '00FF02FF00000000000000000000',
      '0000FF02FF000000000000000000',
      '000000FF02FF0000000000000000',
      '00000000FF02FF00000000000000',
      '0000000000FF02FF000000000000',
      '000000000000FF02FF0000000000',
      '00000000000000FF02FF00000000',
      '0000000000000000FF02FF000000',
      '000000000000000000FF02FF0000',
      '00000000000000000000FF02FF00',
      '0000000000000000000000FF02FF',
      '000000000000000000000000FF02',
    ]
CIPHER = 'E2321CB10044F4B33A27967A86AC'
显然对于一组c, m, k有(c1, c2, ..., c14) = (m1, m2, ..., m14) * (mod 256)
所以求解m就相当于求解一个多元一次同余方程(可以求出该方程可解。
解得m = = 'Wua1PoJ1e_2o2o'

czxj2003 发表于 2020-5-29 08:57

bingo广东人

weikun444 发表于 2020-5-29 10:58

不懂算法的人无奈啊。。。

Suppose 发表于 2020-5-29 13:47

weikun444 发表于 2020-5-29 10:58
不懂算法的人无奈啊。。。

这没任何意义哦

跑得快有糖吃 发表于 2020-5-29 16:15

楼主不是我说,这种算法要是换我来啊,我早就看不懂了!{:1_927:}

monvvv 发表于 2020-5-29 20:54

看着像是hill密码,是要算逆矩阵?

Suppose 发表于 2020-5-29 21:43

monvvv 发表于 2020-5-29 21:12
逆出算法:
def encode(data, key):
    assert len(data) == 14


大佬牛B!!!

nixuan156 发表于 2020-5-30 08:00

不懂,帮顶啊啊

懵逼的小白 发表于 2020-5-30 15:29

{:1_925:} 无语哎 慢慢研究
页: [1]
查看完整版本: 一个蛮奇怪的算法(也许是我看不懂)