Welcome to OverStack Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others


0 votes
in Technique[技术] by (71.8m points)

ruby on rails - check if string is base64

i may recieve these two strings:

    base = Base64.encode64(File.open("/home/usr/Desktop/test", "rb").read)
    => "YQo=

    string = File.open("/home/usr/Desktop/test", "rb").read
    => "a

what i have tried so far is to check string with regular expression i-e. /([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==$)/ but this would be very heavy if the file is big.

I also have tried base.encoding.name and string.encoding.name but both returns the same.

I have also seen this post and got regular expression solution but any other solution ?

Any idea ? I just want to get is the string is actually text or base64 encoded text....

See Question&Answers more detail:os

Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

You can use something like this, not very performant but you are guaranteed not to get false positives:

require 'base64'

def base64?(value)
  value.is_a?(String) && Base64.strict_encode64(Base64.decode64(value)) == value

The use of strict_encode64 versus encode64 prevents Ruby from inadvertently inserting newlines if you have a long string. See this post for details.

Welcome to OverStack Developer Community-Open, Learning and Share