Passr
🔒 "If you're able to memorize your passwords, you're doing it wrong."
Passr is a simple Ruby gem handling password generation, encryption and decryption.
Installation
Add this line to your application's Gemfile:
gem 'passr'And then execute:
$ bundle
Or install it yourself as:
$ gem install passr
After installing the gem, from the project's root folder run bundle exec passr install to generate a secret encryption key. This key will be saved to the file ./config/encryptor.yml and add it to the project's .gitignore. This file must be present for encryption and decryption. Be sure to make a backup of this key. If it is ever moved or deleted from the project, all encrypted passwords will be lost forever.
Usage
Generating Encrypted Passwords
Using Passr is a simple as requiring the gem and calling Passr.generate. The method will return a Hash containing the :password, :nonce, and :encrypted_password.
- 
:passwordis the unencrypted generated password.
- 
:encrypted_passwordis the encrypted generated password using the secret key stored in./config/encryption.ymland the nonce.
- 
:nonceis the nonce used to create the encrypted password. The nonce must be saved and provided for decryption.
Passr.generate has multiple options that can be passed in as arguments to customize the generated passwords.
- 
:lengthwill create a generated password with the given number of characters. Length defaults to 15 characters and must be under 40 characters.
- 
:noncewill create an encryption of the generated password using the given nonce. It will throw an error if the nonce is not compatible with the secret key saved in./config/encryption.yml.
require 'passr'
Passr.generate
# => {:password => "$4!~j9t=18%f+@I",
#     :encrypted_password => "XnShJLuUyArMMkMQNeQismHLukTeRa1LMJHRc39Avw==",
#     :nonce => "ee/1Z2YlXVkqmPn1CRPtukTzMa4fNh99"}
Passr.generate(length: 20,
               nonce: "ee/1Z2YlXVkqmPn1CRPtukTzMa4fNh99")
# => {:nonce => "ee/1Z2YlXVkqmPn1CRPtukTzMa4fNh99",
#     :password => "l~qy5g!j78=ndx2614N@",
#     :encrypted_password => "ZYrISzJiNpn2JpB+FrEgeymB6kOBG/gcNpHJezB4xPV3eXjV"}Decrypting Passwords
Simply decrypt any generated passwords calling Passr.reveal and passing in the encrypted password and the nonce used to encrypt the password as arguments and it will return the decrypted password as a String.
require 'passr'
Passr.generate
# => {:password => "$4!~j9t=18%f+@I",
#     :encrypted_password => "XnShJLuUyArMMkMQNeQismHLukTeRa1LMJHRc39Avw==",
#     :nonce => "ee/1Z2YlXVkqmPn1CRPtukTzMa4fNh99"}
Passr.reveal(password: "XnShJLuUyArMMkMQNeQismHLukTeRa1LMJHRc39Avw==",
             nonce: "ee/1Z2YlXVkqmPn1CRPtukTzMa4fNh99")
# => "$4!~j9t=18%f+@I"Development
After checking out the repo, run bin/setup to install dependencies. Then, run rake test to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.
Contributing
Contributions are welcome! Be sure to read our contributing guide before working on an issue. Bug reports and pull requests are welcome on GitHub at https://github.com/rdavid1099/passr.
License
The gem is available as open source under the terms of the MIT License.