# Encrypting/decrypting data

**URL:** <https://www.ruby-forum.com/t/encrypting-decrypting-data/126729>\
**Category:** Ruby\
**Created:** [January 21, 2008, 7:06pm UTC](https://www.ruby-forum.com/t/encrypting-decrypting-data/126729 "2008-01-21T19:06:22Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [January 21, 2008, 7:06pm UTC](https://www.ruby-forum.com/t/encrypting-decrypting-data/126729/1 "2008-01-21T19:06:22Z")

</div>

Hi,

I’m using the latest version of Ruby for Fedora Core 6 Linux. I want  
to store credit card info in my database. I’d like to store it in an  
encrypted form, but I’d also like to be able to decrypt it later.  
Does anyone have any useful encryption/decryption routines?

Thanks, - Dave

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [January 21, 2008, 7:33pm UTC](https://www.ruby-forum.com/t/encrypting-decrypting-data/126729/2 "2008-01-21T19:33:09Z")

</div>

On Jan 21, 2008, at 11:05 AM, removed\_email\_address@domain.invalid wrote:

> I’m using the latest version of Ruby for Fedora Core 6 Linux. I want  
> to store credit card info in my database. I’d like to store it in an  
> encrypted form, but I’d also like to be able to decrypt it later.  
> Does anyone have any useful encryption/decryption routines?
> 
> Thanks, - Dave

module Site  
module Encryption  
class \<\< self  
attr\_accessor ‘mac\_address’  
def mac\_address  
return @mac\_address if defined? @mac\_address  
re = %r/^:-{5}[0-9A-F][0-9A-F][^:  
-]/io  
cmds = ‘/sbin/ifconfig’, ‘/bin/ifconfig’, ‘ifconfig’,  
‘ipconfig /all’

```
     null = test(?e, '/dev/null') ? '/dev/null' : 'NUL'

     lines = nil
     cmds.each do |cmd|
       stdout = IO.popen("#{ cmd } 2> #{ null }"){|fd|

```

fd.readlines} rescue next  
next unless stdout and stdout.size \> 0  
lines = stdout and break  
end  
raise “all of #{ cmds.join ’ ’ } failed” unless lines

```
     candidates = lines.select{|line| line =~ re}
     raise 'no mac address candidates' unless candidates.first
     candidates.map!{|c| c[re]}

     maddr = candidates.first
     raise 'no mac address found' unless maddr

     maddr.strip!
     maddr.instance_eval{ @list = candidates; def list() @list end }

     @mac_address = maddr
   end
   attr_accessor 'blowfish'
   def blowfish
     @blowfish ||= Crypt::Blowfish.new(key)
   end
   attr_accessor 'key'
   def key
     @key ||= "--#{ mac_address }--#{ hostname }--"[0,56]
   end
   attr_accessor 'hostname'
   def hostname
     @hostname ||= Socket.gethostname
   end
   def encrypt string
     Base64.encode64(blowfish.encrypt_string(string.to_s)).chop #

```

kill “\n”  
end  
def decrypt string, kw = {}  
blowfish.decrypt\_string(Base64.decode64(“#{ string }\n”)).strip  
end  
end  
end  
def self.encryption() Encryption end  
def self.encrypt(\*a, &b)  
Encryption.encrypt(\*a, &b)  
end  
def self.decrypt(\*a, &b)  
Encryption.decrypt(\*a, &b)  
end  
end

you will want to set both the mac\_address, the key, or both. you’ll  
need crypt/blowfish for tis to work, obviously.

regards.

a @ [http://codeforpeople.com/](http://codeforpeople.com/)

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [January 21, 2008, 7:46pm UTC](https://www.ruby-forum.com/t/encrypting-decrypting-data/126729/3 "2008-01-21T19:46:40Z")

</div>

On Jan 21, 2008 1:05 PM, removed\_email\_address@domain.invalid  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Hi,
> 
> I’m using the latest version of Ruby for Fedora Core 6 Linux. I want  
> to store credit card info in my database. I’d like to store it in an  
> encrypted form, but I’d also like to be able to decrypt it later.  
> Does anyone have any useful encryption/decryption routines?

You can use the net/ssl standard library code to do this. Here’s a  
blog post I found on this subject  
[http://blog.leetsoft.com/2006/03/14/simple-encryption](http://blog.leetsoft.com/2006/03/14/simple-encryption)

I just scored my first “googlewhack” when I tried to find this post  
again right now, with the search “ruby openssl create\_keys”  
create\_keys coming from the code in the rails app where I used this.

That said, one needs to be very careful in considering storing credit  
card info, that private key is precious since if someone gets it and  
the cc info get’s leak, you might well be legally responsible.

In the site where I used this, the public-facing machine has only a  
public key which is used to encrypt the cc data in the database which  
is running inside a company network accessible only through an ssh  
connection, only the firewalled database server machine has the  
private key.

–  
Rick DeNatale

My blog on Ruby  
[http://talklikeaduck.denhaven2.com/](http://talklikeaduck.denhaven2.com/)

---

<div class="post-metadata">

**Author:** ![casper\_the\_ghost](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/58956e/32.png) [@casper\_the\_ghost](https://www.ruby-forum.com/u/casper_the_ghost)\
**Post date:** [January 21, 2008, 11:10pm UTC](https://www.ruby-forum.com/t/encrypting-decrypting-data/126729/4 "2008-01-21T23:10:39Z")

</div>

On Jan 21, 12:32 pm, “ara.t.howard” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> ```
> @mac_address = maddr
> def hostname
> 
> ```
> 
> end  
> need crypt/blowfish for tis to work, obviously.
> 
> regards.
> 
> ## a @[http://codeforpeople.com/](http://codeforpeople.com/)
> 
> share your knowledge. it’s a way to achieve immortality.  
> h.h. the 14th dalai lama

I’m trying to install ruby blowfish, which I got from this link –  
[http://webscripts.softpedia.com/scriptDownload/Crypt-Blowfish-Download-18480.html](http://webscripts.softpedia.com/scriptDownload/Crypt-Blowfish-Download-18480.html).  
But when logged in as root to my Fedora Core 6 Linux box, this is the  
error I got when trying to install:

[root@mymachine crypt\_blowfish-0.6.1]# ruby make.rb  
Do you want to install the binary (b) or pure-ruby (r) core? (b/r)?  
r  
make.rb:22: private method `rm' called for File:Class (NoMethodError) from make.rb:9:in `loop’  
from make.rb:9

I get the same result if I choose the “b” option. - Dave
