前提
CTFの勉強中にHMAC-SHA1のサンプルコードに遭遇し、中身の処理でわからないところがあり、質問させていただきます。
該当のソースコードhmac_sha1.py
from hashlib import sha1 from binascii import hexlify BLOCK_SIZE = 64 # ハッシュ関数のブロック ipad = b'\x36' * BLOCK_SIZE opad = b'\x5c' * BLOCK_SIZE def xor(s1, s2): return bytes([ a ^ b for a, b in zip(s1, s2) ]) def hmac_sha1(key, msg): if len(key) > BLOCK_SIZE: key = sha1(key).digest() key = key + b'\x00' * (BLOCK_SIZE - len(key)) k_opad = xor(key, opad) k_ipad = xor(key, ipad) return sha1(k_opad + sha1(k_ipad + msg).digest()) print(hmac_sha1(b'secretkey', b'somedata').hexdigest()) # => b9a7a9d5256a599d69f09586278e046ce6430254
質問したい点
ソースコードの下記の部分の「a ^ b」で何をしているのか、わかりません。
def xor(s1, s2): return bytes([ a ^ b for a, b in zip(s1, s2) ])
そもそもaとbはどこからでてきたのでしょうか?
pythonを普段触らないので、初歩的な質問かもしれませんがお答えいただけると幸いです。
補足情報
使用している教材 「セキュリティコンテストCTFで学ぶ脆弱性攻略の技術」

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/05/01 00:32 編集
2022/05/01 05:03