ZJCTF予選は逆の問題をの.py

1つの は/ usr / binに/ ENVパイソン!
2  - * -コーディング:UTF-8 - * - 
3  から hashlib インポートSHA256
 4  デフXOR(B):
 5      結果= []
 6      ための(i、j)の中のZIP(B):
 7          result.append(CHR(ORD(I)^ ORD(J)))
 8      リターン "" .join(結果)
 9  デフHASH(MSG):
 10      戻り SHA256(MSG).digest( )[8 ]
 11  DEF zjctf_encrypt(gen_keys、HAHAHAH):
 12      、I = 0
13      D1 = HAHAHAH [8 ]
 14      、D2 = HAHAHAH [8 :]
 15       I gen_keys:
 16          D1 = XOR(排他的論理和(HASH(D2)、I)、D1)
 17          D1は、D2 = D2、D1
 18      リターン D2 + D1
 19  DEF (キー)gen_keymap:
 20の      マップ= []
 21      _ = キー
 22      のための I における範囲(16 ):
 23          _ = HASH(_)
 24          maps.append(_)
 25      リターンマップ
 26  デフ暗号(鍵データ):
 27の      キー= gen_keymap(キー)
 28      リターン zjctf_encrypt(キー、データ).encode(' ' 29  の場合 __name__ == " __main__ " 30      結果=暗号化(" zzzzzjctffffffff "" This_is_the_flag " 31      プリント(結果)
 32      あなたの結果= 1b3a0152bef25769f384a740aa189e78

質問はXORを解決するためのヒントを使用することで行い、ダウンロードがPYファイルであることが判明しました。

まず、多分(暗号化に渡され、「zzzzzjctffffffff」、「This_is_the_flag」パラメータ)で

「zzzzzjctffffffff」にgen_keymap()HASHプロセスはマップを返し行います

zjctf_encrypt()このスライスをマッピングとXORさd2 + d1及び出力を返す "This_is_the_flag"

 

次のように復号化コードは次のようになります。

1  から hashlib インポートSHA256
 2  デフ:XOR(B)
 3      結果= []
 4      のための(i、j)の中のジップ(B):
 5          result.append(CHR(ORD(I)^ ORD(J) ))
 6      リターン "" .join(結果)
 7  デフHASH(MSG):
 8      リターン SHA256(MSG).digest()[8 ]
 9  DEF zjctf_encrypt(gen_keys、HAHAHAH):
 10      、I = 0
 11      D1 = HAHAHAH [ :8 ]
 12      、D2 = HAHAHAH [8 :]
13      D1、D2 = D2、D1
 14       I gen_keys:
 15          D2 = XOR(排他的論理和(HASH(D1)、D2)、I)
 16          D1、D2 = D2、D1
 17      戻り D1 + D2
 18は、 DEF (キー)gen_keymap。
 19の      マップ= []
 20      _ = キー
 21      のためのはxrange(16 ):
 22          _ = HASH(_)
 23          maps.append(_)
 24      maps.reverse()
 25      リターンマップ
 26 DEF (キーデータ)を暗号化:
 27の      キー= gen_keymap(キー)
 28      リターンzjctf_encrypt(キー、データ)
 29  
30キー= " zzzzzjctffffffff " 
31結果は= ' 1b3a0152bef25769f384a740aa189e78 ' 
32結果= result.decode(' ' 33  印刷暗号化(キー、結果)

 この問題は、文法のpythonの勉強だけではなく、また、暗号化アルゴリズムを理解し、hashlibライブラリの使用を検討しました。

おすすめ

転載: www.cnblogs.com/tqing/p/11585511.html
おすすめ