text: বেস৬৪
  বেস৬৪ হল এক দল এনকোড সংখ্যা যা অ্যাসকিরবাইনারি মান থেকে রাডিক্সপদ্ধতিতে ৬৪ বেসে রূপান্তর করা হয় । এটি একটি পরিপূর্ণ এনকোডিং পদ্ধতি যা শতভাগ নির্ভুলভাবে মান ফেরত দেয় ।
  
  কাঠামো 
  এই পদ্ধতিতে ৬৪ টি আলাদা বর্ণ রয়েছে । যার প্রতিটি বর্ণের ডিজাইন অনুসারে ০-৬৩ মধ্যে মান নির্দিষ্ট করা আছে ।  এই পদ্ধতির বর্ণ গুলি হল :
  
  A - Z মোট ২৬ টি
  
  a - zমোট ২৬ টি
  
  0 – 9 মোট ১০ টি
  এবং
  + ও
  / মোট ২ টি
  সর্বমোট ৬৪ টি আলাদা বর্ণ ।
  
   বেস৬৪ এর বর্ণ তালিকা:
  
  উদাহরণ 
  টমাস হব্বেস লেভিথান এর একটি উক্তি :-
   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=
  
  উপরের উক্তি এবং এনকোডিং উক্তির মধ্যে অনেক পার্থক্য দেখা যাচ্ছে । এনকোডিং টেক্সট টি অ্যাস্কির ৬৪ টি বর্ণ দ্বারা গঠিত । একটি ব্যতিক্রম দেখা যাচ্ছে , এনকোডিং টেক্সট এর সর্বশেষ চারেকটার  =  সমান চিহ্ন ব্যবহার করা হয়েছে যা উপরের উল্লেখিত ৬৪ বর্ণের মধ্যে নেই । এনকোডিং টেক্সট এর সাথে  =  সমান চিহ্ন যুক্ত করার পদ্ধতিকে বলা হয় প্যাডিং যা বাইনারি সংখ্যা পদ্ধতির প্যারীটি বিট ধারণা থেকে নেয়া ।
  
  কার্যপ্রণালী 
   প্রথমে যে সংখ্যাকে বেস ৬৪ তে রূপান্তর করতে হবে তার অ্যাস্কি ডেসিমাল মান নির্ণয় করতে হবে ।
   ডেসিমাল মানকে বাইনারি তে রূপান্তর করতে হবে ।
   বাইনারি মানকে ৬ বিট করে নিয়ে তার ডেসিমাল মান নির্ণয় করতে হবে ।
   নির্ণীত ডেসিমাল মানকে বেস৬৪ বর্ণ অনুযায়ী রূপান্তর করতে হবে ।
  
  প্যাডিং এর ব্যবহার 
  এনকোডিং এর শেষে '=' সমান চিহ্ন থাকলে বুঝতে হবে যে এনকোডিংয়ের সময় কিছু বিট ধার নেয়া হয়েছিল । করন যখন ৮ বিট বাইনারি কোডকে ৬ বিটে রূপান্তর করা হয় তখন ২ বিটের পার্থক্য থাকার কারণে বিট কম বেশি হয় । এক্ষেত্রে বিট কম হিসাবে ধরা হয় । প্যাডিং যুক্ত হবে কিনা তা বর্ণের সমষ্টির যোগফলের উপর নির্ভরশীল ।Man এর এনকোডিং মান 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();
      }
  
  কারিগরি ইতিহাস
  
  বানানভেদে সারাংশ 
  বিভিন্ন ধরনের বাইনারি পদ্ধতির জন্য কিছুটা ব্যতিক্রম লক্ষ্য করা যায় ।
  
  বিষয়শ্রেণী:সাংকেতিকীকরণ
title: বেস৬৪