대칭 키 알고리즘에서 키는 암호나 다른 예측 가능한 데이터 대신에, 랜덤 바이트여야 합니다. 랜덤 바이트는 암호화 보안 의사 난수 생성기(CSPRNG)를 사용하여 생성되어야 합니다. 키가 어떤 식으로든 예측 가능하면 암호의 보안 수준이 감소하고 암호문에 접근한 공격자가 암호를 해독할 수 있다.
키가 임의의 바이트로 구성된 것처럼 보인다고 해서 키가 반드시 그런 것은 아니다. 이 경우 키는 해싱 기능을 사용하는 간단한 암호에서 파생되어 암호문을 크래킹할 수 있습니다.
이 문제를 해결하기 위해 HTTP 요청을 엔드포인트에 스크립팅하거나, 암호문을 오프라인으로 공격할 수 있습니다. 행운을 빕니다.
from Crypto.Cipher import AES
import hashlib
with open('words.txt', 'r') as f:
words = [w.strip() for w in f.readlines()]
def decrypt(ciphertext, password_hash): # 문제에 가져온 decrypt
ciphertext = bytes.fromhex(ciphertext)
key = bytes.fromhex(password_hash)
cipher = AES.new(key, AES.MODE_ECB)
try:
decrypted = cipher.decrypt(ciphertext)
except ValueError as e:
return {"error": str(e)}
return decrypted
ciphertext='c92b7734070205bdf6c0087a751466ec13ae15e6f1bcdd3f3a535ec0f4bbae66'
for dic in words:
password_hash = hashlib.md5(dic.encode()).hexdigest()
plaintext = decrypt(ciphertext, password_hash)
if b'crypto' in plaintext:
print(plaintext)