###### tags: `攻防世界新手區` # Misc/Wheel Cipher(輪轉機) - 題目: - 加密表: 1: < ZWAXJGDLUBVIQHKYPNTCRMOSFE < 2: < KPBELNACZDTRXMJQOYHGVSFUWI < 3: < BDMAIZVRNSJUWFHTEQGYXPLOCK < 4: < RPLNDVHGFCUKTEBSXQYIZMJWAO < 5: < IHFRLABEUOTSGJVDKCPMNZQWXY < 6: < AMKGHIWPNYCJBFZDRUSLOQXVET < 7: < GWTHSPYBXIZULVKMRAFDCEONJQ < 8: < NOZUTWDCVRJLXKISEFAPMYGHBQ < 9: < XPLTDSRFHENYVUBMCQWAOIKZGJ < 10: < UDNAJFBOWTGVRSCZQKELMXYIHP < 11: < MNBVCXZQWERTPOIUYALSKDJFHG < 12: < LVNCMXZPQOWEIURYTASBKJDFHG < 13: < JZQAWSXCDERFVBGTYHNUMKILOP < 密鑰為:2,3,7,5,13,12,9,1,8,10,4,11,6 密文為:NFQKSEVOQOFNP - 解題思路: - 密鑰數字的排序對應加密表的重新組合,再依序觀察密文字母,將其順位偏移至第一位。 2: < KPBELNACZDTRXMJQOYHGVSFUWI < 3: < BDMAIZVRNSJUWFHTEQGYXPLOCK < 7: < GWTHSPYBXIZULVKMRAFDCEONJQ < 5: < IHFRLABEUOTSGJVDKCPMNZQWXY < 13: < JZQAWSXCDERFVBGTYHNUMKILOP < 12: < LVNCMXZPQOWEIURYTASBKJDFHG < 9: < XPLTDSRFHENYVUBMCQWAOIKZGJ < 1: < ZWAXJGDLUBVIQHKYPNTCRMOSFE < 8: < NOZUTWDCVRJLXKISEFAPMYGHBQ < 10: < UDNAJFBOWTGVRSCZQKELMXYIHP < 4: < RPLNDVHGFCUKTEBSXQYIZMJWAO < 11: < MNBVCXZQWERTPOIUYALSKDJFHG < 6: < AMKGHIWPNYCJBFZDRUSLOQXVET < - 修正過後的加密表,由上而下依序讀入字串,flag即為其中一項。 ``` python original_wheel = ['ZWAXJGDLUBVIQHKYPNTCRMOSFE', 'KPBELNACZDTRXMJQOYHGVSFUWI', 'BDMAIZVRNSJUWFHTEQGYXPLOCK', 'RPLNDVHGFCUKTEBSXQYIZMJWAO', 'IHFRLABEUOTSGJVDKCPMNZQWXY', 'AMKGHIWPNYCJBFZDRUSLOQXVET', 'GWTHSPYBXIZULVKMRAFDCEONJQ', 'NOZUTWDCVRJLXKISEFAPMYGHBQ', 'XPLTDSRFHENYVUBMCQWAOIKZGJ', 'UDNAJFBOWTGVRSCZQKELMXYIHP', 'MNBVCXZQWERTPOIUYALSKDJFHG', 'LVNCMXZPQOWEIURYTASBKJDFHG', 'JZQAWSXCDERFVBGTYHNUMKILOP '] shifted_wheel = [] key = [2,3,7,5,13,12,9,1,8,10,4,11,6] ciphertext = 'NFQKSEVOQOFNP' for i in key: shifted_wheel.append(original_wheel[i-1]) print('Messages:\n',shifted_wheel) for i in range(len(shifted_wheel)): index = shifted_wheel[i].index(ciphertext[i]) shifted_wheel[i] = shifted_wheel[i][index:]+shifted_wheel[i][0:index] print('Resort messages:\n',shifted_wheel) print('output') for i in range(1,len(shifted_wheel[0])): for j in range(len(shifted_wheel)): A = chr( ord( shifted_wheel[j][i] ) + 32 ) # 大寫轉小轉(ASCII偏移) print( A, end='' ) print('\n') ```