homepage Welcome to WebmasterWorld Guest from 23.20.61.85
register, free tools, login, search, pro membership, help, library, announcements, recent posts, open posts,
Become a Pro Member
Home / Forums Index / Code, Content, and Presentation / PHP Server Side Scripting
Forum Library, Charter, Moderators: coopster & jatar k

PHP Server Side Scripting Forum

    
Check if something is base64_encoded?
ahmedtheking

WebmasterWorld Senior Member 10+ Year Member



 
Msg#: 12656 posted 10:13 am on Apr 26, 2006 (gmt 0)

How can I check is a string is base64_encoded?

 

hakre

WebmasterWorld Senior Member 10+ Year Member



 
Msg#: 12656 posted 10:54 am on Apr 26, 2006 (gmt 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

ahmedtheking

WebmasterWorld Senior Member 10+ Year Member



 
Msg#: 12656 posted 11:02 am on Apr 26, 2006 (gmt 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?

hakre

WebmasterWorld Senior Member 10+ Year Member



 
Msg#: 12656 posted 11:06 am on Apr 26, 2006 (gmt 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.

ahmedtheking

WebmasterWorld Senior Member 10+ Year Member



 
Msg#: 12656 posted 11:16 am on Apr 26, 2006 (gmt 0)

Yeah I get what you mean, ok, I'll go ahead and build a function.

hakre

WebmasterWorld Senior Member 10+ Year Member



 
Msg#: 12656 posted 11:27 am on Apr 26, 2006 (gmt 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 ;)

msykes

5+ Year Member



 
Msg#: 12656 posted 7:38 pm on Jan 24, 2008 (gmt 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

Global Options:
 top home search open messages active posts  
 

Home / Forums Index / Code, Content, and Presentation / PHP Server Side Scripting
rss feed

All trademarks and copyrights held by respective owners. Member comments are owned by the poster.
Home ¦ Free Tools ¦ Terms of Service ¦ Privacy Policy ¦ Report Problem ¦ About ¦ Library ¦ Newsletter
WebmasterWorld is a Developer Shed Community owned by Jim Boykin.
© Webmaster World 1996-2014 all rights reserved