Welcome to WebmasterWorld Guest from 54.196.238.210

Forum Moderators: coopster & jatar k

Message Too Old, No Replies

Check if something is base64_encoded?

     

ahmedtheking

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

WebmasterWorld Senior Member 10+ Year Member



How can I check is a string is base64_encoded?

hakre

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

WebmasterWorld Senior Member 10+ Year Member



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

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

WebmasterWorld Senior Member 10+ Year Member



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

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

WebmasterWorld Senior Member 10+ Year Member



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

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

WebmasterWorld Senior Member 10+ Year Member



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

hakre

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

WebmasterWorld Senior Member 10+ Year Member



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

7:38 pm on Jan 24, 2008 (gmt 0)

5+ Year Member




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

 

Featured Threads

Hot Threads This Week

Hot Threads This Month