Skip to content

qnibus/seed128

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

11 Commits
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Seed128 + CBC + PKCS5

SEEDλŠ” ν•œκ΅­μΈν„°λ„·μ§„ν₯μ›μ—μ„œ 순수 κ΅­λ‚΄κΈ°μˆ λ‘œ 개발된 μ•”ν˜Έν™” μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€. 이λ₯Ό PHP용으둜 μ „ν™˜ν•΄μ£Όμ‹  mibanyλ‹˜κ»˜ κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€. μ €λŠ” 이λ₯Ό μ΄μš©ν•΄ CBC λͺ¨λ“œλ‘œ μš΄μš©ν•  수 μžˆλŠ” ν΄λž˜μŠ€μ™€ 64bit ν™˜κ²½μ—μ„œ μž‘λ™λ˜λ„λ‘ μ—…λ°μ΄νŠΈν•˜μ˜€μŠ΅λ‹ˆλ‹€. 검색을 ν•΄λ³΄λ‹ˆ μ΄λ ‡κ²Œ κ΅¬ν˜„ν•˜κ³ μž ν•˜μ‹œλŠ”λΆ„λ“€μ΄ κ³„μ‹œλŠ” 것 같은데 곡개된 μ†ŒμŠ€μ½”λ“œλŠ” μ—†λŠ” 것 κ°™μ•„μ„œ 저같이 κ³ μƒν•˜μ§€ λ§ˆμ‹œλΌκ³  κ³΅κ°œν•˜μ˜€λ‹ˆ μš”κΈ΄ν•˜κ²Œ μ‚¬μš©ν•˜μ‹œκΈ° λ°”λžλ‹ˆλ‹€.

  • x86/x64 ν”Œλž«νΌ 지원
  • CBC(Cipher-block chaining) 운영λͺ¨λ“œ 지원
  • EUC-KR, UTF-8 λ¬Έμžμ…‹ 지원

====================

Ready

Seed μ•”ν˜Έν™” μ•Œκ³ λ¦¬μ¦˜ PHP둜 κ΅¬ν˜„ λ¬Έμ„œ μ°Έμ‘°

  1. μœ„ λ§ν¬μ—μ„œ class.seed.phpλ₯Ό λ‹€μš΄λ‘œλ“œ ν•©λ‹ˆλ‹€.
  2. class.seed.phpλ‚΄ EncRoundKeyUpdate1 ν•¨μˆ˜λ₯Ό λ‹€μŒκ³Ό 같이 λ³€κ²½ν•©λ‹ˆλ‹€.
  3. λ³€κ²½ν•  class.seed.php νŒŒμΌμ„ class.crypto.php 파일과 ν•¨κ»˜ μ›ν•˜λŠ” 곳으둜 μ—…λ‘œλ“œν•©λ‹ˆλ‹€.
  4. 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; 
	} 
}

====================

Demo

μ•„λž˜μ™€ 같이 μ•”ν˜Έν™” ν˜Ήμ€ λ³΅ν˜Έν™”λ₯Ό μ›ν•˜λŠ” 곳에 λ„£μ–΄μ„œ μ‚¬μš©ν•˜μ„Έμš”! μ‹€ν–‰ μ˜ˆμ œλŠ” μ—¬κΈ°λ₯Ό ν΄λ¦­ν•˜μ‹œλ©΄ 보싀 수 μžˆμŠ΅λ‹ˆλ‹€.

<?php
include 'class.crypto.php';
$crypto = new Crypto();
echo $crypto->encrypt('μ—¬κΈ°λŠ” μ•ˆλ°˜μž₯의 개발 λ…ΈνŠΈμž…λ‹ˆλ‹€');
echo $crypto->decrypt('856ac21e3960225b3e6bf39b084279312485e58b578de7d1d418f6128111a341');
?>

About

Seed128 + CBC + PKCS5 for PHP

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages