OpenSSL::Cipher dad decrypt


#1

I’m trying to implement a simple encrypt and decrypt function in Rails.
I’ve found this Ruby script using OpenSSL::Cipher::Cipher.

When I try with the “wrong” KEY value, just to test it, I get an error
saying “bad decrypt”. How can I avoid the error, or read the error so I
can stop the script?


#2

Pål Bergström wrote:

I’m trying to implement a simple encrypt and decrypt function in Rails.
I’ve found this Ruby script using OpenSSL::Cipher::Cipher.

When I try with the “wrong” KEY value, just to test it, I get an error
saying “bad decrypt”. How can I avoid the error, or read the error so I
can stop the script?

dad? hehe. :slight_smile:

Should be “bad” of course.


#3

On 2 May 2009, at 21:45, Pål Bergström wrote:

I’m trying to implement a simple encrypt and decrypt function in
Rails.
I’ve found this Ruby script using OpenSSL::Cipher::Cipher.

When I try with the “wrong” KEY value, just to test it, I get an error
saying “bad decrypt”. How can I avoid the error, or read the error
so I
can stop the script?

Show us the code you’re actually using and we can make constructive
suggestions :slight_smile:
Also whilst the particular techniques may or may not be applicable,
you can find some examples of doing OpenSSL crypto in the
presentations linked in my sig: the Semantic DNS presentation has a
substantial example (using AES).

Ellie

Eleanor McHugh
Games With Brains
http://slides.games-with-brains.net

raise ArgumentError unless @reality.responds_to? :reason


#4

Eleanor McHugh wrote:

On 2 May 2009, at 21:45, P�l Bergstr�m wrote:

Show us the code you’re actually using and we can make constructive
suggestions :slight_smile:
Also whilst the particular techniques may or may not be applicable,
you can find some examples of doing OpenSSL crypto in the
presentations linked in my sig: the Semantic DNS presentation has a
substantial example (using AES).

This is what I use. Would be good if I could catch the error and prevent
it from “hanging” the browser with an error (using Rails).


require ‘openssl’
require ‘digest/sha2’
require ‘cgi’

module Crypto

def self.encrypt(plain_text)

cgi = CGI.new("html3")
passo = cgi.cookies["thecookie"].to_s

c = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
c.encrypt
c.key = key = Digest::SHA2.digest(passo)
e = c.update(plain_text)
e << c.final
e = Base64.b64encode(e)
return e

end

def self.decrypt(cstring)

cgi = CGI.new("html3")
passo = cgi.cookies["thecookie"].to_s

etext = Base64.decode64(cstring)
c = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
c.decrypt
c.key = key = Digest::SHA2.digest(passo)
d = c.update(etext)
d << c.final

return d

end

end


#5

Eleanor McHugh wrote:

begin
c = OpenSSL::Cipher::Cipher.new(“aes-256-cbc”)
c.decrypt
c.key = key = Digest::SHA2.digest(passo)
d = c.update(etext)
d << c.final
d
rescue OpenSSL::CipherError => e
“incorrect password”
rescue Exception => e
“unknown error”
end

Thanks. Got it working. :slight_smile:


#6

On 3 May 2009, at 14:44, Pål Bergström wrote:

This is what I use. Would be good if I could catch the error and
prevent
it from “hanging” the browser with an error (using Rails).

end
You need to do something along the lines of:

begin
c = OpenSSL::Cipher::Cipher.new(“aes-256-cbc”)
c.decrypt
c.key = key = Digest::SHA2.digest(passo)
d = c.update(etext)
d << c.final
d
rescue OpenSSL::CipherError => e
“incorrect password”
rescue Exception => e
“unknown error”
end

where you can have several rescue blocks, one for each exception
recovery behaviour you have a use for.

Ellie

Eleanor McHugh
Games With Brains
http://slides.games-with-brains.net

raise ArgumentError unless @reality.responds_to? :reason


#7

On 3 May 2009, at 19:03, Pål Bergström wrote:

"incorrect password"

rescue Exception => e
“unknown error”
end

Thanks. Got it working. :slight_smile:

Excellent :slight_smile:

Ellie

Eleanor McHugh
Games With Brains
http://slides.games-with-brains.net

raise ArgumentError unless @reality.responds_to? :reason