Skip to content

Instantly share code, notes, and snippets.

@loloicci
Last active November 14, 2019 11:32
Show Gist options
  • Save loloicci/9ad2b3890eaab4220d33e94f21b2171e to your computer and use it in GitHub Desktop.
Save loloicci/9ad2b3890eaab4220d33e94f21b2171e to your computer and use it in GitHub Desktop.
unix-crypt-sha512

unix-crypt-sha512

command to make SHA512 password hash from stdin as crypt(3).

Options

  • -s: specifying salt.
  • -c: checking specified hash is valid for stdin.

Dependency

  • unix-crypt: unix-crypt-sha512.rb depends on it. To install, do gen install unix-crypt.
#! /usr/bin/env python3.7
import sys
import crypt
import re
def check(pass_hash):
m = re.match(r'^\$6\$(.+)\$.{86}$', pass_hash)
if not m:
print("invalid hash: %s" % pass_hash, file=sys.stderr)
exit(1)
salt = m.group(1)
if crypt.crypt(sys.stdin.read(), "$6$%s" % salt) == pass_hash:
print("True", file=sys.stderr)
exit(0)
else:
print("False", file=sys.stderr)
exit(1)
def main(argv):
if len(argv) == 3:
if argv[1] == '-s':
print(crypt.crypt(sys.stdin.read(), '$6$%s' % argv[2]))
elif argv[1] == '-c':
check(argv[2])
elif len(argv) == 1:
print(crypt.crypt(sys.stdin.read()))
else:
print("option can be only '-s' or '-c'", file=sys.stderr)
exit(1)
if __name__ == '__main__':
assert crypt.methods[0] == crypt.METHOD_SHA512, \
'METHOD_SHA512 cannot be used.'
main(sys.argv)
#! /usr/bin/env ruby
require 'unix_crypt'
def check(pass_hash)
m = /^\$6\$(.+)\$.{86}$/.match(pass_hash)
if not m then
puts ("invalid hash: %s" % pass_hash)
exit 1
end
salt = m.captures[0]
if UnixCrypt::SHA512.build($stdin.read, salt) == pass_hash then
STDERR.puts "True"
exit 0
else
STDERR.puts "False"
exit 1
end
end
def main(argv)
if argv.length == 0 then
pass = UnixCrypt::SHA512.build($stdin.read)
puts pass
elsif argv.length == 2 then
if argv[0] == "-s" then
salt = argv[1]
pass = UnixCrypt::SHA512.build($stdin.read, salt)
puts pass
elsif argv[0] == "-c" then
check(argv[1])
else
STDERR.puts "option can be only '-s' or '-c'"
exit 1
end
else
STDERR.puts "invalid numbers of args are passed."
exit 1
end
end
if __FILE__ == $0
main ARGV
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment