BitcoinChallenge第一关解密代码

最近有一幅画特别火,不是因为这幅画有多美,而是因为这幅画里藏有310个比特币的私钥!

游戏地址:BitcoinChallenge
BitcoinChallenge第一关解密代码_第1张图片
实际上这幅图里藏有4个私钥,对应的账号里分别有0.1, 0.2, 0.31和310个比特币,当然难度肯定也是对应成比例的。已经有牛人破解了第一个私钥,转走了账号里的0.1个比特币,那么他是怎么做到的呢?

首先,这幅图中最明显的线索就是图片下方的表格,里面有18个16进制数字:
BitcoinChallenge第一关解密代码_第2张图片
那么这些数字跟私钥有什么关系呢?秘密就在于表格上方不远处的一串日期OCT2 2018:
BitcoinChallenge第一关解密代码_第3张图片
这两部分结合起来,就是一个移位密码问题,也称凯撒密码,因为是凯撒大帝率先在军队中使用的~

那么什么是凯撒密码呢?其实很简单:假设原始数据是ABC,每个字母移动1位,就得到了加密后的数据BCD,移动2位就变成CDE,以此类推。另外移位是循环进行的,比如Z再移动1位就变成了A。

好,回到这幅画上来,表里的数字就是原始数据,而’20181002’就是需要移动的位数。据此可以写出解密的Python脚本:

import re

key = '20181002'
encrypted = '511B2033232841053022B0FE52ED0F7A165B52C7E75112F656FC4B'
decrypted = ''
for i in range(len(encrypted)):
    h = hex((int(encrypted[i], 16) - int(key[i%len(key)])) % 16)
    decrypted += h[2]
    
# print numbers
num = re.findall(r'.{3}', decrypted)
print(num)

看到了吗?先做减法实现移位,再取余实现循环移位,最后转成16进制(去掉前面的0x标识)。

那么解密出来的数据是什么样子的呢?我们看一下打印结果:

[‘310’, ‘310’, ‘310’, ‘310’, ‘310’, ‘310’, ’1aa’, ‘0fc’, ‘32d’, ‘5ff’, ‘78f’, ‘643’, ‘42c’, ‘5c7’, ‘490’, ‘2f4’, ‘36e’, '43b’]

前面6个数字都是310,暗示了大奖的金额310个比特币。后面的12个数字才是重点,它们标识了私钥助记词的索引号。助记词一共有2048个,点击查看完整列表。

把上面的列表下载下来保存成english.txt,然后根据上面的12个索引值找到对应的助记词:

# print mnemonic
with open('english.txt', 'r') as f:
    mnemonic = f.readlines()
    for i in range(len(num)):
        m = mnemonic[int(num[i], 16) - 1]
        print(m[:-1], end=' ')
    print('')

打印结果:

giggle giggle giggle giggle giggle giggle cry buyer grain save vault sign lyrics rhythm music fury horror mansion

通过这12个单词就可以进入账号了,当然现在里面已经是空空如也,早在10月4号就被一位地址为1AuSap3Z9NhmhQEe3y1ByxuNFY1S35YtZ3 的牛人破解了~
BitcoinChallenge第一关解密代码_第4张图片

P.S. 截止发稿,第4关已经被破解了,310个比特币被分别转到了3个账号中,大家又痛失一个赚钱的机会啊。。。

更多文章欢迎关注“鑫鑫点灯”专栏:https://blog.csdn.net/turkeycock
或关注飞久微信公众号:
BitcoinChallenge第一关解密代码_第5张图片

你可能感兴趣的:(区块链)