robertsosinski / ruby-des

A Ruby implementation of the Data Encryption Standard

This URL has Read+Write access

Wed Feb 18 19:25:05 -0800 2009
commit  5c2a2f24b9f3a3745efa9a5cacf71cf1562d5e1f
tree    b769185d7d3b35b294d7087e95fe5207e1ade1bd
parent  6a3bc7942b86adc841cdf9538790089c44d68894
name age message
file .gitignore Loading commit data...
file MIT-LICENSE
file README
file Rakefile
directory lib/
directory test/
README
== RubyDES

RubyDES is a full Ruby implementation of the Data Encryption Standard.  The purpose of this 
project was to allow Ruby programmers interested in cryptography a glimpse of how a robust 
cryptographic algorithm functions in a language they understand.

The best way to understand the RubyDES source code is by following along with a FIPS 46, 
which you can find at http://csrc.nist.gov/publications/fips/fips46-3/fips46-3.pdf

NOTE: DES is deprecated, and as such, you should not use this implementation in any project you 
are developing.  I highly recommend the AES, TwoFish or Serpent algorithms through the OpenSSL 
library instead.

== Running RubyDES

Using RubyDES is pretty easy.  First, construct a new data and key block.

  data = RubyDES::Block.new('mysecret')
  key  = RubyDES::Block.new('hushhush')

Then, build a new <tt>RubyDES::Ctx</tt> object and supply the data and key block.

  des = RubyDES::Ctx.new(data, key)

Finally, let it rip.

  encrypted_data = des.encrypt

You will then be returned a DES encrypted block that is completely secure against eavesdropping 
(if it were still 1997).

To decrypt an encrypted data block, just build a new <tt>RubyDES::Ctx</tt> object in similar 
fashion as before.

  un_des = RubyDES::Ctx.new(encrypted_data, key)

And run the DES with the key schedule reversed.

  decrypted_data = un_des.decrypt

You can then check to see if it all worked.

  data.bit_array.eql?(decrypted_data.bit_array)

Enjoy!

== Feedback

If you have any questions, comments or just want to talk shop about crypto, feel free to reach me 
through my website at http://www.robertsosinski.com.