বেস৬৪

বেস৬৪ বেস৬৪ হল এক দল এনকোড সংখ্যা যা অ্যাসকিরবাইনারি মান থেকে রাডিক্সপদ্ধতিতে ৬৪ বেসে রূপান্তর করা হয় । এটি একটি পরিপূর্ণ এনকোডিং পদ্ধতি যা শতভাগ নির্ভুলভাবে মান ফেরত দেয় ।
কাঠামো
[সম্পাদনা]এই পদ্ধতিতে ৬৪ টি আলাদা বর্ণ রয়েছে । যার প্রতিটি বর্ণের ডিজাইন অনুসারে ০-৬৩ মধ্যে মান নির্দিষ্ট করা আছে । [১] এই পদ্ধতির বর্ণ গুলি হল :
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 pattern | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 0 |
| Index | 19 | 22 | 5 | 46 | ||||||||||||||||||||
| Base64-encoded | T | W | F | u | ||||||||||||||||||||
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();
}
কারিগরি ইতিহাস
[সম্পাদনা]বানানভেদে সারাংশ
[সম্পাদনা]বিভিন্ন ধরনের বাইনারি পদ্ধতির জন্য কিছুটা ব্যতিক্রম লক্ষ্য করা যায় ।
| 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) |
তথ্যসূত্র
[সম্পাদনা]- ↑ The Base16,Base32,and Base64 Data Encodings. IETF. October 2006. RFC 4648. http://tools.ietf.org/html/rfc4648। সংগৃহীত হয়েছে March 18, 2010.
- ↑ "YUIBlog"। YUIBlog। ২৫ মে ২০১২ তারিখে মূল থেকে আর্কাইভকৃত। সংগ্রহের তারিখ ২১ জুন ২০১২।
| এই নিবন্ধটি অসম্পূর্ণ। আপনি চাইলে এটিকে সম্প্রসারিত করে উইকিপিডিয়াকে সাহায্য করতে পারেন। |