38 lines
1.1 KiB
Python
38 lines
1.1 KiB
Python
def generate_spam_flag():
|
|
import base64, hashlib, os, re
|
|
encode = lambda s: re.sub(r'[a-z/+=\n]', r'', base64.encodebytes(s).decode()).upper()
|
|
secret = '1234'
|
|
|
|
prefix = encode(os.urandom(64))[:16]
|
|
suffix = encode(hashlib.sha256((prefix + secret).encode()).digest())[:15]
|
|
return prefix + suffix + '='
|
|
|
|
|
|
def is_spam_flag(flag):
|
|
import base64, hashlib, re
|
|
encode = lambda s: re.sub(r'[a-z/+=\n]', r'', base64.encodebytes(s).decode()).upper()
|
|
secret = '1234'
|
|
|
|
prefix = flag[:16].upper()
|
|
suffix = encode(hashlib.sha256((prefix + secret).encode()).digest())[:15]
|
|
return flag[16:].upper() == suffix + '='
|
|
|
|
|
|
def test():
|
|
import base64, hashlib, os, re
|
|
encode = lambda s: re.sub(r'[a-z/+=\n]', r'', base64.encodebytes(s).decode()).upper()
|
|
for i in range(10**4):
|
|
flag = encode(os.urandom(128))[:31] + '='
|
|
if i < 30:
|
|
print(flag)
|
|
assert not is_spam_flag(flag)
|
|
|
|
for i in range(10**3):
|
|
assert is_spam_flag(generate_spam_flag())
|
|
|
|
print('Ok')
|
|
|
|
|
|
if __name__ == '__main__':
|
|
test()
|