Welcome to WebmasterWorld Guest from 54.224.0.153

Forum Moderators: coopster & jatar k

Message Too Old, No Replies

Check if something is base64_encoded?

     
10:13 am on Apr 26, 2006 (gmt 0)

Senior Member

WebmasterWorld Senior Member 10+ Year Member

joined:June 12, 2004
posts:789
votes: 0


How can I check is a string is base64_encoded?
10:54 am on Apr 26, 2006 (gmt 0)

Senior Member

WebmasterWorld Senior Member 10+ Year Member

joined:Jan 7, 2003
posts:1230
votes: 0


probably you can't. you can check if a string might be base64 encoded.

A 65-character subset of US-ASCII is used, enabling 6 bits to be represented per printable character. (The extra 65th character, "=", is used to signify a special processing function.)

from RFC 2045, Section 6.8 [faqs.org]


Table 1: The Base64 Alphabet
Value Encoding Value Encoding Value Encoding Value Encoding
0 A 17 R 34 i 51 z
1 B 18 S 35 j 52 0
2 C 19 T 36 k 53 1
3 D 20 U 37 l 54 2
4 E 21 V 38 m 55 3
5 F 22 W 39 n 56 4
6 G 23 X 40 o 57 5
7 H 24 Y 41 p 58 6
8 I 25 Z 42 q 59 7
9 J 26 a 43 r 60 8
10 K 27 b 44 s 61 9
11 L 28 c 45 t 62 +
12 M 29 d 46 u 63 /
13 N 30 e 47 v
14 O 31 f 48 w (pad) =
15 P 32 g 49 x
16 Q 33 h 50 y

as this table (taken from the RFC) shows, a base64 encoded string only contains A-Z, a-z. 0-9 and +, /, =, so you can express that with a regular expression quite easy: [A-Za-z0-9+/=]

if this expression matches, it means, that the provided string is base64 encoded, but it might be no guarantee. example for a non base64 encoded string:

Hello
- okay, just kidding a bit ;)

--hakre

11:02 am on Apr 26, 2006 (gmt 0)

Senior Member

WebmasterWorld Senior Member 10+ Year Member

joined:June 12, 2004
posts:789
votes: 0


Hmmm superlame. What about a function that maybe decodes an 'encoded' string? If you decode a non-encoded string, it comes up with all TM and C and R (trademark, copyright, registered logos) and stuff, not just normal text. So maybe, if we can check that the decoded data is a-z or 0-9 or -_ etc..., maybe?
11:06 am on Apr 26, 2006 (gmt 0)

Senior Member

WebmasterWorld Senior Member 10+ Year Member

joined:Jan 7, 2003
posts:1230
votes: 0


decode is no problem at all, take this: base64_decode() [php.net]. you can add some more decisions on the decoded text, that's right. if you even know what should be within the decoded data, then even better.
11:16 am on Apr 26, 2006 (gmt 0)

Senior Member

WebmasterWorld Senior Member 10+ Year Member

joined:June 12, 2004
posts:789
votes: 0


Yeah I get what you mean, ok, I'll go ahead and build a function.
11:27 am on Apr 26, 2006 (gmt 0)

Senior Member

WebmasterWorld Senior Member 10+ Year Member

joined:Jan 7, 2003
posts:1230
votes: 0


beacause of the "might" be base64 encoded nature of such a string i have no general function in my libraries, sorry. i think there could be a general not_base64_encoded(string) function available maybe ;)
7:38 pm on Jan 24, 2008 (gmt 0)

New User

5+ Year Member

joined:Nov 4, 2007
posts: 15
votes: 0



System: The following message was spliced on to this thread from: http://www.webmasterworld.com/php/3557138.htm [webmasterworld.com] by coopster - 7:30 pm on Jan. 24, 2008 (utc -6)


I would like to make an ammendment to the topic:

[webmasterworld.com...]

although hakre looks like he knows his stuff on the topic, I had to do some simple base64 checks and the proposed regular expression did not work. I think he missed a - somewhere in the list of accepted characters (which to be fair could easily be a typo ;) ).

below is a revised solution in PHP

preg_match('/^([A-Za-z0-9]\+\/\-\=)+$/', $string);

As hakre said though, this doesn't guarantee that it is base64 encoded, but it can check that JPEG image data has been encoded, for example.

Marcus

 

Join The Conversation

Moderators and Top Contributors

Hot Threads This Week

Featured Threads

Free SEO Tools

Hire Expert Members