the encoding IS indeed utf8 and the column is a string column (varchar
255). how can I correct this?

On Mar 3, 3:51 pm, Frederick Cheung <[email protected]>
wrote:
> On 3 Mar 2009, at 10:37, Ram wrote:
>
>
>
> > Im trying to encrypt a string and store it in the DB. But there seems
> > to be some interpretation problems both in Ruby and in MySQL. Here's
> > what Ive tried and the results.. (the data to be encrypted is the
> > string "1231821029")
>
> Watch out for the type of the column you are storing the data in - if  
> it is a text column with encoding utf8 mysql will truncate if it  
> encounters an invalid utf8 sequence.
>
> Fred
>
> > #Crypt MODULE has
>
> >  def AESCrypt.decrypt(encrypted_data, key, iv, cipher_type="aes-256-
> > cbc")
> >    aes = OpenSSL::Cipher::Cipher.new(cipher_type)
> >    aes.decrypt
> >    aes.key = key
> >    aes.iv = iv if iv != nil
> >    aes.update(encrypted_data) + aes.final
> >  end
>
> >  def AESCrypt.encrypt(data, key, iv, cipher_type="aes-256-cbc")
> >    aes = OpenSSL::Cipher::Cipher.new(cipher_type)
> >    aes.encrypt
> >    aes.key = key
> >    aes.iv = iv if iv != nil
> >    aes.update(data) + aes.final
> >  end
>
> > #Raising the encrypted data after form submit and before save in yaml
> > format
>
> > "\x8E\xEDP\xB4&U\xA6\xDA[\xCC\xFD\xB11m\xDB\x14"
>
> > #Console tests
>
> >>> x = AESCrypt.encrypt("1231821029", "X"*32, "I"*32)
> > => "\216?P?&U\246?[??\2611m?"
> >>> y = AESCrypt.decrypt("\216?P?&U\246?[??\2611m?", "X"*32, "I"*32)
> > OpenSSL::CipherError: wrong final block length
> >    from /Users/fire/Sites/Vinay/ROR/RealApps/fi_rest_auth/config/
> > initializers/aes_crypt.rb:20:in `final'
> >    from /Users/fire/Sites/Vinay/ROR/RealApps/fi_rest_auth/config/
> > initializers/aes_crypt.rb:20:in `decrypt'
> >    from (irb):3
> >>> y = AESCrypt.decrypt(x, "X"*32, "I"*32)
> > => "1231821029"
> >>> y = AESCrypt.decrypt("\x8E\xEDP\xB4&U\xA6\xDA[\xCC\xFD\xB11m\xDB
> >>> \x14", "X"*32, "I"*32)
> > => "1231821029" # notice the string i used here is the one i raised
> > before save. that too, works. although it is different from what the
> > console returns for the encrypt function.
> >>> x
> > => "\216?P?&U\246?[??\2611m?"
>
> > #Encrypted data stored in DB
>
> > ??P?&U??[???1m?
>
> > even the SQL insert call has ??P?&U??[???1m? if I check the logs.
> > Im basically getting 3 different values at 3 different points for the
> > same encrypted data. ie.
>
> > before_save - "\x8E\xEDP\xB4&U\xA6\xDA[\xCC\xFD\xB11m\xDB\x14"
> > after_save in DB - ??P?&U??[???1m?
> > in the console - "\216?P?&U\246?[??\2611m?"
>
> > And when i try to decrypt using whats there in the DB, I get "bad
> > decrypt - wrong final block length".
>
> > Any idea what im missing here? Ive done some serious digging and ive
> > hit bedrock and no water. Hoping someone here's got the answer.
>
> > Cheers!
--~--~---------~--~----~------------~-------~--~----~
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