文号
t66589
阅读
12366
回复
16
收藏
9
写了个另类加密解密算法,征求各种暴力无节操测试中。
2014/08/13
IP:浙江
这事源于一年多前在一个咖啡馆里冒出的念头,当时就想弄一个即使公开算法,别人也为此开发出自动暴力破解程序,但连电脑都会觉得恶心的东东。
程序很快写好了,也曾提交过科创论坛测试,然后好像没有然后了,似乎太用脑的东西不太吸引人。
一年以来,工作等原因,倒是一直没有改进程序。现在趁着假期,到了北京创客空间改进了一下,增加了密钥可能数,放上来大家参考研究研究。测试题目中的信息是中文,请用Unicode模式破解,要不然完全乱码。
算法是对称加密,只针对纯文字信息。题目、程序、算法说明书在附件里面有。在31号前如果提供除暴力破解外的有效反算法,KCB伺候。
好了,我要赶火车回去上班了。
logo.bmp


attachment icon 给大家测试和玩的程序.zip 3.12MB ZIP 62次下载
+10
科创币
20!Dopaminor
2014/08/14
感谢分享
kalimov作者
12年4个月前IP:未同步
712274
1楼
补充一个,这个程序需要richtextbox控件,有些朋友可能没有这个,我上传控件,放在和程序同一个目录下然后运行程序,或者让系统注册控件。

attachment icon Richtx32.ocx 207.27KB OCX 34次下载

引用
评论
kalimov作者
12年4个月前IP:未同步
712288
3楼
达闻西 发表于 2014-8-13 09:03
不是不吸引人,是楼主太厉害,曲高和寡。


要不然我提供1000块赌注,月底截止征求非暴力破解的有效解法。真心的,因为打算参展创客嘉年华。
引用
评论
kalimov作者
12年4个月前IP:未同步
712380
8楼
novakon 发表于 2014-8-13 12:27
具体的讲,就是请把你的算法抽象成数学语言。比如你使用bmp文档来说明就非常费劲,请考虑表述为:

长x宽 ...


sorry, 忘了上传了。我在火车上,明天中午到家后上传完整的。
我先解答那个随机数列问题,虽然看似十分类似真随机数列。
默写出来发生器的源码吧。
Sub NoiseGenerator()
'先在一个集合内填充伪随机色彩
    For j = 0 To Pl1.Height - 1
        For i = 0 To Pl1.Width - 1
            Randomize
            Pl1.Pset (i, j), Int (Rnd * 2 ^ 24)
        Next i
    Next j
'然后在另一个集合内也填充伪随机色彩
    For j = 0 To Pl2.Height - 1
        For i = 0 To Pl2.Width - 1
            Randomize
            Pl2.Pset (i, j), Int (Rnd * 2 ^ 24)
        Next i
    Next j
'接着互相取对方伪随机坐标的色彩信息重新填充,当时碰到明显可见色斑问题,看到旁边一妹子手机打麻将突然想到的应对法。
    For j = 0 To Pl1.Height - 1
        For i = 0 To Pl1.Width - 1
            Randomize
            Pl1.Pset (i, j), Pl2.Point ((Int (Rnd * Pl2.Width)), ((Int (Rnd * Pl2.Height)))
        Next i
    Next j
    For j = 0 To Pl2.Height - 1
        For i = 0 To Pl2.Width - 1
            Pl2.Pset (i, j), Pl1.Point ((Int (Rnd * Pl1.Width)), ((Int (Rnd * Pl1.Height)))
        Next i
    Next j
End Sub

火车上就不开电脑了,可能默写中一两个字母会有错,请多多包涵。
引用
评论
kalimov作者
12年4个月前IP:未同步
712386
9楼
novakon 发表于 2014-8-13 12:27
具体的讲,就是请把你的算法抽象成数学语言。比如你使用bmp文档来说明就非常费劲,请考虑表述为:

长x宽 ...


这里粗略用数学语言表达一下吧。毕竟那个说明书是科普用的,而不是对普通用户乱丢专业术语的。
原理:在若干长宽大小的矩阵中,按先后顺序放置明文信息,但每个信息元素之间距离随机,要靠每个元素中(R,G,B)中表示下一位置的信标量来导航。其他不装载信息元素的位置用随机量填满。完成密文第一层。(CT1)
接着将CT1丢入密文第二层(CT2)特定坐标位置,该位置在密钥中有记载,反编译程序中CCCC和DDDD的量。尺寸方面,CT2的长宽都不小于CT1,填充时如有位置超过CT2坐标按取模处理,及从CT2某行某列循环开始。其他空白位置用随机色彩填充。
如需更加保密,则有CT3,CT4……CTn步骤,和上面类似,在此不表。
原理结束。
引用
评论
kalimov作者
12年4个月前IP:未同步
712390
10楼
novakon 发表于 2014-8-13 12:27
具体的讲,就是请把你的算法抽象成数学语言。比如你使用bmp文档来说明就非常费劲,请考虑表述为:

长x宽 ...


风险方面:
单纯用randomize函数会出现肉眼可见明显颜色变化规律,不利于我将第一层密文隐藏起来,被对方直接抠图后就少了不少穷举需要尝试的密钥。
如果对方成功抠图获得CT1(第一层密文),就可以利用尝试各种可能的信标获取明文。之所以需要CT2就是让对方哪怕运气好获得几个片段信息,也会被随后的CT2杂讯误导进入错误信息坐标,从而自动解密机有进入死循环的可能。
所有明文信息进入CT1前已经凯撒转换了一遍,包括信标也是。这提供了2^24个可能密钥。我觉得这仍然不保险,于是用类似恩尼格玛交换转子的原理,把RGB顺序也打乱了,这样就多了5倍的密钥可能。
引用
评论
kalimov作者
12年4个月前IP:未同步
712807
12楼
20!不曾存在 发表于 2014-8-14 22:51
我记得有本书叫密码学


我看那本叫做《密码故事》,老美写的。
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的