Hacker News new | ask | show | jobs
by acchow 1372 days ago
I have no idea where to even begin if the digest does not leak something about the data
3 comments

The same way as a normal quine:

  $ cat >a.py
  #! /bin/python
  import hashlib
  s='#! /bin/python\nimport hashlib\ns=%r\nprint hashlib.sha512(s%%s).hexdigest()\n'
  print hashlib.sha512(s%s).hexdigest()
  $ python a.py
  cf1daf466a7a95b245eab685b808fb861dab9af26078250a8041c4c08a8ff384 (edit: wrap)
  7f7d1853f9d62d6b40cc53d0c5be3efd80eb09f57b71250910c0d6157b73fcd3
  $ sha512sum a.py
  cf1daf466a7a95b245eab685b808fb861dab9af26078250a8041c4c08a8ff384 (edit: wrap)
  7f7d1853f9d62d6b40cc53d0c5be3efd80eb09f57b71250910c0d6157b73fcd3  a.py
Oh duh. That's a clever trick which is rather obvious in hindsight.
Any cryptographic digest is not supposed to leak anything about the data that went in. That’s a core property.

In this case the hash doesn’t depend on the data at all. Do you see how that helps?

  #!/bin/sh
  HASH=6ce1c11751e405291eac368af96de90f
  # Increment until hash of this file equals $HASH: 1
  echo $HASH