I will try it and let you know. Thanks for support.
On Dec 13, 8:52 am, Andrius Chamentauskas <[email protected]> wrote:
> Even though i think you should use some known encryption algorythm,
> here's translated source (not tested):
>
> require 'digest/md5'
> require 'base64'
>
> class String
> def ^(value)
> rez = ""
> self.length.times { |i| rez << (self[i] ^ value[i %
> value.length].to_i) }
> rez
> end
> end
>
> def get_rnd_iv(iv_len)
> chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a
> iv = ""
> iv_len.times { iv << chars[rand(chars.size)] }
> return iv
> end
>
> def md5_encrypt(plain_text, password, iv_len = 16 )
> plain_text += "\x13"; # for some reason i believe that it should be
> \n instead of \x13, a bug in a script?
> plain_text += "\0" * (16 - plain_text.length % 16)
>
> enc_text = get_rnd_iv(iv_len);
> iv = (password ^ enc_text)[0, 512];
>
> (plain_text.length % 16).times do |i|
> block = plain_text[i * 16, 16] ^ Digest::MD5.hexdigest(iv)
> enc_text += block
> iv = (block + iv)[0, 512] ^ password
> end
>
> return Base64.encode64(enc_text);
> end
>
> def md5_decrypt(enc_text, password, iv_len = 16)
> enc_text = Base64.decode64(enc_text);
> plain_text = '';
> iv = (password ^ enc_text[0, iv_len])[0, 512];
>
> i, n = iv.length, enc_text.length
> while i < n
> block = enc_text[i, 16]
> plain_text += block ^ Digest::MD5.hexdigest(iv)
> iv = (block + iv)[0, 512] ^ password
> i += 16
> end
>
> return plain_text.gsub(/\x13\x00*$/, '');
> end
>
> On Dec 13, 4:37 am, "Mr. Bless" <[email protected]> wrote:
>
> > Hi guys i found this encryption decryption in php and try to convert
> > it in rails but i am unable to successfully convert it. So plz help
> > me. I you write the whole conversion code then it will be great.
>
> > PHP code is like this
> > ================
> > #
> > #/**********************************************
> > #**
> > #** MD5 block cypher
> > #**
> > #** Author..: leapinglangoor [ [email protected] ]
> > #** Date....: 30th Apr 2005
> > #** version.: v1.00
> > #**
> > #** Desc....: Below is MD5-based block cypher ( MDC-like ),
> > #** which works in 128bit CFB mode. It is very useful to
> > #** encrypt secret data before transfer it over the network.
> > #**
> > #** $iv_len - initialization vector's length.
> > #** 0 <= $iv_len <= 512
> > #**
> > #************************************************/
> > #
> > function get_rnd_iv( $iv_len )
> > {
>
> > $iv = '';
> > while ( $iv_len-- > 0 )
> > {
> > $iv .= chr( mt_rand( ) & 0xff );
> > }
>
> > return $iv;
>
> > }
>
> > function md5_encrypt( $plain_text, $password, $iv_len = 16 )
> > {
>
> > $plain_text .= "\x13";
> > $n = strlen( $plain_text );
> > if ( $n % 16 )
> > {
> > $plain_text .= str_repeat( "\0", 16 - ( $n % 16 ) );
> > }
>
> > $i = 0;
> > $enc_text = get_rnd_iv( $iv_len );
> > $iv = substr( $password ^ $enc_text, 0, 512 );
> > while ( $i < $n )
> > {
> > $block = substr( $plain_text, $i, 16 ) ^ pack( 'H*', md5
> > ( $iv ) );
> > $enc_text .= $block;
> > $iv = substr( $block . $iv, 0, 512 ) ^ $password;
> > $i += 16;
> > }
>
> > return base64_encode( $enc_text );
>
> > }
>
> > function md5_decrypt( $enc_text, $password, $iv_len = 16 )
> > {
>
> > $enc_text = base64_decode( $enc_text );
> > $n = strlen( $enc_text );
> > $i = $iv_len;
> > $plain_text = '';
> > $iv = substr( $password ^ substr( $enc_text, 0, $iv_len ), 0,
> > 512 );
> > while ( $i < $n )
> > {
> > $block = substr( $enc_text, $i, 16 );
> > $plain_text .= $block ^ pack( 'H*', md5( $iv ) );
> > $iv = substr( $block . $iv, 0, 512 ) ^ $password;
> > $i += 16;
> > }
>
> > return preg_replace( '/\\x13\\x00*$/', '', $plain_text );
>
> > }
>
> > and I Tried like this
> > ===============
> > def get_rnd_iv(iv_len)
> > iv=''
> > while (iv_len>0) do
> > iv_len -=1
> > iv +=rand(255).chr
> > end
> > return iv
> > end
>
> > def md5_encrypt(plain_text,password,iv_len=16)
> > plain_text +="\x13"
> > n=plain_text.size
> > if(n%16)
> > plain_text +="\0"*(16-(n%16))
> > end
> > i=0
> > enc_text=get_rnd_iv(iv_len)
> > enc=''
> > pass=''
> > for i in 0..password.size-1
> > pass +=password[i].to_s(2)
> > end
> > for i in 0..enc_text.size-1
> > enc +=enc_text[i].to_s(2)
> > end
> > intervalue=(pass.to_i^enc.to_i).to_s
> > iv=password^enc_text.split(0,512)
> > iv=intervalue[0,512]
> > while ( $i < $n )
> > {
> > $block = substr( $plain_text, $i, 16 ) ^ pack( 'H*', md5
> > ( $iv ) );
> > $enc_text .= $block;
> > $iv = substr( $block . $iv, 0, 512 ) ^ $password;
> > $i += 16;
> > }
> > while(i<n) do
> > pp_text=plain_text[i,16]
> > pp=''
> > for j in 0..pp_text.size-1
> > pp+=pp_text.to_s(2)
> > end
> > block=pp^pack('H*',Digest::MD5.hexdigest(iv))
> > enc_text +=block
> > intermedi=block+iv
> > kk=''
> > for j in 0..intermedi.size-1
> > kk +=intermedi[j].to_s(2)
> > end
> > iv=kk.to_i^pass.to_i
> > i +=16
> > end
> > return Base64.encode64(enc_text)
> > end
> > #
>
> > def md5_decrypt(enc_text,password,iv_len=16)
> > enc_text=Base64.decode64( enc_text)
>
> > n=enc_text.size
> > i=iv_len
> > plain_text=''
> > pass=''
> > for ii in 0..password.size-1
> > pass +=password[ii].to_s(2)
> > end
> > lmp=enc_text[0,iv_len]
> > enc=''
> > for k in 0..lmp.size-1
> > enc=lmp[k].to_s(2)
> > end
>
> > intermedi=(pass.to_i ^lmp.to_i) .to_s
> > iv=intermedi[0,512]
> > while(i<n) do
>
> > block = enc_text[ i, 16 ]
> > plain_text += block ^ pack( 'H*', Digest::MD5.hexdigest
> > ( iv ) )
> > # plain_text += block
> > cc=block+iv
> > iv = cc[ 0, 512].to_i ^ pass.to_i
> > i += 16
> > end
>
> > return preg_replace( '/\\x13\\x00*$/', '', $plain_text );
> > end
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---