SEEDλ νκ΅μΈν°λ·μ§ν₯μμμ μμ κ΅λ΄κΈ°μ λ‘ κ°λ°λ μνΈν μκ³ λ¦¬μ¦μ λλ€. μ΄λ₯Ό PHPμ©μΌλ‘ μ νν΄μ£Όμ mibanyλκ» κ°μ¬λ립λλ€. μ λ μ΄λ₯Ό μ΄μ©ν΄ CBC λͺ¨λλ‘ μ΄μ©ν μ μλ ν΄λμ€μ 64bit νκ²½μμ μλλλλ‘ μ λ°μ΄νΈνμμ΅λλ€. κ²μμ ν΄λ³΄λ μ΄λ κ² κ΅¬ννκ³ μ νμλλΆλ€μ΄ κ³μλ κ² κ°μλ° κ³΅κ°λ μμ€μ½λλ μλ κ² κ°μμ μ κ°μ΄ κ³ μνμ§ λ§μλΌκ³ 곡κ°νμ€λ μκΈ΄νκ² μ¬μ©νμκΈ° λ°λλλ€.
- x86/x64 νλ«νΌ μ§μ
- CBC(Cipher-block chaining) μ΄μλͺ¨λ μ§μ
- EUC-KR, UTF-8 λ¬Έμμ μ§μ
====================
Seed μνΈν μκ³ λ¦¬μ¦ PHPλ‘ κ΅¬ν λ¬Έμ μ°Έμ‘°
- μ λ§ν¬μμ class.seed.phpλ₯Ό λ€μ΄λ‘λ ν©λλ€.
class.seed.php
λ΄EncRoundKeyUpdate1
ν¨μλ₯Ό λ€μκ³Ό κ°μ΄ λ³κ²½ν©λλ€.- λ³κ²½ν
class.seed.php
νμΌμclass.crypto.php
νμΌκ³Ό ν¨κ» μνλ κ³³μΌλ‘ μ λ‘λν©λλ€. class.crypto.php
λ₯Όinclude
ν΄μ μ¬μ©νμλ©΄ λ©λλ€.
private function EncRoundKeyUpdate1(&$K = array(), &$A, &$B, &$C, &$D, $Z) { $T0 = $C; $C = ( $C << 8 ) ^ ( $D >> 24 & 0x000000ff ); $D = ( $D << 8 ) ^ ( $T0 >> 24 & 0x000000ff ); $T00 = (int) $A + (int) $C - (int) $this->KC[$Z]; $T00 = $this->ConvertInt($T00); $T11 = (int) $B + (int) $this->KC[$Z] - (int) $D; $T11 = $this->ConvertInt($T11); $K[0] = $this->SS0[$this->GetB0($T00)] ^ $this->SS1[$this->GetB1($T00)] ^ $this->SS2[$this->GetB2($T00)] ^ $this->SS3[$this->GetB3($T00)]; $K[1] = $this->SS0[$this->GetB0($T11)] ^ $this->SS1[$this->GetB1($T11)] ^ $this->SS2[$this->GetB2($T11)] ^ $this->SS3[$this->GetB3($T11)]; // 64bitμμ μ μμ μΈ κ°μ λ°μνλλ‘ μΆκ° $C = (int) $C; if(PHP_INT_SIZE > 4) { $C = $C << 32; $C = $C >> 32; } $D = (int) $D; if(PHP_INT_SIZE > 4) { $D = $D << 32; $D = $D >> 32; } $K[0] = (int) $K[0]; if(PHP_INT_SIZE > 4) { $K[0] = $K[0] << 32; $K[0] = $K[0] >> 32; } $K[1] = (int) $K[1]; if(PHP_INT_SIZE > 4) { $K[1] = $K[1] << 32; $K[1] = $K[1] >> 32; } }
====================
μλμ κ°μ΄ μνΈν νΉμ 볡νΈνλ₯Ό μνλ κ³³μ λ£μ΄μ μ¬μ©νμΈμ! μ€ν μμ λ μ¬κΈ°λ₯Ό ν΄λ¦νμλ©΄ λ³΄μ€ μ μμ΅λλ€.
<?php include 'class.crypto.php'; $crypto = new Crypto(); echo $crypto->encrypt('μ¬κΈ°λ μλ°μ₯μ κ°λ° λ ΈνΈμ λλ€'); echo $crypto->decrypt('856ac21e3960225b3e6bf39b084279312485e58b578de7d1d418f6128111a341'); ?>