Documentation TYPO3 par Ameos

blowfish.php

00001 <?php
00002 
00003 /* $Id: blowfish.php,v 2.4 2004/12/16 18:26:43 lem9 Exp $ */
00004 // vim: expandtab sw=4 ts=4 sts=4:
00005 
00023 // Change for phpMyAdmin by lem9:
00024 //class Horde_Cipher_blowfish extends Horde_Cipher {
00025 class Horde_Cipher_blowfish {
00026 
00027     /* Pi Array */
00028     var $p = array(
00029             0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344,
00030             0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89,
00031             0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C,
00032             0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917,
00033             0x9216D5D9, 0x8979FB1B);
00034 
00035     /* S Boxes */
00036     var $s1 = array(
00037             0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7,
00038             0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99,
00039             0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16,
00040             0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E,
00041             0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE,
00042             0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013,
00043             0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF,
00044             0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E,
00045             0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60,
00046             0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440,
00047             0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE,
00048             0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A,
00049             0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E,
00050             0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677,
00051             0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193,
00052             0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032,
00053             0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88,
00054             0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239,
00055             0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E,
00056             0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0,
00057             0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3,
00058             0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98,
00059             0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88,
00060             0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE,
00061             0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6,
00062             0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D,
00063             0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B,
00064             0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7,
00065             0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA,
00066             0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463,
00067             0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F,
00068             0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09,
00069             0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3,
00070             0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB,
00071             0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279,
00072             0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8,
00073             0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB,
00074             0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82,
00075             0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB,
00076             0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573,
00077             0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0,
00078             0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B,
00079             0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790,
00080             0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8,
00081             0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4,
00082             0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0,
00083             0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7,
00084             0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C,
00085             0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD,
00086             0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1,
00087             0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299,
00088             0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9,
00089             0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477,
00090             0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF,
00091             0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49,
00092             0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF,
00093             0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA,
00094             0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5,
00095             0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41,
00096             0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915,
00097             0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400,
00098             0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915,
00099             0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664,
00100             0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A);
00101     var $s2 = array(
00102             0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623,
00103             0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266,
00104             0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1,
00105             0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E,
00106             0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6,
00107             0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1,
00108             0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E,
00109             0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1,
00110             0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737,
00111             0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8,
00112             0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF,
00113             0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD,
00114             0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701,
00115             0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7,
00116             0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41,
00117             0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331,
00118             0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF,
00119             0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF,
00120             0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E,
00121             0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87,
00122             0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C,
00123             0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2,
00124             0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16,
00125             0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD,
00126             0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B,
00127             0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509,
00128             0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E,
00129             0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3,
00130             0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F,
00131             0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A,
00132             0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4,
00133             0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960,
00134             0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66,
00135             0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28,
00136             0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802,
00137             0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84,
00138             0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510,
00139             0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF,
00140             0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14,
00141             0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E,
00142             0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50,
00143             0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7,
00144             0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8,
00145             0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281,
00146             0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99,
00147             0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696,
00148             0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128,
00149             0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73,
00150             0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0,
00151             0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0,
00152             0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105,
00153             0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250,
00154             0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3,
00155             0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285,
00156             0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00,
00157             0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061,
00158             0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB,
00159             0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E,
00160             0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735,
00161             0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC,
00162             0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9,
00163             0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340,
00164             0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20,
00165             0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7);
00166     var $s3 = array(
00167             0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934,
00168             0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068,
00169             0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF,
00170             0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840,
00171             0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45,
00172             0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504,
00173             0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A,
00174             0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB,
00175             0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE,
00176             0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6,
00177             0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42,
00178             0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B,
00179             0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2,
00180             0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB,
00181             0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527,
00182             0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B,
00183             0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33,
00184             0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C,
00185             0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3,
00186             0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC,
00187             0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17,
00188             0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564,
00189             0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B,
00190             0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115,
00191             0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922,
00192             0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728,
00193             0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0,
00194             0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E,
00195             0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37,
00196             0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D,
00197             0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804,
00198             0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B,
00199             0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3,
00200             0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB,
00201             0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D,
00202             0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C,
00203             0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350,
00204             0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9,
00205             0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A,
00206             0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE,
00207             0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D,
00208             0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC,
00209             0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F,
00210             0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61,
00211             0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2,
00212             0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9,
00213             0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2,
00214             0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C,
00215             0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E,
00216             0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633,
00217             0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10,
00218             0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169,
00219             0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52,
00220             0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027,
00221             0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5,
00222             0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62,
00223             0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634,
00224             0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76,
00225             0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24,
00226             0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC,
00227             0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4,
00228             0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C,
00229             0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837,
00230             0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0);
00231     var $s4 = array(
00232             0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B,
00233             0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE,
00234             0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B,
00235             0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4,
00236             0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8,
00237             0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6,
00238             0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304,
00239             0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22,
00240             0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4,
00241             0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6,
00242             0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9,
00243             0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59,
00244             0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593,
00245             0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51,
00246             0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28,
00247             0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C,
00248             0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B,
00249             0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28,
00250             0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C,
00251             0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD,
00252             0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A,
00253             0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319,
00254             0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB,
00255             0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F,
00256             0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991,
00257             0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32,
00258             0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680,
00259             0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166,
00260             0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE,
00261             0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB,
00262             0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5,
00263             0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47,
00264             0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370,
00265             0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D,
00266             0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84,
00267             0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048,
00268             0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8,
00269             0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD,
00270             0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9,
00271             0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7,
00272             0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38,
00273             0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F,
00274             0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C,
00275             0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525,
00276             0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1,
00277             0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442,
00278             0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964,
00279             0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E,
00280             0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8,
00281             0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D,
00282             0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F,
00283             0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299,
00284             0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02,
00285             0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC,
00286             0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614,
00287             0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A,
00288             0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6,
00289             0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B,
00290             0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0,
00291             0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060,
00292             0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E,
00293             0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9,
00294             0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F,
00295             0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6);
00296 
00297     /* The number of rounds to do */
00298     var $_rounds = 16;
00299 
00300     /* Constructor */
00301     function Cipher_blowfish($params = null)
00302     {
00303     }
00304 
00310     function setKey($key)
00311     {
00312         $key = $this->_formatKey($key);
00313         $keyPos = $keyXor = 0;
00314 
00315         $iMax = count($this->p);
00316         $keyLen = count($key);
00317         for ($i = 0; $i < $iMax; $i++) {
00318             for ($t = 0; $t < 4; $t++) {
00319                 $keyXor = ($keyXor << 8) | (($key[$keyPos]) & 0x0ff);
00320                 if (++$keyPos == $keyLen) {
00321                     $keyPos = 0;
00322                 }
00323             }
00324             $this->p[$i] = $this->p[$i] ^ $keyXor;
00325         }
00326 
00327         $encZero = array('L' => 0, 'R' => 0);
00328         for ($i = 0; $i + 1 < $iMax; $i += 2) {
00329           $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);
00330           $this->p[$i] = $encZero['L'];
00331           $this->p[$i + 1] = $encZero['R'];
00332         }
00333 
00334         $iMax = count($this->s1);
00335         for ($i = 0; $i < $iMax; $i += 2) {
00336           $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);
00337           $this->s1[$i] = $encZero['L'];
00338           $this->s1[$i + 1] = $encZero['R'];
00339         }
00340 
00341         $iMax = count($this->s2);
00342         for ($i = 0; $i < $iMax; $i += 2) {
00343           $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);
00344           $this->s2[$i] = $encZero['L'];
00345           $this->s2[$i + 1] = $encZero['R'];
00346         }
00347 
00348         $iMax = count($this->s3);
00349         for ($i = 0; $i < $iMax; $i += 2) {
00350           $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);
00351           $this->s3[$i] = $encZero['L'];
00352           $this->s3[$i + 1] = $encZero['R'];
00353         }
00354 
00355         $iMax = count($this->s4);
00356         for ($i = 0; $i < $iMax; $i += 2) {
00357           $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);
00358           $this->s4[$i] = $encZero['L'];
00359           $this->s4[$i + 1] = $encZero['R'];
00360         }
00361 
00362     }
00363 
00369     function getBlockSize()
00370     {
00371         return 8;
00372     }
00373 
00382     function encryptBlock($block, $key = null)
00383     {
00384         if (!is_null($key)) {
00385             $this->setKey($key);
00386         }
00387 
00388         list($L, $R) = array_values(unpack('N*', $block));
00389         $parts = $this->_encryptBlock($L, $R);
00390         return pack("NN", $parts['L'], $parts['R']);
00391     }
00392     
00401     function _encryptBlock($L, $R)
00402     {
00403         $L ^= $this->p[0];
00404         $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[1];
00405         $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[2];
00406         $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[3];
00407         $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[4];
00408         $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[5];
00409         $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[6];
00410         $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[7];
00411         $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[8];
00412         $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[9];
00413         $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[10];
00414         $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[11];
00415         $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[12];
00416         $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[13];
00417         $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[14];
00418         $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[15];
00419         $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[16];
00420         $R ^= $this->p[17];
00421 
00422         return array('L' => $R, 'R' => $L);
00423     }
00424 
00433     function decryptBlock($block, $key = null)
00434     {
00435         if (!is_null($key)) {
00436             $this->setKey($key);
00437         }
00438 
00439 // change for phpMyAdmin
00440         $L = null;
00441         $R = null;
00442 
00443         $retarray = array_values(unpack('N*', $block));
00444         if(isset($retarray[0])) {
00445             $L = $retarray[0];
00446         }
00447         if(isset($retarray[1])) {
00448             $R = $retarray[1];
00449         }
00450 // end change for phpMyAdmin
00451 
00452         $L ^= $this->p[17];
00453         $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[16];
00454         $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[15];
00455         $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[14];
00456         $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[13];
00457         $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[12];
00458         $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[11];
00459         $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[10];
00460         $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[9];
00461         $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[8];
00462         $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[7];
00463         $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[6];
00464         $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[5];
00465         $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[4];
00466         $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[3];
00467         $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[2];
00468         $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[1];
00469 
00470         $decrypted = pack("NN", $R ^ $this->p[0], $L);
00471         return $decrypted;
00472     }
00473 
00479     function _formatKey($key)
00480     {
00481         return array_values(unpack('C*', $key));
00482     }
00483 
00484 }
00485 
00486 // higher-level functions:
00487 
00500 function full_str_pad($input, $pad_length, $pad_string = '', $pad_type = 0) {
00501     $str = '';
00502     $length = $pad_length - strlen($input);
00503     if ($length > 0) { // str_repeat doesn't like negatives
00504         if ($pad_type == STR_PAD_RIGHT) { // STR_PAD_RIGHT == 1
00505             $str = $input.str_repeat($pad_string, $length);
00506         } elseif ($pad_type == STR_PAD_BOTH) { // STR_PAD_BOTH == 2
00507             $str = str_repeat($pad_string, floor($length/2));
00508             $str .= $input;
00509             $str .= str_repeat($pad_string, ceil($length/2));
00510         } else { // defaults to STR_PAD_LEFT == 0
00511             $str = str_repeat($pad_string, $length).$input;
00512         }
00513     } else { // if $length is negative or zero we don't need to do anything
00514         $str = $input;
00515     }
00516     return $str;
00517 }
00518 
00531 function PMA_blowfish_encrypt($data, $secret) {
00532     $pma_cipher = new Horde_Cipher_blowfish;
00533     $encrypt = '';
00534     for ($i=0; $i<strlen($data); $i+=8) {
00535         $block = substr($data, $i, 8);
00536         if (strlen($block) < 8) {
00537             $block = full_str_pad($block,8,"\0", 1);
00538         }
00539         $encrypt .= $pma_cipher->encryptBlock($block, $secret);
00540     }
00541     return base64_encode($encrypt);
00542 }
00543 
00556 function PMA_blowfish_decrypt($encdata, $secret) {
00557     $pma_cipher = new Horde_Cipher_blowfish;
00558     $decrypt = '';
00559     $data = base64_decode($encdata);
00560     for ($i=0; $i<strlen($data); $i+=8) {
00561         $decrypt .= $pma_cipher->decryptBlock(substr($data, $i, 8), $secret);
00562     }
00563     return trim($decrypt);
00564 }
00565 
00566 ?>


Généré par L'expert TYPO3 avec  doxygen 1.4.6