Форум: "Прочее";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
ВнизВ Base64 и обратно Найти похожие ветки
← →
Юрий Зотов © (2006-11-14 15:29) [0]Народ, подсобите, плиз, кто в курсе.
Срочно (вот прямо сейчас) нужны проверенные функции преобразования массива байт в Base64 и обратно.
Искал, нашел пару библиотечек, скачал, протестировал - глючат. В частности, из строки "123 Abc" после преобразования туда-обратно получаем строку "123 Ab".
Видать, пионерский самопал, верить им нельзя. А нужны проверенные и надежные.
Подкиньте ссылку, кто в курсе, плз. Спасибо.
← →
Array © (2006-11-14 15:33) [1]http://narod.yandex.ru/cgi-bin/yandmarkup?cluster=14&prog=0x2757571A&HndlQuery=161891856&PageNum=0&g=1&d=0&q0=1 186177648&p=
← →
Romkin © (2006-11-14 15:35) [2]Юра, у тебя хотя бы D6 есть? см IdCoder3To4.pas, оттуда IdBase64Encoder не подходит?
← →
TUser © (2006-11-14 15:36) [3]Тут примеры какие-то были
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=691
← →
TUser © (2006-11-14 15:36) [4][3] не читать - ничего я не проверял.
← →
Array © (2006-11-14 15:37) [5]http://narod.yandex.ru/cgi-bin/yandmarkup?cluster=14&prog=0x2757571A&HndlQuery=161891856&PageNum=0&g=0&d=0&q0=1 186177648&p=
http://www.codenet.ru/progr/delphi/stat/AcedUtils.php
← →
Eraser © (2006-11-14 15:38) [6]> [0] Юрий Зотов © (14.11.06 15:29)
TIdEncoderMIME, TIdDecoderMIME из пакета Indy, думаю если покапаться во внутренностях, можно добыть именно ф-ции.
← →
Jeer © (2006-11-14 15:38) [7]{******************************************************************************* *******************}
{ }
{ Lightening fast Mime (Base64) Encoding and Decoding routines. Coded by Ralf Junker }
{ (ralfjunker@gmx.de). }
{ }
{ Unit owner: Marcel van Brakel }
{ Last modified: January 29, 2001 }
{ }
{******************************************************************************* *******************}
unit JclMime;
interface
uses Classes, SysUtils;
Устраивает ?
← →
MBo © (2006-11-14 15:38) [8]сам не тестировал
http://download.berlios.de/xrtl/XRTL-2004-11-22-0.11.zip
(в библиотеке есть модуль Base64)
http://www.swissdelphicenter.ch/en/showcode.php?id=1524
http://www.swissdelphicenter.ch/en/showcode.php?id=1223
← →
Jeer © (2006-11-14 15:42) [9]{ Miscellaneous utility functions v3.31 }
{ }
{ This unit is copyright й 2000-2003 by David Butler (david@e.co.za) }
{ }
{ This unit is part of Delphi Fundamentals. }
{ Its original file name is cUtils.pas }
{ It was generated 22 Jun 2003 09:55. }
{ The latest version is available from the Fundamentals home page }
{ http://fundementals.sourceforge.net/ }
function EncodeBase64(const S, Alphabet: String; const Pad: Boolean = False;
const PadMultiple: Integer = 4; const PadChar: Char = "="): String;
function DecodeBase64(const S, Alphabet: String; const PadSet: CharSet = []): String;
← →
wal © (2006-11-14 15:46) [10]
> [2] Romkin © (14.11.06 15:35)
> [6] Eraser © (14.11.06 15:38)
У инди есть пара нюансов при декодировании:
1. длина входной строки должна быть кратна 4-м (что, в общем то, нормально, если на входе ПРАВИЛЬНАЯ строка), иначе исключение.
2. Если на входе попадется "неправильный" символ, на выходе получим $3F, вместо того, чтобы пропустить этот символ.
С уважением.
← →
Percent (2006-11-14 15:58) [11]SZCodeBaseX 1.3.2
http://www.devarchive.com/f2647.html
← →
Anatoly Podgoretsky © (2006-11-14 16:12) [12]> Срочно (вот прямо сейчас)
Вот так прямо сейчас не могу, но можешь взять у меня на сайте мой NNTP сервер, там есть действительно проверенные. В отличии от большинства кривых. Они ввиде функций, так что вырезать не составит труда.
← →
Anatoly Podgoretsky © (2006-11-14 16:13) [13]Про другие, которые упоминают здесь я ничего не могу сказать ни плохого, ни хорошего, но знаю, что хороших (правильных) очень мало, остальные определенного рода поделки, которые дают не совсем верные результаты.
← →
Anatoly Podgoretsky © (2006-11-14 16:15) [14]> 1. длина входной строки должна быть кратна 4-м
Про подобные ошибки и есть речь, похоже авторы The Bat! используют именно ее. Им много лет говорят про ошибку, не реагируют.
← →
Verg © (2006-11-14 17:10) [15]begin 644 SynaCode.rar
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
MYRXU2GF2>015[ ##5&D`@@+/S&*B-,1&-8:$"@,N.M"->IJ>F8.,K[JRJX@V`
MKCXRS$P1=#/Q"-;"1Z$A([$\LJN)J&BH*!K,8(8(HS++[$:"H8R:L4^N;?.0
MH#):;2H+;L*$S&<CCAS1LMGH[3_$,-YDL-`:/($S&@TRB<<B&<NT\ERHXB@;
M2]I^)LYC$$]HX(Y;$V$OP^<IDLC-0"I/YIX(GB"ZV0".\<@Z=.6%E!"@*P1E
MU8I]>F><PTR!K21()8A%=9:D9>"0-9@/3-*VX2C%!#=C9EPW!"PT>IY*X6$Y
MS&Q..0F/2*&?[Y5E5PAOUVGX8)B%#7$&XW0:$*?#1B11X%^Q-+*KAB,8*+>U
M,7#$@I\C.0RECCBU8I];7YS1*9^`CIS1L9EX)PU`(4V:)E\])_0B#0J08(0R
MJ;>.6BA.M.$>6&C,+S>8&:@1$<KODB6&A6QTA&681:A;!R<1)C3)FD,\5%"B
M"-$RX<YI8`VPXT%_,;#&,QSFDI-C=ANU#.[M9ZKD-N7T)K!VBJWJJL]!X.B.
MO;#`)P,@?3)"C29F"%/C6;&$^!NPVSX$UY"6@(;=DKH605.P8?3\=,)\S%0L
MGR`)S<^0_"-"R)YR*2FF-RP,&)U(*#WB1&R&;*3`(-#"/(TAN$0W&C."963J
ML,>#9S[$V!L64E*.$R"141#!OF9AHHS,)I.9NN-V!A)DI)9D:5A^CX.5/(<R
M/$)(*69*4#,CJL,?F2DEI`9E:$I0*$=Q(4TF23O@F2E`S)JP,9&ZI)0@B)*1
M"E*!"U0W"U)*V2(["E5),!IF"P,I#@4DH4K%)2#<T),`-_G,S1*25]ML[RJI
M0+SDJK#)YB4A(2\Z2(%,A24@GL$F`%XDS@D`4FXXRI3K9C6!D$15(3"`K,L*
MV.=P0I.]T*4RDSJ3U,!F<D?C9L#&B.J0D&T4E(;RDE$.([*^I0(8-#<,I3H5
MWRP,AB@4A,959EA0;3ND9)^O!J8),`*00DI!M>YF^X2P,35W$E*9*S+0CQ"2
M,23)22S)3`88H[0GK`R*C)22S([@0E*!F34SF1XA*8#F1XA"588XRZI)2"E;
M0<$<DP!C@0PX$1#*13`;9I``;`R..!22Q%E853E2@0W#,S#:<"8:8R2D_&I0
← →
Verg © (2006-11-14 17:10) [16]M)G!9WDBBEC3LCBG3C-J=<@(>0LGD0SXC!(P^\^IH-Z:$,>3M1"Q(C49XW"?`
M2>!&6/)%=EC0I""I&QR$?D9)(,T:3`",^C@;JH(0GE04&3"D]$1J)$+&>!/=
M*6U`C+"DFA2PKLC8Y""I&22$?DHR/*0#\D0E)+,CL3ZG3AH2H!E&1Y%%(="B
M$?F@9U22E5!0#6=4H%Q$C95!"B(>!.Y30:,L@&/02QT\#A1YH9$<C5!"#=`(
M;4",FR%&6/)-BECCLC0Y"J=<"M*(@T1]D"3D81&"WHPFC1IH%1N4DKJ)0LIT
MX*3A,R1HP#JB1ECR3;LL<%(TJ"$"$-H@D1T:H*`40N:$1A]VGYH&MI,PXR92
M2NH@4^%2@841F.-2G8CY8\DX*6-NR%"-&GCP9)!/R49(E($W+<R4DLR.RH2E
M`O*=<)"W-(#RB1P23.C1ECR3CLL;%(5Z1I4%"B)4$)\2(\0^38RC#[N&1`EB
MYFTZB!R):&S"B$@/!Q"P#``G6]<^SO!L.6)@R>\-;W$"-BXN.K![P<KI>M:]
M#-OE6=J;:##SX,DO4<M>(.?;LL@O:K3H!3VN&Y^0.QOK0@;J(J>:;N[5F*"+
MMXL.#V6R6MR]56-O8.-2,_U\"Z5\_O^C]FK?C\<DZ??L,<O?653Q:.RR\=H`
M]<X?B$VF]1;XLT"LR>VYNWL?/RASF]?Z47+M2@?>QW_`P-75RR]/R]M^FL+O
M[/`N!L<>%-]G(0&*D$5>>GW^JO(&F7BN>^S(Z_R!@_L^W0D0>"T5AC#%1L^G
ME]21-Q56LZ,=ZKI4&@8ND8EL06C*3\QI$X>"U58O82K<EAE9S;TK-8Q$K3N;
MV3%OX0793IR7.Y]7<8[M#$\PYUJ[8"`QQGZK1W`9^*]P_SM*"Y;;-$RAO9[+
M5R>5<=L-)=C[33SKJJ.]*K%VVJUY=SP=SMQ".O[4EUX_/W2_T?0NVN*X&&"7
MS;@2*@?<4NR-9C][ #-W3@4\F"%14K]!Y0_K\"S!+PJ`_.#.BMI]VT$Z3TF=2
MU8D6=KSP!P3S?P^&][[FYBX[G%=6?U6%V/TC]74BG2Q!)?3G@(:(!W5G]Q=4
M(_\Q@6?,]R`"K%@E]&Q:\1%8[M2B_2G\7!W=G95T*JZ-5D1VRT"@E7?5VXH;
M7NYR=>4#^Z7%O$?&.[J^)N]OI1](2"M9#.R]V*:)6_X;"211./4FX4S/?Z;*
M[=;%(SQ=12MFO`+8*N4[^V7\00T(PZ1,V7I9,U86]!\$XGRX<=RR7NK6+4B.
M<I_`#^"I$>L,"M:I:RQ]=JWLA]:DR--TU9:VY#Z1>H/0SB=M;FBQ^WE8(#H0
M6PY>!2O$P6P7+1=[_(!FDE034K9=:T?["M8/Q"W++L27B"78EWJ=%U1:9EII
M%SJ"]81Q,GV;D9T*,T$G4+6A:/^::._9^^E?_?/>2^Q,H.?C2>UN)>V9!D?#
MB3UT<C(YIE#I2DN5+>#23%94>E+\3)/5TK/7_OGY9.R^$?UOQ\7?L>\Z79UU
MTFBW90[G/DZY__">R<LO:Y<7>#[H9SL<=_\6&4[1`MW3@#*+.G`5JM-<HINA
MZ50-ZK;9JK&RP2B*7$P`[G%4P9"8T7;P0Y38R,70XOU!O=0Y"\HY.D.98Q;.
MKNZ#RL>U7QQ%STL?QSX363VTCXZX^NF/Q8S[.K0?T$N[>F`,K(`S&L\GK$;&
MT)%>/4](^A^OY.YRL.O2$"3#?0-=:TG5H4]4>10VP)4R/J]Y%:A`=L2(6M>,
M6])LS5I(&N$O5Y=)4,^W(DOSR$6HLE:#?^"@FN>/#5QX5Z5?S\^1;]^^W"=Z
M1,NYW+`;.U"1RJR52&P%"NN<"-S3^@!0BTN\$%G&PD0*@DL1>^_DLMT[/WN&
MB^[;\@;M""=8\"VSIU,3%Y(=:P^^"JS-"K8[W>O^S!AQ7JD%8^%[,E<#TLGQ
M<^/)A]S&9;?56EYS*4-9[*[4J5?;9CEP%(W<^US5PMER<ONGBG30LX6X7?4$
MW/?7IT_OSQG1UW-SWV]01.HK7@"2]-+`LVG_4G;,J14ZMGMR`@7Q-.(0Q.DK
MX(<6;[^ER8M*AZE[6YCJ2[MRB<]<W!U;5U_DTM,S/L3:VP;>F]H#:[STZ<E4
MK5HZA_S@X.W"^//YY?CUQ^CL;ZM2P/I#[6N/&5>A\/\N>0I2/^O8F7;;/FL>
M:TUL_0,6MBU?^+OZPS[?TY_&_V>?MOK3]-];E0*L.GC6=<GE;^E/(W]"Z3M^
M.+88;+IRS%5U!*BY]V5H2BOI[M6Z6@M\FMVEF-\QYW[TF5]RXK"JGLG;JIYO
M/WF`*-7R[E?WX<5>4:<:"!X^E),K"PO,X)5FWJ"A/P^>KM53NM>?O6<@UUBH
M]">?57R[KG"U6Q);ROT-+8/5=V*\)VM``[%Z#+ZEC.=)PIBM=B:<!P-N67$C
M59B3ZNWF&.L]#(ZXPJI@W_!8(&W+_TYL6"BO<?.$Y_XX6@]G]7`3%/6GWOQ[
MY<J[30NVTXCO\O*J"5HQ`<E1?_I>W.2Y9C\H?M%4XVGW/SHQ.K"K3VH[71K-
M"BP16B,B"=VK>$"+VBC@A?,Z](21YTS\,$<4C,@Q,D:*XWTL;M94F_BX<&,,
MY?<I5)N?DKIFZ?=)>:"V`,=IBIE.&B?AU;V[H96?V*`.B#14A[]E[5WPYH*6
MZ"LTL:B9YM&%8\\]/1T7X;%9$SV^]W]":^%I<:=.?S!3L?PJ=Z\ZG;[GH5^?
MPN@[_W5"FQ4?F4^WYE4E?>JK?"?P"T$>/ZPLKNTL-_/;5OTB`$E^O4>5S\#[
M>>6>B7^!F7ZY]ZU\_3#V+^FKW\Z33P8<B6-/TD^\Y1?2)0=6"`>J^-9^ZZ9U
M`?BKLFV$_#,K38UN8Z"7*DK3!@[JDOORH/$$&WWRI\0D<N[5H"#":`I#"*8G
M8"#.)])[ #(L$)Q]@6B$E)"D$X*$TK7*-9+FDT9E,`S0P1)\2Z(N4=1(BS&-I
MR`4;\9]!J4@I5";(^C1;.7W61%;&R?1<7.F&>SS0AHT79C/5T710ZQF*]*73
M%+&KS;$_N&NQNG7I:,8>L)&,:Y3S0P0N&UG,<:["39GA4&$)K#5:.T<+SK@W
MF=929=CM]MQXK+L1]+28]>,43I-&9><+)TB4+G<V.(C2?1S#5HIDU4G79W@%
M1B9D/3?3#RP/JI*N4"-M1-/M*S,*L$S>5V!8LTC<#B?0S1`DYODI$NIT/4A@
MQ-0HT-)G<1"EIC:9UA(](HNOCB;=/I+L!1.0LQF@=/HKNN$HO"!#$VC17*,#
M++@G(6SZ&DW,6%H4+KFL)$O`^*TT_/&*%&CI.LOO1,Q/":Z](R+G5!%&^KR\
M?K$B7B0MN-QB)"\?1TH"CL)"RP.Z&JLX6SUK5D<8"6\GS(BV4V9J+K6=<<""
M6SD-8(ZUY!L/*_:H=(VU@G52;2T[(8FF74^CQ",S"K(.CY311/E+UZ2+E">U
M&,$;[TVCI:=C9C3\;%K*1KP`Z:#`\@X*;27:N(Z\9R*!OKTDTH<[[XR.1OGT
M5RA"6*-D3K1]%>.6(KKHX1-:PD;RY1>HSGNR]UZ1:3D$3<)GGHFM9:M7<?"&
M^1R"-W6$D7*4!7X&FVS],X47K9K>,I"B$4U=;*13T79U*R1^.-Y42,2P1UT@
M48(`3+Z@EJ4H\Z4#Z!Z>U62)!K!"72>#31FGH&>O21=G5V,4"0/$1I:<NM%T
M17(4:.E+JM.E:AA&?1TIKJ-]UR(L?7I"I,ZTTD@B;B%K"2:4\\%%.*R,NLI&
MNM<M%KHQOZRDFE&5<:9.G22Z)^QH67XR,M"T=+:S/PN0D-+#^U>!_$8/1Q;V
MA(_U_JJW556Z,`&N[5NR"+AI>Q)<@E[,RY#=ZFDF54__J:;FO21ZZDUHI"M$
M7".VAW)L)XICIJE`%NG>.UU(5(FURG([]7%K\^7K-\-H[/^4HP!FK?T*A>VN
MT<PO0Y9C?M<,5;"AZG:V/I"G%V)@E<HI685S?FC-VOM"BN\4G2<`+079U?9]
MK`NIX@+.`[\N]9!;*Q]=JSJYF/40!?M"[QX?QO*6<#`//R!XA5Z5#^I"+NUH
MQ.?C\5^)+^4(M_0(%JC>JI;JQW*#6:_%9@5E@C42[06ZN.#2DOVJ3[I>TQ,Y
MO5&JKG+LYTV^,?UPXTYVJ%*X7G/KI>-PZPP\ZZ0`=#KUKW*%&"_57=2ZYTO)
MN8,F>O\?&^6UR=/"?]E["DU/+,+/&=[_3._IX`S;L[8OGGG76D<9FE#3,YZK
MJ<%.<$?UMYV!7<HF=XWIW(_*I\/!8S]5Y@_Z?*KMMUV7A.3/E1Q6.5.*#8^N
MT"7^15Y]C#O4NPY^`4T$G82!Z.`(^0Q;XI3IBH-K&W;$VKV^[U9?!!G;8963
M52<NK#ESWK4O6NH]:T?JFM:[JK."1,.=)SCE3$E^6W5\S#4T=GYL>IOOL"#+
M?2^)3[![S%K=YZ1Y^VZ/9Q3>C#5)QHU0;:8J)E6`T+`SP#EQ"VDH?6O>T-:B
MK_-P\<X\*OZMV?8MKQ]<K//VI:!/NL+]^NA9I4K[N-I5]M6%FTTROR9-K0HL
MPZOONL!_QQ2@##K@?9A\)^*>IJVS\U(@*2U5X*4IO!44^NT5S/-46$`Q-A8[
MYAZ4%PR^RQUOL;023*^3?[^</Q_(:<[*5<,OMQ]D<4#[V?S?^T#$/7L`0`<`
`
end
← →
antonn © (2006-11-14 18:43) [17]<offtop>
и что интересно, никто не подтрунивает над автором, не посылают в гугл и ни слова о халяве...
← →
Eraser © (2006-11-14 18:46) [18]> [17] antonn © (14.11.06 18:43)
сначала человек работает на репутацию, потом репутация на человека (c) народная поговорка.
← →
oldman © (2006-11-14 18:47) [19]
> antonn © (14.11.06 18:43) [17]
Ребята с большой буквой М вопросы типа "курсач горит" тута не задают...
В гугле он уже был.
Подтрутнивать над ним - ну его на фиг!
Халява - без комментариев...
← →
Ketmar © (2006-11-14 20:09) [20]>[17] antonn(c) 14-Nov-2006, 18:43
>и что интересно, никто не подтрунивает над автором
самоубийц нет. Юрий -- он добрый. но память у него тоже хорошая. %-)
← →
Юрий Зотов © (2006-11-14 22:29) [21]Всем огромное спасибо, вопрос был успешно и быстро решен.
> antonn © (14.11.06 18:43) [17]
Вы разве не знали? "Я страшный дракон Бойся-Бой!"
:о)
А насчет гугля - разве непонятно, что с него я и начал? Там такого добра - хоть ложкой ешь, только меня интересовали не глючные поделки юных пионэров, а надежный и быстрый профессиональный код. И как по-Вашему, сколько бы я потратил времени, отыскивая иголку в стоге сена? А времени-то как раз и не было.
Потому и спросил. Ведь наверняка многие уже юзали такие процедурки, поэтому легко могут поделиться собственным опытом. Типа "вот этим можешь смело пользоваться, а об этом вообще забудь".
← →
Anatoly Podgoretsky © (2006-11-14 22:43) [22]> Юрий Зотов (14.11.2006 22:29:21) [21]
Как решил, что именно взял, протестировал ли на граничных значениях 0, 1, 2 , 3, 4 символа?
Многие процедуры грешат. Я не зря про The Bat! говорил, если длина исходного не равна 3 трем символам, то потихоньку отжирает символы с конца. Точнее он делает неверные закодированые строки не равные 4 символам. А остальные продукты сжирают с конца, поскольку такую строку правильно не раскодировать.
← →
Anatoly Podgoretsky © (2006-11-14 22:44) [23]> Юрий Зотов (14.11.2006 22:29:21) [21]
Если что, то я сейчас дома и могу скопировать текст из ICS сюда.
Код автором выверен, хоть и не очень красивый (оптимальный).
← →
Anatoly Podgoretsky © (2006-11-14 22:46) [24]Второй автор за которого я могу поручиться это доктор Боб
Наверно слышал про такого, легендарная личность.
← →
Johnmen © (2006-11-14 23:03) [25]
> Юрий Зотов © (14.11.06 22:29) [21]
Есть base64 от Sha ©. Очень быстрый.
Если всё ещё интересно, завтра поутру скину.
← →
antonn © (2006-11-14 23:04) [26]Юрий Зотов © (14.11.06 22:29) [21]
да ладно... :)
многие ищут правильный код поиска файлов по маске в поддиректориях (вот чтобы проверенный и правильный:)), ведь не все еще доросли до шифрования:) Ну, в итоге, их с гиканьем отправляют на F1, в гуглю и прочее:) Хотя, через бесчувственного гуглю довольно проблематично найти код, который проверенный, там всякого хлама полно:) Но это я поофтопил, нужно же было укусить)
← →
Anatoly Podgoretsky © (2006-11-14 23:08) [27]> antonn (14.11.2006 23:04:26) [26]
Интернет на 95% это помойка
← →
antonn © (2006-11-14 23:35) [28]Anatoly Podgoretsky © (14.11.06 23:08) [27]
я догадывался... :(
← →
vuk © (2006-11-15 00:41) [29]Я, помнится, реализовывал конвертирование из/в систем с различной длиной байта через потоки с побитовым чтением/записью.
Тогда перекодировка в BASE64 получается как чтение из исходного по 6 бит, перекодировка по таблице и запись в выходной поток. Обратно примерно так же, но наоборот - читается 8 бит перекодируется и пишется 6.
← →
Юрий Зотов © (2006-11-15 00:55) [30]> Johnmen © (14.11.06 23:03) [25]
Еще интересно, и даже очень. Там задача такова, что конвертировать придется, вполне возможно, мегабайтные куски, да еще и в достаточном количестве, поэтому скорость важна. А Александр - это тот человек, которому доверять стоит.
Так что был бы очень признателен Вам обоим.
← →
Германн © (2006-11-15 04:04) [31]
> Юрий Зотов © (15.11.06 00:55) [30]
>
> > Johnmen © (14.11.06 23:03) [25]
>
> Еще интересно, и даже очень.
???_???
← →
Anatoly Podgoretsky © (2006-11-15 09:56) [32]> Германн (15.11.2006 04:04:31) [31]
Есть два человека Sha и Johnmen - вот им и будет благодарен
← →
Johnmen © (2006-11-15 10:00) [33]
> Юрий Зотов © (15.11.06 00:55) [30]
Готов выслать на мыло. Моё - в анкете.
← →
Johnmen © (2006-11-15 10:09) [34]Выкладываю здесь. Взято из библиотеки Sha_Strings с согласия автора.
// (c) Sha 2003-2005
// Быстрые функции для преобразования бинарых данных в Base64-представление
// и обратно. Работают быстрее аналогов из Indy и ICS.
// Функции со строковым параметром возвращают преобразованную строку.
// Функции, работающие с буферами, возвращают количество полученных байтов.
// Sha_Base64Encode преобразует бинарную строку в Base64-строку или
// копирует (с преобразованием) данные из бинарного буфера в Base64-буфер.
function Sha_Base64Encode(const StringToEncode: string): string; overload;
function Sha_Base64Encode(BufToEncode, BufEncoded: pointer; LenToEncode: integer): integer; overload;
// Sha_Base64Decode преобразует Base64-строку в бинарную строку или
// копирует (с преобразованием) данные из Base64-буфера в бинарный буфер.
function Sha_Base64Decode(const StringToDecode: string): string; overload;
function Sha_Base64Decode(BufToDecode, BufDecoded: pointer; LenToDecode: integer): integer; overload;
// Sha_Base64Decode преобразует Base64-строку в бинарную строку.
function Sha_Base64Decode(const StringToDecode: string): string; overload;
type
WordArray = array[0..$1fffffff] of word;
pWordArray = ^WordArray;
var
ch0, ch1: integer;
p, q, terminator, lastdword: pChar;
label
TestCrLf, Done, Error;
begin;
ch0:=length(StringToDecode);
if ch0>=4 then begin;
SetLength(Result,ch0-(ch0 shr 2));
p:=pointer(Result);
q:=pointer(StringToDecode);
terminator:=@q[ch0];
lastdword:=@q[ch0-4];
while true do begin;
if q>lastdword then goto TestCrLf;
ch0:=Base64Decode[ord(q[0])];
if ch0>=64 then while true do begin;
inc(q);
if ch0>64 then goto Error;
TestCrLf:
if q>=terminator then goto Done;
ch0:=Base64Decode[ord(q[0])];
if ch0<64 then begin;
if q<=lastdword then break;
if q>=terminator then goto Done;
goto Error;
end;
end;
ch1:=Base64Decode[ord(q[1])];
if ch1>=64 then goto Error;
p^:=chr((ch0 shl 2)+(ch1 shr 4)); inc(p);
ch0:=pWordArray(q)[1];
if ch0<>ord(Base64Nil)*(256+1) then begin;
ch0:=Base64Decode[ch0 and 255];
if ch0>=64 then goto Error;
p^:=chr((ch1 shl 4)+(ch0 shr 2)); inc(p);
ch1:=ord(q[3]);
if ch1<>ord(Base64Nil) then begin;
ch1:=Base64Decode[ch1];
if ch1>=64 then goto Error;
p^:=chr(ch0 shl 6 + ch1); inc(p);
end;
end;
inc(q,4);
end;
Done:
SetLength(Result,p-pointer(Result));
end
else
Error:
Result:="";
end;
// Sha_Base64Decode копирует (с преобразованием) данные из Base64-буфера
// в бинарный буфер.
function Sha_Base64Decode(BufToDecode, BufDecoded: pointer; LenToDecode: integer): integer; overload;
type
WordArray = array[0..$1fffffff] of word;
pWordArray = ^WordArray;
var
ch0, ch1: integer;
p, q, terminator, lastdword: pChar;
label
TestCrLf, Done, Error;
begin;
if LenToDecode>=4 then begin;
p:=BufDecoded;
q:=pointer(BufToDecode);
terminator:=@q[LenToDecode];
lastdword:=@q[LenToDecode-4];
while true do begin;
if q>lastdword then goto TestCrLf;
ch0:=Base64Decode[ord(q[0])];
if ch0>=64 then while true do begin;
inc(q);
if ch0>64 then goto Error;
TestCrLf:
if q>=terminator then goto Done;
ch0:=Base64Decode[ord(q[0])];
if ch0<64 then begin;
if q<=lastdword then break;
if q>=terminator then goto Done;
goto Error;
end;
end;
ch1:=Base64Decode[ord(q[1])];
if ch1>=64 then goto Error;
p^:=chr((ch0 shl 2)+(ch1 shr 4)); inc(p);
ch0:=pWordArray(q)[1];
if ch0<>ord(Base64Nil)*(256+1) then begin;
ch0:=Base64Decode[ch0 and 255];
if ch0>=64 then goto Error;
p^:=chr((ch1 shl 4)+(ch0 shr 2)); inc(p);
ch1:=ord(q[3]);
if ch1<>ord(Base64Nil) then begin;
ch1:=Base64Decode[ch1];
if ch1>=64 then goto Error;
p^:=chr(ch0 shl 6 + ch1); inc(p);
end;
end;
inc(q,4);
end;
Done:
Result:=p-pChar(BufDecoded);
end
else
Error:
Result:=0;
end;
← →
Юрий Зотов © (2006-11-15 10:42) [35]> Johnmen © (15.11.06 10:09) [34]
Спасибище!
← →
Johnmen © (2006-11-15 10:50) [36]Продолжение, т.е. начало...
const
Base64Nil = "=";
Base64Encode: array [0..63] of char = (
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",
"N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m",
"n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+", "/");
Base64Decode: array[0..255] of byte = (
99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 64, 99, 99, 64, 99, 99, //"64" for #10,#13
99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, //"99" for not Base64 codes
99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 62, 99, 99, 99, 63, //"62" for "+", "63" for "/"
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 99, 99, 99, 99, 99, 99,
99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 99, 99, 99, 99, 99,
99, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 99, 99, 99, 99, 99,
99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99);
// Sha_Base64Encode преобразует бинарную строку в Base64-строку.
function Sha_Base64Encode(const StringToEncode: string): string; overload;
var
len, ch0, ch1: integer;
p, q: pChar;
begin;
p:=pointer(StringToEncode);
len:=length(StringToEncode);
ch0:=((len+2) div 3) * 4;
Setlength(Result,ch0);
if ch0>0 then begin;
q:=pointer(Result);
pInteger(@q[ch0-4])^:=ord(Base64Nil)*$01010101;
repeat;
ch0:=Ord(p[0]);
q[0]:=Base64Encode[ch0 shr 2];
ch0:=(ch0 and $03) shl 4;
if len<=1 then
q[1]:=Base64Encode[ch0]
else begin;
ch1:=Ord(p[1]);
q[1]:=Base64Encode[ch0 + (ch1 shr 4)];
ch1:=(ch1 and $0F); ch1:=ch1+ch1; ch1:=ch1+ch1;
if len<=2 then
q[2]:=Base64Encode[ch1]
else begin;
ch0:=Ord(p[2]);
q[2]:=Base64Encode[ch1 + (ch0 shr 6)];
q[3]:=Base64Encode[ch0 and $3F];
end;
end;
len:=len-3;
p:=p+3;
q:=q+4;
until len<=0;
end;
end;
// Sha_Base64Encode копирует (с преобразованием) данные из бинарного буфера
// в Base64-буфер.
function Sha_Base64Encode(BufToEncode, BufEncoded: pointer; LenToEncode: integer): integer; overload;
var
ch0, ch1: integer;
p, q: pChar;
begin;
p:=BufToEncode;
Result:=((LenToEncode+2) div 3) * 4;
if Result>0 then begin;
q:=BufEncoded;
pInteger(@q[Result-4])^:=ord(Base64Nil)*$01010101;
repeat;
ch0:=Ord(p[0]);
q[0]:=Base64Encode[ch0 shr 2];
ch0:=(ch0 and $03) shl 4;
if LenToEncode<=1 then
q[1]:=Base64Encode[ch0]
else begin;
ch1:=Ord(p[1]);
q[1]:=Base64Encode[ch0 + (ch1 shr 4)];
ch1:=(ch1 and $0F); ch1:=ch1+ch1; ch1:=ch1+ch1;
if LenToEncode<=2 then
q[2]:=Base64Encode[ch1]
else begin;
ch0:=Ord(p[2]);
q[2]:=Base64Encode[ch1 + (ch0 shr 6)];
q[3]:=Base64Encode[ch0 and $3F];
end;
end;
LenToEncode:=LenToEncode-3;
p:=p+3;
q:=q+4;
until LenToEncode<=0;
end;
end;
← →
Styx_ (2006-11-15 11:09) [37]Что-то я не пойму, откуда наезды на IDEncoderMIME... Только что закодировал из потока файлы размером 1, 2, 3 и 4 байта, отправил на сервер, там раскодировал встроенной функцией PHP - всё нормально. Delphi 7. Что я делаю не так?
← →
Percent (2006-11-15 11:29) [38]А! Goto! А!!! *упал в обморок*
← →
Юрий Зотов © (2006-11-15 12:30) [39]> Percent (15.11.06 11:29) [38]
Это от снобизма. Ничего, пройдет.
← →
Anatoly Podgoretsky © (2006-11-15 14:04) [40]> Styx_ (15.11.2006 11:09:37) [37]
Ну например не приводишь эти закодированые строчки здесь.
Потом Инди - это уже 10!!! версий
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
Память: 0.61 MB
Время: 0.056 c