#!/usr/bin/env ruby require 'io/console' require 'openssl' require 'base64' username = ARGV.shift url = ARGV.shift length = ARGV.shift.to_i print('Passphrase: '); passphrase = STDIN.noecho(&:gets).chomp; print("\n") salt = "#{username}@#{url}" iterations = 5000 digest = OpenSSL::Digest::SHA512.new pbkdf2 = OpenSSL::PKCS5.pbkdf2_hmac(passphrase, salt, iterations, length, digest) password = Base64.encode64(pbkdf2).chomp[0..length-1] puts(password)