বেস৬৪

বেস৬৪
বেস৬৪ হল এক দল এনকোড সংখ্যা যা অ্যাসকিরবাইনারি মান থেকে রাডিক্সপদ্ধতিতে ৬৪ বেসে রূপান্তর করা হয় । এটি একটি পরিপূর্ণ এনকোডিং পদ্ধতি যা শতভাগ নির্ভুলভাবে মান ফেরত দেয় ।
 কাঠামো 
এই পদ্ধতিতে ৬৪ টি আলাদা বর্ণ রয়েছে । যার প্রতিটি বর্ণের ডিজাইন অনুসারে ০-৬৩ মধ্যে মান নির্দিষ্ট করা আছে ।  এই পদ্ধতির বর্ণ গুলি হল :

A - Z মোট ২৬ টি

a - zমোট ২৬ টি

0 – 9 মোট ১০ টি
এবং
+ ও
/ মোট ২ টি
সর্বমোট ৬৪ টি আলাদা বর্ণ ।

 বেস৬৪ এর বর্ণ তালিকা:

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

 উদাহরণ 
টমাস হব্বেস লেভিথান এর একটি উক্তি :-
 Man is distinguished, not only by his reason, but by this singular passion from
 other animals, which is a lust of the mind, that by a perseverance of delight
 in the continued and indefatigable generation of knowledge, exceeds the short
 vehemence of any carnal pleasure.
এই উক্তিটিকে বেস৬৪ পদ্ধতির মাধ্যমে এনকোডিং করার পর :-

 TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlz
 IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2Yg
 dGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGlu
 dWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo
 ZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=

উপরের উক্তি এবং এনকোডিং উক্তির মধ্যে অনেক পার্থক্য দেখা যাচ্ছে । এনকোডিং টেক্সট টি অ্যাস্কির ৬৪ টি বর্ণ দ্বারা গঠিত । একটি ব্যতিক্রম দেখা যাচ্ছে , এনকোডিং টেক্সট এর সর্বশেষ চারেকটার  =  সমান চিহ্ন ব্যবহার করা হয়েছে যা উপরের উল্লেখিত ৬৪ বর্ণের মধ্যে নেই । এনকোডিং টেক্সট এর সাথে  =  সমান চিহ্ন যুক্ত করার পদ্ধতিকে বলা হয় প্যাডিং যা বাইনারি সংখ্যা পদ্ধতির প্যারীটি বিট ধারণা থেকে নেয়া ।
 কার্যপ্রণালী 
 প্রথমে যে সংখ্যাকে বেস ৬৪ তে রূপান্তর করতে হবে তার অ্যাস্কি ডেসিমাল মান নির্ণয় করতে হবে ।
 ডেসিমাল মানকে বাইনারি তে রূপান্তর করতে হবে ।
 বাইনারি মানকে ৬ বিট করে নিয়ে তার ডেসিমাল মান নির্ণয় করতে হবে ।
 নির্ণীত ডেসিমাল মানকে বেস৬৪ বর্ণ অনুযায়ী রূপান্তর করতে হবে ।

 প্যাডিং এর ব্যবহার 
এনকোডিং এর শেষে '=' সমান চিহ্ন থাকলে বুঝতে হবে যে এনকোডিংয়ের সময় কিছু বিট ধার নেয়া হয়েছিল । করন যখন ৮ বিট বাইনারি কোডকে ৬ বিটে রূপান্তর করা হয় তখন ২ বিটের পার্থক্য থাকার কারণে বিট কম বেশি হয় । এক্ষেত্রে বিট কম হিসাবে ধরা হয় । প্যাডিং যুক্ত হবে কিনা তা বর্ণের সমষ্টির যোগফলের উপর নির্ভরশীল ।
 Text content M a n ASCII 77 (0x4d) 97 (0x61) 110 (0x6e) Bit pattern010011010110000101101110 Index 19 22 5 46 Base64-encoded T W F uMan এর এনকোডিং মান TWFu নির্ণয়ের সময় কোন বিট কম হয়নি তাই TWFu এর শেষে '=' সমান চিহ্ন যোগ করার প্রয়োজন হয়নি ।Man এর আকার ৩ সুতরাং ৮ বিট বাইনারি আকার হবে (৩ * ৮ ) = ২৪
এবং ২৪ কে ৬ দ্বারা পূর্ণ সংখ্যায় ভাগ করা সম্ভব তাই Man এর সাথে
'=' যুক্ত করার প্রয়োজন হয়নি ।r''' কে বেস৬৪ এ এনকোডিং করা

 জাভা স্ক্রিপ্টে উদাহরণ 
এই কারিগরি উদাহরণটি এমন ভাবে তৈরি করা হয়েছে যাতে প্রকার সময় এবং মেমোরি দক্ষতার প্রয়োজন নেই ।

    private static final String codes = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

    private static byte[] base64Decode(String input)    {
        if (input.length() % 4 != 0)    {
            throw new IllegalArgumentException("Invalid base64 input");
        }
        byte decoded[] = new byte[((input.length() * 3) / 4) - (input.indexOf('=') > 0 ? (input.length() - input.indexOf('=')) : 0)];
        char[] inChars = input.toCharArray();
        int j = 0;
        int b[] = new int[4];
        for (int i = 0; i < inChars.length; i += 4)     {
            // This could be made faster (but more complicated) by precomputing these index locations
            b[0] = codes.indexOf(inChars[i]);
            b[1] = codes.indexOf(inChars[i + 1]);
            b[2] = codes.indexOf(inChars[i + 2]);
            b[3] = codes.indexOf(inChars[i + 3]);
            decoded[j++] = (byte) ((b[0] << 2) | (b[1] >> 4));
            if (b[2] < 64)      {
                decoded[j++] = (byte) ((b[1] << 4) | (b[2] >> 2));
                if (b[3] < 64)  {
                    decoded[j++] = (byte) ((b[2] << 6) | b[3]);
	        }
            }
        }

        return decoded;
    }

    private static String base64Encode(byte[] in)       {
        StringBuilder out = new StringBuilder((in.length * 4) / 3);
        int b;
        for (int i = 0; i < in.length; i += 3)  {
            b = (in[i] & 0xFC) >> 2;
            out.append(codes.charAt(b));
            b = (in[i] & 0x03) << 4;
            if (i + 1 < in.length)      {
                b |= (in[i + 1] & 0xF0) >> 4;
                out.append(codes.charAt(b));
                b = (in[i + 1] & 0x0F) << 2;
                if (i + 2 < in.length)  {
                    b |= (in[i + 2] & 0xC0) >> 6;
                    out.append(codes.charAt(b));
                    b = in[i + 2] & 0x3F;
                    out.append(codes.charAt(b));
                } else  {
                    out.append(codes.charAt(b));
                    out.append('=');
                }
            } else      {
                out.append(codes.charAt(b));
                out.append("==");
            }
        }

        return out.toString();
    }

 কারিগরি ইতিহাস 
 বানানভেদে সারাংশ 
বিভিন্ন ধরনের বাইনারি পদ্ধতির জন্য কিছুটা ব্যতিক্রম লক্ষ্য করা যায় ।
 Variant  Char for index 62  Char for index 63  pad char  Fixed encoded line-length  Maximum encoded line length  Line separators  Characters outside alphabet  Line checksum Original Base64 for Privacy-Enhanced Mail (PEM) (RFC 1421, deprecated)+/=(mandatory)  Yes (except last line)  64  CR+LF  Forbidden  (none) Base64 transfer encoding for MIME (RFC 2045)+/=(mandatory)  No (variable)  76  CR+LF  Accepted (discarded)  (none) Standard 'base64' encoding for RFC 3548 or RFC 4648+/=(mandatory unless specified by referencing document)  No (unless specified by referencing document)  No (unless specified by referencing document)  No (unless specified by referencing document)  No (unless specified by referencing document)  (none) 'Radix-64' encoding for OpenPGP (RFC 4880)+/=(mandatory)  No (variable)  76  CR+LF  Forbidden  24-bit CRC (Radix-64-encoded, including one pad character) Modified Base64 encoding for UTF-7 (RFC 1642, obsoleted)+/ (none)  No (variable)  (none)  (none)  Forbidden  (none) Standard 'base64url' with URL and Filename Safe Alphabet (RFC 4648 §5 'Table 2: The "URL and Filename safe" Base 64 Alphabet')-_=(optional if data length is known, otherwise must be percent-encoded in URL)  No (variable)  (application-dependent)  (none)  Forbidden  (none) Unpadded 'base64url' for "named information" URI's (RFC 6920)-_ (none)  No (variable)  (application-dependent)  (none)  Forbidden  Separate Luhn checksum Non-standard URL-safe Modification of Base64 used in YUI Library (Y64)._- No (variable)  (application-dependent)  (none)  Forbidden  (none) Modified Base64 for XML name tokens (Nmtoken).- (none)  No (variable)  (XML parser-dependent)  (none)  Forbidden  (none) Modified Base64 for XML identifiers (Name)_: (none)  No (variable)  (XML parser-dependent)  (none)  Forbidden  (none) Modified Base64 for Program identifiers (variant 1, non standard)_- (none)  No (variable)  (language/system-dependent)  (none)  Forbidden  (none) Modified Base64 for Program identifiers (variant 2, non standard)._ (none)  No (variable)  (language/system-dependent)  (none)  Forbidden  (none) Modified Base64 for Regular expressions (non standard)!- (none)  No (variable)  (application-dependent)  (none)  Forbidden  (none) Non-standard URL-safe Modification of Base64 used in Freenet~-= No (variable)  (application-dependent)  (none)  Forbidden  (none)

 তথ্যসূত্র 

বিষয়শ্রেণী:সাংকেতিকীকরণ
বিষয়শ্রেণী:ইমেইল
বিষয়শ্রেণী:ইন্টারনেট মান