这把剑游戏初期就能拿 用8bit币换
《赤痕:夜之仪式》
有把剑叫“加密的欢欣(Encrypted Orchid)”,道具描述是一串16进制码
6F20636B6E7077206772646C7A207A776B6A207075707365756C2078726B7674
直接转成文本是
o cknpw grdlz zwkj pupseul xrkvt
已经有玩家破译出来了,译文是
a light saber with immense power
(Steam社区讨论帖见出处;破译讨论帖在外站gamespot.com,我点不开看不了)
熟悉破译的P友帮帮忙解释一下加密和破译的过程呗……
有把剑叫“加密的欢欣(Encrypted Orchid)”,道具描述是一串16进制码
6F20636B6E7077206772646C7A207A776B6A207075707365756C2078726B7674
直接转成文本是
o cknpw grdlz zwkj pupseul xrkvt
已经有玩家破译出来了,译文是
a light saber with immense power
(Steam社区讨论帖见出处;破译讨论帖在外站gamespot.com,我点不开看不了)
熟悉破译的P友帮帮忙解释一下加密和破译的过程呗……
评论
第一步很简单,是ascii码直接转成对应字符。第二步就要动点脑筋了,因为文本长度太短,基于英文字母概率统计的分析就行不通了,只能手算来猜,一般来讲可以先猜三类最常见的,也就是shift, affine和vigenere。shift可以直接暴力枚举26个key,应该是都行不通。affine是12*26个key,写个小程序也可以暴力枚举一下。vigenere是比较烦的,因为要首先猜key的长度,当然这里道具名字已经给提示了,如果没给提示的话最长是可以跟文本一样长的,在这个例子里真要暴力找的话就要尝试26+26^2+26^3+...+26^27种key了,不太现实了已经。不过如果密文长度长一些的话还是不难的。
py3代码
def VigenereDecrypto(output , key):
ptLen = len(output)
keyLen = len(key)
quotient = ptLen // keyLen
remainder = ptLen % keyLen
inp = ''
for i in range (0 , quotient) :
for j in range (0 , keyLen) :
c = int((ord(output[i*keyLen+j]) - ord('a') - (ord(key[j]) - ord('a'))) % 26 + ord('a'))
inp += chr(c)
for i in range (0 , remainder) :
c = int((ord(output[quotient*keyLen+i]) - ord('a') -(ord(key) - ord('a'))) % 26 + ord('a'))
inp += chr(c)
return inp
if __name__ == '__main__':
cipherText = 'o cknpw grdlz zwkj pupseul xrkvt'.replace(' ', '')
key = 'orchid'
cipherTextToPlainText = VigenereDecrypto(cipherText , key)
print(u'明文:' + cipherTextToPlainText)
def VigenereDecrypto(output , key):
ptLen = len(output)
keyLen = len(key)
quotient = ptLen // keyLen
remainder = ptLen % keyLen
inp = ''
for i in range (0 , quotient) :
for j in range (0 , keyLen) :
c = int((ord(output[i*keyLen+j]) - ord('a') - (ord(key[j]) - ord('a'))) % 26 + ord('a'))
inp += chr(c)
for i in range (0 , remainder) :
c = int((ord(output[quotient*keyLen+i]) - ord('a') -(ord(key) - ord('a'))) % 26 + ord('a'))
inp += chr(c)
return inp
if __name__ == '__main__':
cipherText = 'o cknpw grdlz zwkj pupseul xrkvt'.replace(' ', '')
key = 'orchid'
cipherTextToPlainText = VigenereDecrypto(cipherText , key)
print(u'明文:' + cipherTextToPlainText)
@jlfsno1 那俩循环可以改成for i in range(len(output)), 然后key用到的index j = i % len(key),就不用同一行代码写两遍了。这个是vigenere的decryption,不是cryptanalysis。
@zermanni 网上抄来稍微改了点,没仔细看
@lenneth001 密码学可是古老学科哦,现代计算机科学之父图灵还有信息论作者香农这些人当年也是二战中从事密码破译的,甚至现代计算机的原型图灵机也是以破译密码为契机而产生的想法。甚至可以说没有密码学,可能就没有现代计算机,也就没有程序员了
@zermanni 我估摸着理科生应该都懂一点密码学的东西,就算不懂原理,抄一个程序来用还不行么
@wubs12345 与密码学有关的人群通常可以分为三类,设计密码系统的人,密码系统的使用者,破译密码系统的人。你可能指的是第二类人群。
@fred_sanity 赤痕 夜之仪式才是官方翻译(steam上的游戏简介里写的)不过无所谓反正知道是一个游戏就行了
回复不能