Efficient way to encode a string with a secret string and recover it

Hi, basically I receive a string generated by a user, then "encode" it
using some secret string I own and pass the result to other user, and
when I receive such a resulting string I must be able to decode it
using my secret string (but no other should be able to decode the
resulting string without knowing my secret key. This is:

original_string = "test"

secret_key = "ABCD"

modified_string = HASH_FUNCTION(original_string, secret_key)

original_string = UNHASH_FUNCTION(modified_string, secret_key)

Any suggestion for the above HASH_FUNCTION and UNHASH_FUNCTION? I
would like it to be something really efficient.

Thanks a lot.

···

--
Iñaki Baz Castillo
<ibc@aliax.net>

The nature of a hash function is that there is no unhash function. It would
be pretty useless if there was.

What you want is encryption like RSA, Blowfish or rot13.

PS the rot13 thing was a joke.

I've found the Crypt [*] library but it seems not adapted for Ruby
1.9. And I would prefer a C based Ruby extension.

[*] http://crypt.rubyforge.org/

···

2012/12/20 Iñaki Baz Castillo <ibc@aliax.net>:

Hi, basically I receive a string generated by a user, then "encode" it
using some secret string I own and pass the result to other user, and
when I receive such a resulting string I must be able to decode it
using my secret string (but no other should be able to decode the
resulting string without knowing my secret key. This is:

original_string = "test"

secret_key = "ABCD"

modified_string = HASH_FUNCTION(original_string, secret_key)

original_string = UNHASH_FUNCTION(modified_string, secret_key)

Any suggestion for the above HASH_FUNCTION and UNHASH_FUNCTION? I
would like it to be something really efficient.

--
Iñaki Baz Castillo
<ibc@aliax.net>

Hi,

Hi, basically I receive a string generated by a user, then "encode" it
using some secret string I own and pass the result to other user, and
when I receive such a resulting string I must be able to decode it
using my secret string (but no other should be able to decode the
resulting string without knowing my secret key. This is:

original_string = "test"

secret_key = "ABCD"

modified_string = HASH_FUNCTION(original_string, secret_key)

original_string = UNHASH_FUNCTION(modified_string, secret_key)

Any suggestion for the above HASH_FUNCTION and UNHASH_FUNCTION? I
would like it to be something really efficient.

Thanks a lot.

You can use openssl module something like this:

def encrypt(input,key)
  require 'openssl'
  des = OpenSSL::Cipher::Cipher.new("des-ede-cbc")
  des.encrypt
  des.key= "%16s" % key
  des.update(input)+des.final
end

def decrypt(input,key)
  require 'openssl'
  des = OpenSSL::Cipher::Cipher.new("des-ede-cbc")
  des.decrypt
  des.key = "%16s" % key
  des.update(input)+des.final
end

But, I am not sure it is really efficient.

Regards,

Park Heesob

···

2012/12/20 Iñaki Baz Castillo <ibc@aliax.net>:

Crypt19 works fine with Ruby 1.9.3

http://rubygems.org/gems/crypt19

···

--
Posted via http://www.ruby-forum.com/.

The nature of a hash function is that there is no unhash function. It would
be pretty useless if there was.

Yes, sorry, bad word. I just meant "encode/decode" rather than "hash".

What you want is encryption like RSA, Blowfish or rot13.

PS the rot13 thing was a joke.

Ok, thanks a lot.

···

2012/12/20 Peter Hickman <peterhickman386@googlemail.com>:

--
Iñaki Baz Castillo
<ibc@aliax.net>

Thanks, I'm trying it and will compare with crypt19 as suggested by Joel.

Thanks to both.

···

2012/12/20 Heesob Park <phasis@gmail.com>:

Hi,

2012/12/20 Iñaki Baz Castillo <ibc@aliax.net>:

Hi, basically I receive a string generated by a user, then "encode" it
using some secret string I own and pass the result to other user, and
when I receive such a resulting string I must be able to decode it
using my secret string (but no other should be able to decode the
resulting string without knowing my secret key. This is:

original_string = "test"

secret_key = "ABCD"

modified_string = HASH_FUNCTION(original_string, secret_key)

original_string = UNHASH_FUNCTION(modified_string, secret_key)

Any suggestion for the above HASH_FUNCTION and UNHASH_FUNCTION? I
would like it to be something really efficient.

Thanks a lot.

You can use openssl module something like this:

def encrypt(input,key)
        require 'openssl'
        des = OpenSSL::Cipher::Cipher.new("des-ede-cbc")
        des.encrypt
        des.key= "%16s" % key
        des.update(input)+des.final
end

def decrypt(input,key)
        require 'openssl'
        des = OpenSSL::Cipher::Cipher.new("des-ede-cbc")
        des.decrypt
        des.key = "%16s" % key
        des.update(input)+des.final
end

But, I am not sure it is really efficient.

Regards,

Park Heesob

--
Iñaki Baz Castillo
<ibc@aliax.net>