[ Index ]
 

Code source de DokuWiki 2006-11-06

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/inc/ -> blowfish.php (source)

   1  <?php
   2  
   3  /* $Id: blowfish.php,v 2.4 2004/12/16 18:26:43 lem9 Exp $ */
   4  // vim: expandtab sw=4 ts=4 sts=4:
   5  
   6  /**
   7   * The Cipher_blowfish:: class implements the Cipher interface enryption data
   8   * using the Blowfish algorithm.
   9   *
  10   * $Horde: horde/lib/Cipher/blowfish.php,v 1.2.2.3 2003/01/03 13:23:22 jan Exp $
  11   *
  12   * Copyright 2002-2003 Mike Cochrane <mike@graftonhall.co.nz>
  13   *
  14   * See the enclosed file COPYING for license information (LGPL). If you
  15   * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
  16   *
  17   * @author  Mike Cochrane <mike@graftonhall.co.nz>
  18   * @version $Revision: 2.4 $
  19   * @since   Horde 2.2
  20   * @package horde.cipher
  21   */
  22  
  23  // Change for phpMyAdmin by lem9:
  24  //class Horde_Cipher_blowfish extends Horde_Cipher {
  25  class Horde_Cipher_blowfish {
  26  
  27      /* Pi Array */
  28      var $p = array(
  29              0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344,
  30              0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89,
  31              0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C,
  32              0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917,
  33              0x9216D5D9, 0x8979FB1B);
  34  
  35      /* S Boxes */
  36      var $s1 = array(
  37              0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7,
  38              0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99,
  39              0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16,
  40              0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E,
  41              0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE,
  42              0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013,
  43              0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF,
  44              0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E,
  45              0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60,
  46              0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440,
  47              0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE,
  48              0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A,
  49              0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E,
  50              0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677,
  51              0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193,
  52              0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032,
  53              0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88,
  54              0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239,
  55              0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E,
  56              0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0,
  57              0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3,
  58              0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98,
  59              0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88,
  60              0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE,
  61              0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6,
  62              0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D,
  63              0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B,
  64              0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7,
  65              0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA,
  66              0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463,
  67              0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F,
  68              0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09,
  69              0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3,
  70              0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB,
  71              0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279,
  72              0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8,
  73              0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB,
  74              0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82,
  75              0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB,
  76              0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573,
  77              0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0,
  78              0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B,
  79              0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790,
  80              0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8,
  81              0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4,
  82              0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0,
  83              0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7,
  84              0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C,
  85              0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD,
  86              0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1,
  87              0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299,
  88              0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9,
  89              0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477,
  90              0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF,
  91              0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49,
  92              0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF,
  93              0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA,
  94              0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5,
  95              0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41,
  96              0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915,
  97              0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400,
  98              0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915,
  99              0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664,
 100              0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A);
 101      var $s2 = array(
 102              0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623,
 103              0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266,
 104              0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1,
 105              0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E,
 106              0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6,
 107              0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1,
 108              0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E,
 109              0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1,
 110              0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737,
 111              0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8,
 112              0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF,
 113              0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD,
 114              0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701,
 115              0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7,
 116              0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41,
 117              0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331,
 118              0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF,
 119              0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF,
 120              0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E,
 121              0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87,
 122              0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C,
 123              0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2,
 124              0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16,
 125              0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD,
 126              0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B,
 127              0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509,
 128              0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E,
 129              0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3,
 130              0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F,
 131              0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A,
 132              0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4,
 133              0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960,
 134              0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66,
 135              0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28,
 136              0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802,
 137              0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84,
 138              0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510,
 139              0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF,
 140              0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14,
 141              0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E,
 142              0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50,
 143              0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7,
 144              0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8,
 145              0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281,
 146              0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99,
 147              0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696,
 148              0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128,
 149              0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73,
 150              0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0,
 151              0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0,
 152              0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105,
 153              0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250,
 154              0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3,
 155              0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285,
 156              0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00,
 157              0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061,
 158              0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB,
 159              0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E,
 160              0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735,
 161              0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC,
 162              0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9,
 163              0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340,
 164              0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20,
 165              0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7);
 166      var $s3 = array(
 167              0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934,
 168              0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068,
 169              0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF,
 170              0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840,
 171              0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45,
 172              0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504,
 173              0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A,
 174              0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB,
 175              0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE,
 176              0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6,
 177              0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42,
 178              0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B,
 179              0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2,
 180              0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB,
 181              0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527,
 182              0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B,
 183              0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33,
 184              0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C,
 185              0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3,
 186              0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC,
 187              0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17,
 188              0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564,
 189              0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B,
 190              0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115,
 191              0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922,
 192              0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728,
 193              0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0,
 194              0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E,
 195              0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37,
 196              0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D,
 197              0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804,
 198              0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B,
 199              0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3,
 200              0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB,
 201              0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D,
 202              0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C,
 203              0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350,
 204              0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9,
 205              0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A,
 206              0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE,
 207              0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D,
 208              0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC,
 209              0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F,
 210              0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61,
 211              0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2,
 212              0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9,
 213              0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2,
 214              0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C,
 215              0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E,
 216              0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633,
 217              0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10,
 218              0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169,
 219              0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52,
 220              0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027,
 221              0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5,
 222              0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62,
 223              0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634,
 224              0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76,
 225              0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24,
 226              0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC,
 227              0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4,
 228              0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C,
 229              0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837,
 230              0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0);
 231      var $s4 = array(
 232              0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B,
 233              0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE,
 234              0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B,
 235              0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4,
 236              0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8,
 237              0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6,
 238              0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304,
 239              0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22,
 240              0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4,
 241              0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6,
 242              0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9,
 243              0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59,
 244              0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593,
 245              0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51,
 246              0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28,
 247              0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C,
 248              0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B,
 249              0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28,
 250              0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C,
 251              0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD,
 252              0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A,
 253              0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319,
 254              0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB,
 255              0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F,
 256              0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991,
 257              0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32,
 258              0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680,
 259              0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166,
 260              0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE,
 261              0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB,
 262              0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5,
 263              0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47,
 264              0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370,
 265              0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D,
 266              0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84,
 267              0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048,
 268              0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8,
 269              0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD,
 270              0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9,
 271              0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7,
 272              0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38,
 273              0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F,
 274              0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C,
 275              0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525,
 276              0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1,
 277              0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442,
 278              0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964,
 279              0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E,
 280              0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8,
 281              0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D,
 282              0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F,
 283              0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299,
 284              0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02,
 285              0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC,
 286              0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614,
 287              0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A,
 288              0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6,
 289              0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B,
 290              0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0,
 291              0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060,
 292              0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E,
 293              0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9,
 294              0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F,
 295              0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6);
 296  
 297      /* The number of rounds to do */
 298      var $_rounds = 16;
 299  
 300      /* Constructor */
 301      function Cipher_blowfish($params = null)
 302      {
 303      }
 304  
 305      /**
 306       * Set the key to be used for en/decryption
 307       *
 308       * @param String $key   The key to use
 309       */
 310      function setKey($key)
 311      {
 312          $key = $this->_formatKey($key);
 313          $keyPos = $keyXor = 0;
 314  
 315          $iMax = count($this->p);
 316          $keyLen = count($key);
 317          for ($i = 0; $i < $iMax; $i++) {
 318              for ($t = 0; $t < 4; $t++) {
 319                  $keyXor = ($keyXor << 8) | (($key[$keyPos]) & 0x0ff);
 320                  if (++$keyPos == $keyLen) {
 321                      $keyPos = 0;
 322                  }
 323              }
 324              $this->p[$i] = $this->p[$i] ^ $keyXor;
 325          }
 326  
 327          $encZero = array('L' => 0, 'R' => 0);
 328          for ($i = 0; $i + 1 < $iMax; $i += 2) {
 329            $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);
 330            $this->p[$i] = $encZero['L'];
 331            $this->p[$i + 1] = $encZero['R'];
 332          }
 333  
 334          $iMax = count($this->s1);
 335          for ($i = 0; $i < $iMax; $i += 2) {
 336            $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);
 337            $this->s1[$i] = $encZero['L'];
 338            $this->s1[$i + 1] = $encZero['R'];
 339          }
 340  
 341          $iMax = count($this->s2);
 342          for ($i = 0; $i < $iMax; $i += 2) {
 343            $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);
 344            $this->s2[$i] = $encZero['L'];
 345            $this->s2[$i + 1] = $encZero['R'];
 346          }
 347  
 348          $iMax = count($this->s3);
 349          for ($i = 0; $i < $iMax; $i += 2) {
 350            $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);
 351            $this->s3[$i] = $encZero['L'];
 352            $this->s3[$i + 1] = $encZero['R'];
 353          }
 354  
 355          $iMax = count($this->s4);
 356          for ($i = 0; $i < $iMax; $i += 2) {
 357            $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);
 358            $this->s4[$i] = $encZero['L'];
 359            $this->s4[$i + 1] = $encZero['R'];
 360          }
 361  
 362      }
 363  
 364      /**
 365       * Return the size of the blocks that this cipher needs
 366       *
 367       * @return Integer  The number of characters per block
 368       */
 369      function getBlockSize()
 370      {
 371          return 8;
 372      }
 373  
 374      /**
 375       * Encrypt a block on data.
 376       *
 377       * @param String $block         The data to encrypt
 378       * @param optional String $key  The key to use
 379       *
 380       * @return String the encrypted output
 381       */
 382      function encryptBlock($block, $key = null)
 383      {
 384          if (!is_null($key)) {
 385              $this->setKey($key);
 386          }
 387  
 388          list($L, $R) = array_values(unpack('N*', $block));
 389          $parts = $this->_encryptBlock($L, $R);
 390          return pack("NN", $parts['L'], $parts['R']);
 391      }
 392      
 393      /**
 394       * Encrypt a block on data.
 395       *
 396       * @param String $L  The data to encrypt.
 397       * @param String $R  The data to encrypt.
 398       *
 399       * @return String  The encrypted output.
 400       */
 401      function _encryptBlock($L, $R)
 402      {
 403          $L ^= $this->p[0];
 404          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[1];
 405          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[2];
 406          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[3];
 407          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[4];
 408          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[5];
 409          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[6];
 410          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[7];
 411          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[8];
 412          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[9];
 413          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[10];
 414          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[11];
 415          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[12];
 416          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[13];
 417          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[14];
 418          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[15];
 419          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[16];
 420          $R ^= $this->p[17];
 421  
 422          return array('L' => $R, 'R' => $L);
 423      }
 424  
 425      /**
 426       * Decrypt a block on data.
 427       *
 428       * @param String $block         The data to decrypt
 429       * @param optional String $key  The key to use
 430       *
 431       * @return String the decrypted output
 432       */
 433      function decryptBlock($block, $key = null)
 434      {
 435          if (!is_null($key)) {
 436              $this->setKey($key);
 437          }
 438  
 439  // change for phpMyAdmin
 440          $L = null;
 441          $R = null;
 442  
 443          $retarray = array_values(unpack('N*', $block));
 444          if(isset($retarray[0])) {
 445              $L = $retarray[0];
 446          }
 447          if(isset($retarray[1])) {
 448              $R = $retarray[1];
 449          }
 450  // end change for phpMyAdmin
 451  
 452          $L ^= $this->p[17];
 453          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[16];
 454          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[15];
 455          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[14];
 456          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[13];
 457          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[12];
 458          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[11];
 459          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[10];
 460          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[9];
 461          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[8];
 462          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[7];
 463          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[6];
 464          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[5];
 465          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[4];
 466          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[3];
 467          $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[2];
 468          $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[1];
 469  
 470          $decrypted = pack("NN", $R ^ $this->p[0], $L);
 471          return $decrypted;
 472      }
 473  
 474      /**
 475       * Converts a text key into an array.
 476       *
 477       * @return array  The key.
 478       */
 479      function _formatKey($key)
 480      {
 481          return array_values(unpack('C*', $key));
 482      }
 483  
 484  }
 485  
 486  // higher-level functions:
 487  
 488  /**
 489   * String padding
 490   *
 491   * @param   string  input string
 492   * @param   integer length of the result
 493   * @param   string  the filling string
 494   * @param   integer padding mode
 495   *
 496   * @return  string  the padded string
 497   *
 498   * @access  public
 499   */
 500  function full_str_pad($input, $pad_length, $pad_string = '', $pad_type = 0) {
 501      $str = '';
 502      $length = $pad_length - strlen($input);
 503      if ($length > 0) { // str_repeat doesn't like negatives
 504          if ($pad_type == STR_PAD_RIGHT) { // STR_PAD_RIGHT == 1
 505              $str = $input.str_repeat($pad_string, $length);
 506          } elseif ($pad_type == STR_PAD_BOTH) { // STR_PAD_BOTH == 2
 507              $str = str_repeat($pad_string, floor($length/2));
 508              $str .= $input;
 509              $str .= str_repeat($pad_string, ceil($length/2));
 510          } else { // defaults to STR_PAD_LEFT == 0
 511              $str = str_repeat($pad_string, $length).$input;
 512          }
 513      } else { // if $length is negative or zero we don't need to do anything
 514          $str = $input;
 515      }
 516      return $str;
 517  }
 518  
 519  /**
 520   * Encryption using blowfish algorithm
 521   *
 522   * @param   string  original data
 523   * @param   string  the secret
 524   *
 525   * @return  string  the encrypted result
 526   *
 527   * @access  public
 528   *
 529   * @author  lem9
 530   */
 531  function PMA_blowfish_encrypt($data, $secret) {
 532      $pma_cipher = new Horde_Cipher_blowfish;
 533      $encrypt = '';
 534      for ($i=0; $i<strlen($data); $i+=8) {
 535          $block = substr($data, $i, 8);
 536          if (strlen($block) < 8) {
 537              $block = full_str_pad($block,8,"\0", 1);
 538          }
 539          $encrypt .= $pma_cipher->encryptBlock($block, $secret);
 540      }
 541      return base64_encode($encrypt);
 542  }
 543  
 544  /**
 545   * Decryption using blowfish algorithm
 546   *
 547   * @param   string  encrypted data
 548   * @param   string  the secret
 549   *
 550   * @return  string  original data
 551   *
 552   * @access  public
 553   *
 554   * @author  lem9
 555   */
 556  function PMA_blowfish_decrypt($encdata, $secret) {
 557      $pma_cipher = new Horde_Cipher_blowfish;
 558      $decrypt = '';
 559      $data = base64_decode($encdata);
 560      for ($i=0; $i<strlen($data); $i+=8) {
 561          $decrypt .= $pma_cipher->decryptBlock(substr($data, $i, 8), $secret);
 562      }
 563      return trim($decrypt);
 564  }
 565  
 566  
 567  //Setup VIM: ex: et ts=2 enc=utf-8 :


Généré le : Tue Apr 3 20:47:31 2007 par Balluche grâce à PHPXref 0.7