Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Luzhnikovskiy 13.08.2003 15:46
BASE64. Единственное ограничение - в пароле разрешены не все символы (см. словарик $bits)@base64[text][bits;uue;bitSequence;3bytes;sixtet;out;fin;i;j] ########################################################### #<!-- таблица соответствия символов их ASCII-кодам в битовом представлении --> $bits[^table::create{from to ! 00100001 ^$ 00100100 % 00100101 & 00100110 ' 00100111 ( 00101000 ) 00101001 * 00101010 + 00101011 , 00101100 - 00101101 . 00101110 / 00101111 0 00110000 1 00110001 2 00110010 3 00110011 4 00110100 5 00110101 6 00110110 7 00110111 8 00111000 9 00111001 : 00111010 ^; 00111011 < 00111100 = 00111101 > 00111110 ? 00111111 ^taint[as-is][@] 01000000 A 01000001 B 01000010 C 01000011 D 01000100 E 01000101 F 01000110 G 01000111 H 01001000 I 01001001 J 01001010 K 01001011 L 01001100 M 01001101 N 01001110 O 01001111 P 01010000 Q 01010001 R 01010010 S 01010011 T 01010100 U 01010101 V 01010110 W 01010111 X 01011000 Y 01011001 Z 01011010 [ 01011011 \ 01011100 ] 01011101 ^^ 01011110 _ 01011111 ` 01100000 a 01100001 b 01100010 c 01100011 d 01100100 e 01100101 f 01100110 g 01100111 h 01101000 i 01101001 j 01101010 k 01101011 l 01101100 m 01101101 n 01101110 o 01101111 p 01110000 q 01110001 r 01110010 s 01110011 t 01110100 u 01110101 v 01110110 w 01110111 x 01111000 y 01111001 z 01111010 { 01111011 | 01111100 } 01111101 ~ 01111110}] #<!-- таблица соответствия битовых сикстетов UU-кодам --> $uue[^hash::create[]] $uue[ $.000000[A] $.000001[B] $.000010[C] $.000011[D] $.000100[E] $.000101[F] $.000110[G] $.000111[H] $.001000[I] $.001001[J] $.001010[K] $.001011[L] $.001100[M] $.001101[N] $.001110[O] $.001111[P] $.010000[Q] $.010001[R] $.010010[S] $.010011[T] $.010100[U] $.010101[V] $.010110[W] $.010111[X] $.011000[Y] $.011001[Z] $.011010[a] $.011011[b] $.011100[c] $.011101[d] $.011110[e] $.011111[f] $.100000[g] $.100001[h] $.100010[i] $.100011[j] $.100100[k] $.100101[l] $.100110[m] $.100111[n] $.101000[o] $.101001[p] $.101010[q] $.101011[r] $.101100[s] $.101101[t] $.101110[u] $.101111[v] $.110000[w] $.110001[x] $.110010[y] $.110011[z] $.110100[0] $.110101[1] $.110110[2] $.110111[3] $.111000[4] $.111001[5] $.111010[6] $.111011[7] $.111100[8] $.111101[9] $.111110[+] $.111111[/] ] #<!-- переводим текст на входе в битовое представление --> $bitSequence[^text.replace[$bits]] #<!-- для каждых трех байт --> ^for[i](0;^math:floor(^bitSequence.length[]/24)){ #<!-- вырезаем из строки битов 24 штуки --> $3bytes[^bitSequence.mid($i*24;24)] #<!-- проверяем длину и добиваем нулями для кратности 6 --> #<!-- нужно исключительно для последних байт строки (остаток) --> ^switch(^3bytes.length[]){ #<!-- длина = 1 байт. добавляем 4 нуля и "==" в качестве окончиния закодированной строки --> ^case(8){ $3bytes[${3bytes}0000] $fin[==] #<!-- длина = 2 байта. добавляем 2 нуля и "=" в качестве окончиния закодированной строки --> } ^case(16){ $3bytes[${3bytes}00]$fin[=] } #<!-- длина = 3 байта. ничего делать не надо. (исключительно для наглядности) --> ^case(24){ } } #<!-- для каждых 6 бит --> ^for[j](0;3){ #<!-- вырезаем из строки --> $sixtet[^3bytes.mid($j*6;6)] #<!-- преобразуем и добавляем к результату --> $out[${out}$uue.[$sixtet]] } } #<!-- не забываем на выводе "хвостик" --> $result[${out}$fin] @main[] ########################################################### <html> <head> <title>Load</title> </head> <body> ^try{ $login[LOGIN] $passwd[PASSWD] $url[http://www.server.domain/file.ext] $f[^file::load[binary;$url][ $.headers[ $.Extension[Security/Remote-Passphrase] $.Authorization[Basic ^base64[${login}:$passwd]] $.User-Agent[me] ] ]] ^taint[as-is][$f.text] }{ $exception.handled(1) Не срослось... } </body> </html>