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
-~----------~----~----~----~------~----~------~--~---

Reply via email to