рдирдорд╕реНрддреЗ!
рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ Base64 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдХрдо рдмрд╛рд░ Base32 рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрдо рдмрд╛рд░
ZBase32 (рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ?), рд▓реЗрдХрд┐рди рд╣рд░ рдХреЛрдИ рдЙрдирдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реИред рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЗрди рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рдлрд╛рдпрджреЗ, рдиреБрдХрд╕рд╛рди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдмрд╛рдд рдХрд░рддрд╛ рд╣реВрдВред
рдмрд╣реБрдд рд╕рдордп рдкрд╣рд▓реЗ рдирд╣реАрдВ, рдореБрдЭреЗ http рд▓рд┐рдВрдХ рдХреЗ рдкрддреЗ рдореЗрдВ рдПрдиреНрдХреЛрдбреЗрдб рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, HTTP рдорд╛рдирдХ рдХреЗрд╕-рдЕрд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдпреВрдЖрд░рдПрд▓ рдХрд╛ рдЕрд░реНрде рд╣реИ рдФрд░ рдпрджрд┐ рдЖрдк рдХреЗрд╕-рд╕рдВрд╡реЗрджреА рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреЛрдИ рднреА рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдпрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдбреЗрдЯрд╛ рдХреЛ рдЦрд░рд╛рдм рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЗрди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, ZBase32 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред
рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдиреЗрдЯ (рдмреЗрд╕ 64 рдХреЗ рд╡рд┐рдкрд░реАрдд) рдореЗрдВ рдХреЛрдИ рдорд╛рдирдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рд▓рд┐рдЦрдирд╛ рдерд╛ред рдореЗрд░реЗ рдЖрд╢реНрдЪрд░реНрдп рдХреЗ рд▓рд┐рдП, рдореИрдВ рдмреЗрд╕ 32 рдФрд░ рдЬреЗрдбрдмреА 32 рдХреА рд╕реНрдкрд╖реНрдЯ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдкрд╛рдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛ред рдХреБрдЫ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рдкрд╛рдП рдЧрдП, рд▓реЗрдХрд┐рди рдореИрдВ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд╕рдордЭреЗ рдмрд┐рдирд╛, рдЙрдиреНрд╣реЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ рдФрд░ рдмрдбрд╝реЗ рдлреЙрд░реНрдореВрд▓реЛрдВ рдХреЗ рдЬрд╛рджреВ рдХреЛ рдкрдврд╝ рдирд╣реАрдВ рд╕рдХрд╛, рдереЛрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рдореМрдЦрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд┐рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдерд╛ред рдЕрдм рдЬрдмрдХрд┐ рд╕рдм рдХреБрдЫ рдореЗрд░реЗ рдкреАрдЫреЗ рд╣реИ, рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдердорд┐рдХ рдХреЛрдбрд┐рдВрдЧ рдХрд╛ рдереЛрдбрд╝рд╛ рдЬреНрдЮрд╛рди рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рд▓реЗрдЦ рдкреНрд░рдХреГрддрд┐ рдореЗрдВ рдЕрдХрд╛рджрдорд┐рдХ рд╣реИред
рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖
Base64
рдЖрдкрдХреЛ рдХреБрд▓ 64 рд╡рд░реНрдг: AZ, az, 0-9, /, + рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдПрдХ рд╕рдореВрд╣ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддреБрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдПрдирдХреЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдХ рдХреЛрдбрд┐рдд рдЕрдиреБрдХреНрд░рдо рдХреЗ рдЕрдВрдд рдореЗрдВ, рдХрдИ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдг (рдЖрдорддреМрд░ рдкрд░ "=") рд╕рдорд╛рд╣рд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдлрд╛рдпрджреЗ:
- рдЖрдкрдХреЛ рдореБрджреНрд░рд┐рдд рд╡рд░реНрдгреЛрдВ рдореЗрдВ рдХрд┐рд╕реА рднреА рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
- рдЕрдиреНрдп рдмреЗрд╕ рдПрдиреНрдХреЛрдбрд┐рдВрдЧреНрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдпрд╣ рдПрдХ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ 133 рд╣реИред (3) рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдХреА рд▓рдВрдмрд╛рдИ рдХрд╛%ред
рдиреБрдХрд╕рд╛рди:
- рдХреЗрд╕-рд╕рдВрд╡реЗрджреА рдПрдиреНрдХреЛрдбрд┐рдВрдЧред
Base32
рдХреЗрд╡рд▓ 32 рд╡рд░реНрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ: AZ (рдпрд╛ az), 2-7ред рдЗрд╕рдореЗрдВ рдПрдиреНрдХреЛрдбреЗрдб рдЕрдиреБрдХреНрд░рдо (рдмреЗрд╕ 64 рдХреЗ рд╕рдорд╛рди) рдХреЗ рдЕрдВрдд рдореЗрдВ рдХрдИ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдг рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдлрд╛рдпрджреЗ:
- рдХрд┐рд╕реА рднреА рдмрд╛рдЗрдЯ рдХрд╛ рдХреНрд░рдо рдореБрджреНрд░рдг рдпреЛрдЧреНрдп рд╡рд░реНрдгреЛрдВ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред
- рдХреЗрд╕-рдЕрд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдПрдиреНрдХреЛрдбрд┐рдВрдЧред
- рд╕рдВрдЦреНрдпрд╛рдПрдБ рдЬреЛ рдЕрдХреНрд╖рд░реЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реИрдВ, рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 0 рдУ рдХреА рддрд░рд╣ рд╣реИ, 1 рдПрд▓ рдХреА рддрд░рд╣ рд╣реИ)ред
рдиреБрдХрд╕рд╛рди:
- рдХреЛрдбрд┐рдд рдбреЗрдЯрд╛ рдореВрд▓ рдХрд╛ 160% рд╣реИред
ZBase32
рдПрдиреНрдХреЛрдбрд┐рдВрдЧ Base32 рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдирд┐рдореНрди рдЕрдВрддрд░ рд╣реИрдВред
- 32-рдЪрд░рд┐рддреНрд░ рдорд╛рдирд╡-рдЙрдиреНрдореБрдЦ рд╡рд░реНрдгрдорд╛рд▓рд╛ред рдХреЛрдбрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рд▓рд┐рдЦрдиреЗ, рдЙрдЪреНрдЪрд╛рд░рдг рдФрд░ рдпрд╛рдж рд░рдЦрдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╡рд┐рд╕реНрддреГрдд рдкреНрд░рддреАрдХ рддрд╛рд▓рд┐рдХрд╛ред рд▓реЗрдЦрдХреЛрдВ рдиреЗ рдкреНрд░рддреАрдХреЛрдВ рдХреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкрджреЛрдВ рдХреЗ рд▓рд┐рдП рдордиреБрд╖реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдпрд╛ред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ред рд╡рд░реНрдгрдорд╛рд▓рд╛ рдиреАрдЪреЗ рджреА рдЧрдИ рд╣реИред
- рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдЕрдВрдд рдореЗрдВ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдг рдирд╣реАрдВ рд╣реИрдВред
рдЖрдк
рдпрд╣рд╛рдБ рдФрд░
рдпрд╣рд╛рдБ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЕрдм рдореИрдВ рд╕реАрдзреЗ ZB332 рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдзреНрдпрд╛рди рдХреЗрдиреНрджреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
ZBase32 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рд╡рд┐рд╡рд░рдг
рдореИрдВ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдмреЗрд╣рддрд░ рд╕рдордЭ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╕рдордп рд╕реА # рдореЗрдВ рдЧрдгрдирд╛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реВрдВредрддреЛ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдПрдХ 32-рд╡рд░реНрдг рд╡рд░реНрдгрдорд╛рд▓рд╛ рд╣реИ:
static string EncodingTable = "ybndrfg8ejkmcpqxot1uwisza345h769";
рдЗрдирдкреБрдЯ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИ (рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ 8 рдмрд┐рдЯреНрд╕), рдЬрд┐рд╕реЗ рдореИрдВ рд╡рд░реНрдгрдорд╛рд▓рд╛ рд╕реЗ рд╡рд░реНрдгреЛрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
public static string Encode(byte[] data) {
рд╡рд░реНрдгрдорд╛рд▓рд╛ 32 рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдг 0 рд╕реЗ 31 рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд╡рд░реНрдг рд╕реВрдЪрдХ)ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдмрд╛рдЗрдирд░реА рдирдВрдмрд░ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ 0 рд╕реЗ 31 рддрдХ рдХреА рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдмрд╛рдЗрдЯ рдХреЗ 5 рдмрд┐рдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╕реЗ рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ рдХрд┐ рдпрджрд┐ рд╣рдо рдмрд┐рдЯреНрд╕ рдХреЗ рдПрдХ рдПрдХрд▓ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдореВрд▓ рд╕реЗрдЯ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ 5 рдмрд┐рдЯреНрд╕ рдХреЗ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рддреЛрдбрд╝рддреЗ рд╣реИрдВ (рдиреАрдЪреЗ рдЖрдВрдХрдбрд╝рд╛ рджреЗрдЦреЗрдВ), рддреЛ рд╣рдореЗрдВ рд╡рд░реНрдгрдорд╛рд▓рд╛ рд╕реЗ рд╡рд░реНрдгреЛрдВ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдорд┐рд▓рддрд╛ рд╣реИред рд╡рд╣, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдм рд╣реИред
Base32 рдФрд░ Base64 рдПрд▓реНрдЧреЛрд░рд┐рджрдо ZBase32 рдХреЗ рд╕рдорд╛рди рд╣реИрдВ, рдХреЗрд╡рд▓ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрдХреНрд╖рд░ (Base32 рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, Base64 рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдЖрдХрд╛рд░ рдореЗрдВ) рдФрд░ рдмрд┐рдЯреНрд╕ рдХреЗ "nibbled" рдЯреБрдХрдбрд╝реЛрдВ (Base64 рдХреЗ 6 рдЯреБрдХрдбрд╝реЗ) рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд╕рдорд╛рди рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдХреЛ 5 рдмрд┐рдЯреНрд╕ рдХреЗ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рдПрдХ рдЬрдЧрд╣ рддреИрдпрд╛рд░ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдкрд░рд┐рдгрд╛рдо рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕реНрдерд┐рд░ рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП StringBuilder рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
var encodedResult = new StringBuilder((int)Math.Ceiling(data.Length * 8.0 / 5.0));
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд░рддреЗ рд╕рдордп, рд╣рдо рддреБрд░рдВрдд рдкрд░рд┐рдгрд╛рдореА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЖрдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рддрд╛рдХрд┐ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рджреМрд░рд╛рди рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдордп рдмрд░реНрдмрд╛рдж рди рдХрд░реЗрдВ)ред
рдЕрдм рдпрд╣ рдореВрд▓ рдмрд╛рдЗрдЯ рд╕рд░рдгреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ 5-рдмрд┐рдЯ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ 5 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ 40 рдмрд┐рдЯреНрд╕ рд╣реИ - рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдЬреЛ "рдЯреБрдХрдбрд╝реЛрдВ" рдХреА рд▓рдВрдмрд╛рдИ рдХрд╛ рдПрдХ рдЧреБрдгрдХ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдХреЛрдИ рднреА рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХрдореА рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВред
for (var i = 0; i < data.Length; i += 5) { var byteCount = Math.Min(5, data.Length - i);
рдЪреВрдВрдХрд┐ рд╣рдо 5 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╕рдореВрд╣ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рдореЗрдВ рдПрдХ рдмрдлрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд╣рд╛рдВ рдмрд┐рдЯреНрд╕ рдХрд╛ рдПрдХ рдирд┐рд░рдВрддрд░ рд╕реЗрдЯ рдмрдиреЗрдЧрд╛ (рдХреБрд▓ 40 рдмрд┐рдЯреНрд╕)ред рд╣рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрд▓рдВрдЧ (рд╣рдорд╛рд░реЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ 64 рдмрд┐рдЯреНрд╕) рдХрд╛ рдПрдХ рдЪрд░ рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╡рд░реНрддрдорд╛рди рдмреИрдЪ рдХреЛ рд╡рд╣рд╛рдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
ulong buffer = 0; for (var j = 0; j < byteCount; ++j) { buffer = (buffer << 8) | data[i + j]; }
рдФрд░ рдЕрдВрддрд┐рдо рдЪрд░рдг "рдХреНрдпрд╛ рд╣реБрдЖ", 5 рдмрд┐рдЯ рдХреЗ рдЯреБрдХрдбрд╝реЗ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдЧрдарди рд╕реЗ рд╣реИред
var bitCount = byteCount * 8; while (bitCount > 0) { var index = bitCount >= 5 ? (int)(buffer >> (bitCount - 5)) & 0x1f : (int)(buffer & (ulong)(0x1f >> (5 - bitCount))) << (5 - bitCount); encodedResult.Append(EncodingTable[index]); bitCount -= 5; }
рд╢рд╛рдпрдж, рдЖрдЦрд┐рд░реА рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдереЛрдбрд╝рд╛ рд╕рд╛ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рдЬрдЧрд╣ рдореЗрдВ рдЧрд┐рд░ рдЬрд╛рдПрдЧрд╛ред
рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдХреЗрд╡рд▓ рд╡рд┐рдкрд░реАрдд рджрд┐рд╢рд╛ рдореЗрдВред
рдЖрдк
ZBase32Encoder рдХреЗ рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
рдФрд░, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
4nq7bcgosuemmwcq4gy7ddbcrdeadwcn4napdysttuea6egosmembwfhrdemdwcm4n77bcby4n97bxsozzea9wcn4n67bcby4nhnbwf94n9pbq6oszemxwf74nanhegow8em9wfo4gy7bqgos8emhegos9emyegosmem5wfa4n6pbcgozzemtwfirr