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


#1

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.


#2

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.


#3

2012/12/20 Iñaki Baz C. removed_email_address@domain.invalid:

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’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/


#4

2012/12/20 Peter H. removed_email_address@domain.invalid:

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.


#5

Hi,

2012/12/20 Iñaki Baz C. removed_email_address@domain.invalid:

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 H.


#6

Crypt19 works fine with Ruby 1.9.3

http://rubygems.org/gems/crypt19


#7

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

Thanks to both.

2012/12/20 Heesob P. removed_email_address@domain.invalid: