Forum: Ruby decrypt challenge - perl encrypt with ruby decrypt

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Aec10c73877ea116bab759e060b2fcb3?d=identicon&s=25 aktxyz@gmail.com (Guest)
on 2007-06-14 01:00
(Received via mailing list)
Ok, so I am trying integrate with someone who is sending me a string
that is triple des encrypted thru perl.
I need to decrypt the string thru ruby.

I have had no luck decrypting, so decided I would try to encrypt in
ruby as a sanity check...of course...I get different results.

HELP please :)

Here is the perl...then the ruby.  Oh yes, and I am so glad there are
no ; in ruby !


#========================= perl
use Crypt::TripleDES;
use URI::Escape;

my $key="AKJSAYOQWOEIQWLEKJQLKNDDOIQQLWEL";
my $token="1234567890";

my $des = new Crypt::TripleDES;
my $string= $des->encrypt3($token,$key);
#print "string=$string\n\n";
$string=uri_escape($string);
print "string=$string\n\n";

>> string=%0AP%91%06%0APq%7D%12%E83%DD%87%1C%7Cz




#========================= ruby
require 'openssl'
require 'cgi'
require 'uri'

key = "AKJSAYOQWOEIQWLEKJQLKNDDOIQQLWEL"
token = "1234567890"

e = OpenSSL::Cipher::Cipher.new 'DES-EDE3'
e.encrypt key
s = e.update token
s << e.final
puts URI.escape(s)
F54bc341bc19c48e5860fda022663795?d=identicon&s=25 Nathan Taylor (shadowcipher)
on 2007-06-14 16:48
(Received via mailing list)
The problem with your code is that you are using two different
encryption
algorithims.

You are implementing TripleDES in ECB mode in perl, and TripleDES in
DES_EDE3 mode in ruby.  The latter being a block cipher that is
expecting
data to be fed to it in 8-bit blocks one at a time.  To match them up
you
would have to use Crypt::DES_EDE3 in perl, however that would mean your
data
would have to be supplied in 8-bit blocks which would be very
inconvenient
unless you were operating on binary data and supplying some kind of
padding
as needed.  I would suggest finding out how to implement the ECB mode in
ruby to match up with your perl code.  I looked online at ruby-lang.org
but
couldn't find a list of ciphers that the .new method accepts.  Good
luck.

- Nathan
Cf6d0868b2b4c69bac3e6f265a32b6a7?d=identicon&s=25 Daniel Martin (Guest)
on 2007-06-16 15:31
(Received via mailing list)
"Nathan Taylor-Hoover" <onebitcipher@gmail.com> writes:

> The problem with your code is that you are using two different encryption
> algorithims.

Not quite; see http://www.openssl.org/docs/apps/enc.html - in brief:

 des-ede3-cbc       Three key triple DES EDE in CBC mode
 des-ede3           Three key triple DES EDE in ECB mode
 des3               Alias for des-ede3-cbc
 des-ede3-cfb       Three key triple DES EDE CFB mode
 des-ede3-ofb       Three key triple DES EDE in OFB mode

So the cipher being used should in theory work, but it clearly doesn't
at all.  I can't find any decent information relating what
Crypt:TripleDES does to an equivalent operation for openssl. (openssl
in ruby or otherwise) I also don't know that passing the key as the
argument to encrypt is the appropriate behavior.

Openssl has both keys and initial values, which are derived from
passphrases in a manner I don't understand.  Crypt::TripleDES uses
only a key, and I don't know how those two correspond to each other.
This topic is locked and can not be replied to.