рддреБрд░рдВрдд рд╕реНрд░реЛрдд рдкрд░ рд▓рд┐рдВрдХ рдкреЛрд╕реНрдЯ рдХрд░реЗрдВ рдФрд░ js рдкрд░ рдбреЗрдореЛ рдХрд░реЗрдВ ред рдпрджреНрдпрдкрд┐ рд╡рд┐рдХрд╕рд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХрд╛ рдЕрдзрд┐рдХ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдореВрд▓реНрдп рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд┐рд╡рд░рдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╕рдордЭрд╛ред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╣рд╛рдВ рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдЗрд╕рдХреЗ рдЖрдХрд╛рд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЫреЛрдЯреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓рдВрдмрд╛рдИ рдЕрдзрд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛрддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрд╡рд╛рдЗрди рдореЗрдВ)ред
рдХрд╕реНрдЯрдо рд╡рд░реНрдгрдорд╛рд▓рд╛
рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдХреИрд╕реЗ рд╕рдВрд╢реНрд▓реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдХрд╛ рдЖрдзрд╛рд░ рдмреЗрд╕ 85 рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╣реИред рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ: рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдХреЛ 4 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдмреНрд▓реЙрдХ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдлрд┐рд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ рдЙрдЪреНрдЪ рдмрд╛рдЗрдЯ рдХреЗ рд╕рд╛рде 32-рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред 85 рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдиреБрдХреНрд░рдорд┐рдХ рд╡рд┐рднрд╛рдЬрди рд╕реЗ, 85-рджрд╢рдорд▓рд╡ рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рдгрд╛рд▓реА рдХреЗ 5 рдЕрдВрдХ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рддреНрдпреЗрдХ рдЕрдВрдХ рд╡рд░реНрдгрдорд╛рд▓рд╛ рд╕реЗ рдореБрджреНрд░рд┐рдд рдкреНрд░рддреАрдХ, 85 рд╡рд░реНрдгреЛрдВ рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рдПрдиреНрдХреЛрдбреЗрдб рд╣реИ, рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ, рдСрд░реНрдбрд░ рдХреЗ рд╕рдВрд░рдХреНрд╖рдг рдХреЗ рд╕рд╛рде, рдЙрдЪреНрдЪрддрдо рдХреНрд░рдо рд╕реЗ рдирд┐рдореНрдирддрдо рддрдХред
рд▓реЗрдХрд┐рди 4 рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдЖрдХрд╛рд░ рдХреНрдпреЛрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛, рдЕрд░реНрдерд╛рддреНред 32 рдмрд┐рдЯреНрд╕? рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЗрд╖реНрдЯрддрдо рд╕рдВрдкреАрдбрд╝рди рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреНред рдмрд┐рдЯреНрд╕ рдХреА рдиреНрдпреВрдирддрдо рд╕рдВрдЦреНрдпрд╛ (2 ^ 32 = 4294967296) рдЕрдзрд┐рдХрддрдо рд╡рд░реНрдгреЛрдВ (85 ^ 5 = 4437053125) рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рддрдХрдиреАрдХ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд░реНрдгрдорд╛рд▓рд╛ рддрдХ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рдЧрдгрд┐рддреАрдп рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдмрд┐рдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрд┐рд╕ рдкрд░ рд╕рдВрдкреАрдбрд╝рди рдЕрдзрд┐рдХрддрдо рд╣реЛрдЧрд╛:
a рд╡рд░реНрдгрдорд╛рд▓рд╛ A рдХрд╛ рдЖрдХрд╛рд░ рд╣реИ ред
k рдПрдиреНрдХреЛрдбреЗрдб рд╡рд░реНрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред
b - рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЖрдзрд╛рд░ред
n рд╡рд░реНрдгрдорд╛рд▓рд╛ A рдХреЗ k рд╡рд░реНрдгреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рдгрд╛рд▓реА b рдореЗрдВ рдмрд┐рдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ ред
рдЖрд░ рд╕рдВрдкреАрдбрд╝рди рдЕрдиреБрдкрд╛рдд (рдЕрдзрд┐рдХ рдмреЗрд╣рддрд░) рд╣реИред
mbc рдмрд┐рдЯреНрд╕ рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдмреНрд▓реЙрдХ рдЖрдХрд╛рд░ рд╣реИред
тМКX (x (рддрд▓) рд╕реЗ рдХрдо рдХрд╛ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдкреВрд░реНрдгрд╛рдВрдХ рд╣реИред
тМИX x x (рдЫрдд) рд╕реЗ рдмрдбрд╝рд╛ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдкреВрд░реНрдгрд╛рдВрдХ рд╣реИред
рдЖрдЧреЗ, рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдмрд┐рдЯреНрд╕ рдФрд░ рд╡рд░реНрдгреЛрдВ рдХреЗ рдЗрд╖реНрдЯрддрдо рд╕рдВрдпреЛрдЬрди рдкрд╛рдП рдЧрдП, рдЬреЛ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЪрд┐рддреНрд░ рдореЗрдВ рджрд░реНрд╢рд╛рдП рдЧрдП рдереЗред рдЕрдзрд┐рдХрддрдо рдмреНрд▓реЙрдХ рдЖрдХрд╛рд░ 64 рдмрд┐рдЯреНрд╕ рд╣реИ (рдЗрд╕ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ)ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдВрдкреАрдбрд╝рди рдЕрдиреБрдкрд╛рдд рд╣рдореЗрд╢рд╛ рд╡рд░реНрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдмрдврд╝рддрд╛ рд╣реИ (рдпрд╣ 60 рдФрд░ 91 рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред рд▓рд╛рд▓ рдкрдЯреНрдЯрд┐рдпрд╛рдБ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬреНрдЮрд╛рдд рдПрдиреНрдХреЛрдбрд┐рдВрдЧ (85 рдФрд░ 91) рдХреЛ рджрд░реНрд╢рд╛рддреА рд╣реИрдВред рджрд░рдЕрд╕рд▓, рдЖрд░реЗрдЦ рд╕реЗ рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрди рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрдИ рдкрд╛рддреНрд░реЛрдВ рдХреЛ рд╡реНрдпрд░реНрде рдирд╣реАрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдиреНрдпреВрдирддрдо рд╕рдВрдкреАрдбрд╝рди рдЕрдиреБрдкрд╛рдд рдХреЗ рд╕рд╛рде рдиреНрдпреВрдирддрдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдмрд┐рдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрддрдо рдмреНрд▓реЙрдХ рдЖрдХрд╛рд░ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде, рдЖрд░реЗрдЦ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 64 рдмрд┐рдЯреНрд╕ рдХреЗ рд╕рд╛рде base85 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдмреНрд▓реЙрдХ рдЖрдХрд╛рд░ 32 рдмрд┐рдЯреНрд╕ рд╣реЛрдЧрд╛, рдФрд░ рд╡рд░реНрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 1.25 рдХреЗ рдЕрддрд┐рд░реЗрдХ рдХреЗ рд╕рд╛рде 5 рд╣реЛрдЧреАред рдЕрдзрд┐рдХрддрдо рдмреНрд▓реЙрдХ рдЖрдХрд╛рд░ 256 рдмрд┐рдЯреНрд╕ рддрдХ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдмреНрд▓реЙрдХ рдХрд╛ рдЖрдХрд╛рд░ 22 рдЕрдХреНрд╖рд░реЛрдВ рдХреЗ рд╕рд╛рде 141 рдмрд┐рдЯ рдФрд░ 1.2482 рдХрд╛ рдЕрддрд┐рд░реЗрдХ) рд╣реЛрдЧрд╛ред
рдХреЛрдбрд┐рдВрдЧ рдХрджрдо
рддреЛ, рдЪрд░рдгреЛрдВ рдореЗрдВ, рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
- рдЗрд╖реНрдЯрддрдо рдмреНрд▓реЙрдХ рдЖрдХрд╛рд░ (рдмрд┐рдЯреНрд╕ рдПрди рдХреА рд╕рдВрдЦреНрдпрд╛) рдХреА рдЧрдгрдирд╛ рдФрд░ рдЗрд╕рдХреЗ рдЕрдиреБрд░реВрдк рд╡рд░реНрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ ( рдХреЗ )ред
- рд╕реНрд░реЛрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдПрдХ рдХреНрд░рдо рдХреЗ рд░реВрдк рдореЗрдВ (UTF8 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред
- N рдмрд┐рдЯреНрд╕ рдХреЗ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдореВрд▓ рдЕрдиреБрдХреНрд░рдо рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ред
- рдЖрдзрд╛рд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рд╛рде рдмрд┐рдЯреНрд╕ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рдореВрд╣ рдХреЛ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдмрджрд▓реЗрдВред
- рдкреВрдВрдЫ рдмрд┐рдЯреНрд╕ рдХреА рдорд┐рд╕рдЕрд▓рд╛рдЙрдВрд╕рд┐рдВрдЧред
рдкрд╣рд▓реЗ рдЪрд░рдг рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереАред рджреВрд╕рд░реЗ рдЪрд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рдзрд┐ рдХреЛ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рд╕реА # рдореЗрдВ рдпрд╣ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд Encoding.UTF8.GetBytes () рдореЗрдВ рд╣реИ , рдФрд░ рдЬреЗрдПрд╕ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ strToUt8Bytes рдФрд░ bytesToUtf8Str рджреНрд╡рд╛рд░рд╛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛)ред рдЕрдЧрд▓рд╛, рдЕрдЧрд▓реЗ рддреАрди рдЪрд░рдгреЛрдВ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред рд╡рд░реНрдгреЛрдВ рдХреЗ рдПрдХ рдХреНрд░рдо рдХреЛ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдЙрд▓рдЯрд╛ рд░реВрдкрд╛рдВрддрд░рдг рд╕рдорд╛рди рджрд┐рдЦрддрд╛ рд╣реИред
рдмрд┐рдЯ рдмреНрд▓реЙрдХ рдПрдирдХреЛрдбрд┐рдВрдЧ
private void EncodeBlock(byte[] src, char[] dst, int ind) { int charInd = ind * BlockCharsCount; int bitInd = ind * BlockBitsCount; BigInteger bits = GetBitsN(src, bitInd, BlockBitsCount); BitsToChars(dst, charInd, (int)BlockCharsCount, bits); } private void DecodeBlock(string src, byte[] dst, int ind) { int charInd = ind * BlockCharsCount; int bitInd = ind * BlockBitsCount; BigInteger bits = CharsToBits(src, charInd, (int)BlockCharsCount); AddBitsN(dst, bits, bitInd, BlockBitsCount); }
GetBitsN рдмреНрд▓реЙрдХрдмрд┐рдЯреНрд╕ рдмрд┐рдЯ рдХреА рдПрдХ рд▓рдВрдмреА рд╕рдВрдЦреНрдпрд╛ рджреЗрддрд╛ рд╣реИ рдФрд░ рдмрд┐рдЯ рдмрд┐рдЯ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред
AddBitsN рд╕реНрдерд┐рддрд┐ рдмрд┐рдЯ рдореЗрдВ dst рдмрд╛рдЗрдЯ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдмреНрд▓реЙрдХ рдмрд┐рдЯреНрд╕ рдмрд┐рдЯ рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рдмрд┐рдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ ред
рдордирдорд╛рдиреЗ рдЖрдзрд╛рд░ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдмрд┐рдЯреНрд╕ рдХреЗ рдмреНрд▓реЙрдХ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛
рд╡рд░реНрдгрдорд╛рд▓рд╛ рдПрдХ рдордирдорд╛рдирд╛ рд╡рд░реНрдгрдорд╛рд▓рд╛ рд╣реИред рдЙрд▓рдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рд╕реЗ рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╡реНрдпреБрддреНрдХреНрд░рдо рд╡рд░реНрдгрдорд╛рд▓рд╛ InvAlphabet рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреЗрд╕ 64 рдХреЗ рд▓рд┐рдП, рдмрд┐рдЯреНрд╕ рдХреЗ рдкреНрд░рддреНрдпрдХреНрд╖ рдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдмреЗрд╕ 85 рдХреЗ рд▓рд┐рдП, рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ( ReverseOrder ), _powN рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХреА рд▓рдВрдмрд╛рдИ рд╣реИред
private void BitsToChars(char[] chars, int ind, int count, BigInteger block) { for (int i = 0; i < count; i++) { chars[ind + (!ReverseOrder ? i : count - 1 - i)] = Alphabet[(int)(block % CharsCount)]; block /= CharsCount; } } private BigInteger CharsToBits(string data, int ind, int count) { BigInteger result = 0; for (int i = 0; i < count; i++) result += InvAlphabet[data[ind + (!ReverseOrder ? i : count - 1 - i)]] * _powN[BlockCharsCount - 1 - i]; return result; }
рдЯреЗрд▓ рдмрд┐рдЯ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдВрдд рдореЗрдВ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдореБрдЦреНрдп рдФрд░ рдкреВрдВрдЫ рдХреЗ рдмрд┐рдЯреНрд╕ рдФрд░ рдкрд╛рддреНрд░реЛрдВ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдХрд▓рд╛, рдЬрд┐рд╕рд╕реЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛ред
- mainBitsLength - рдмрд┐рдЯреНрд╕ рдХреА рдореБрдЦреНрдп рд╕рдВрдЦреНрдпрд╛ред
- tailBitsLength - рдмрд┐рдЯреНрд╕ рдХреА рдкреВрдВрдЫ рд╕рдВрдЦреНрдпрд╛ред
- mainCharsCount - рдкрд╛рддреНрд░реЛрдВ рдХреА рдореБрдЦреНрдп рд╕рдВрдЦреНрдпрд╛ред
- tailCharsCount - рдкрд╛рддреНрд░реЛрдВ рдХреА рдкреВрдВрдЫ рд╕рдВрдЦреНрдпрд╛ред
- GlobalBitsLength - рдмрд┐рдЯреНрд╕ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ (mainBitsLength + tailBitsLength)ред
- GlobalCharsCount - рд╡рд░реНрдгреЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ (mainCharsCount + tailCharsCount)ред
рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдмрд┐рдЯреНрд╕ рдФрд░ рдкреНрд░рддреАрдХреЛрдВ рдХреА рдореБрдЦреНрдп рдФрд░ рдкреВрдВрдЫ рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ред
int mainBitsLength = (data.Length * 8 / BlockBitsCount) * BlockBitsCount; int tailBitsLength = data.Length * 8 - mainBitsLength; int globalBitsLength = mainBitsLength + tailBitsLength; int mainCharsCount = mainBitsLength * BlockCharsCount / BlockBitsCount; int tailCharsCount = (tailBitsLength * BlockCharsCount + BlockBitsCount - 1) / BlockBitsCount; int globalCharsCount = mainCharsCount + tailCharsCount; int iterationCount = mainCharsCount / BlockCharsCount;
рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдмрд┐рдЯреНрд╕ рдФрд░ рдкреНрд░рддреАрдХреЛрдВ рдХреА рдореБрдЦреНрдп рдФрд░ рдкреВрдВрдЫ рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ред
int globalBitsLength = ((data.Length - 1) * BlockBitsCount / BlockCharsCount + 8) / 8 * 8; int mainBitsLength = globalBitsLength / BlockBitsCount * BlockBitsCount; int tailBitsLength = globalBitsLength - mainBitsLength; int mainCharsCount = mainBitsLength * BlockCharsCount / BlockBitsCount; int tailCharsCount = (tailBitsLength * BlockCharsCount + BlockBitsCount - 1) / BlockBitsCount; BigInteger tailBits = CharsToBits(data, mainCharsCount, tailCharsCount); if (tailBits >> tailBitsLength != 0) { globalBitsLength += 8; mainBitsLength = globalBitsLength / BlockBitsCount * BlockBitsCount; tailBitsLength = globalBitsLength - mainBitsLength; mainCharsCount = mainBitsLength * BlockCharsCount / BlockBitsCount; tailCharsCount = (tailBitsLength * BlockCharsCount + BlockBitsCount - 1) / BlockBitsCount; } int iterationCount = mainCharsCount / BlockCharsCount;
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдореИрдВрдиреЗ рдЗрд╕ рдХрд▓рди рд╡рд┐рдзрд┐ рдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдмрдирд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, jsbn рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдпрд╣рд╛рдБ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: kvanttt.github.io/BaseNcoding
рдирд┐рд╖реНрдХрд░реНрд╖
рдпрд╣ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЗрд╕рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдП рдФрд░ рдЗрд╕реЗ (C # рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ) GPU рд╕рд╣рд┐рдд рд╕рдорд╛рдВрддрд░ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПред рд╡реИрд╕реЗ, C # рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ GPU рдХреЗ рд▓рд┐рдП рдмреЗрд╕ 64 рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣ рдпрд╣рд╛рдБ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ: рдмреЗрд╕ 64 рдПрдирдХреЛрдбрд┐рдВрдЧ рдПрдХ рдЬреАрдкреАрдпреВ рдкрд░ ред
рд╡рд┐рдХрд╕рд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рд╢реБрджреНрдзрддрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдмреЗрд╕ 32, рдмреЗрд╕ 64, рдмреЗрд╕ 85 рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╡рд░реНрдгреЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдкреВрдВрдЫ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╕рдорд╛рди рдереЗ)ред