154 lines
4.5 KiB
PHP
154 lines
4.5 KiB
PHP
<?php
|
|
|
|
namespace NAE\Crypt;
|
|
|
|
/**
|
|
* Klasse um Kryptografie als Basis-Konvertierung für eine Datensammlung zu implementieren.
|
|
* @package NAE\Crypt
|
|
* @author <Marcel Naeve> <php@naeve.info>
|
|
*/
|
|
class NumberBaseCryptCollection extends NumberBaseCrypt {
|
|
|
|
/**
|
|
* Hält die Digits in einem Array aus Digit-Arrays
|
|
* @var array digitList
|
|
*/
|
|
protected $digitList = [];
|
|
|
|
/**
|
|
* Hält die Werte in einem Array
|
|
* @var array dataList
|
|
*/
|
|
protected $dataList = [];
|
|
|
|
/**
|
|
* Eine Dezimalnummer zur Collection hinzufügen.
|
|
* @param int $value Dezimalnummer
|
|
* @return NumberBaseCryptCollection $this
|
|
*/
|
|
public function addData(int $value) : NumberBaseCryptCollection {
|
|
$this->shuffleDigits();
|
|
$this->digitList[] = $this->getDigits();
|
|
$this->dataList[] = $value;
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Abfrage der Hinterlegten Daten (plain) in Array.
|
|
* @return array Hinterlegten Daten (plain)
|
|
*/
|
|
public function getPlainData() : array {
|
|
return $this->dataList;
|
|
}
|
|
|
|
/**
|
|
* Abfrage der Listen der Digits in einem Mehrdimensionalen Array
|
|
* @return array Listen der Digits
|
|
*/
|
|
public function getDigitList() {
|
|
return $this->digitList;
|
|
}
|
|
|
|
/**
|
|
* Abfrage der Listen der Digits in einem String Seperiert durch Leerzeichen
|
|
* @return string Liste der Digits in einem String Seperiert durch Leerzeichen
|
|
*/
|
|
public function getDigitListAsString() {
|
|
return implode(' ', $this->digitList);
|
|
}
|
|
|
|
/**
|
|
* Rendern der Sammlung als einfach kryptografischen String.
|
|
* @return string Sammlung als einfach kryptografischer String.
|
|
*/
|
|
public function render() : string {
|
|
$cd = [];
|
|
for($i=0;$i<count($this->dataList);$i++) {
|
|
$cd[] = $this->addLength($this->base10ToBase($this->dataList[$i]));
|
|
}
|
|
return implode('', $cd);
|
|
}
|
|
|
|
/**
|
|
* Rendern der Sammlung als komplex kryptografischen String.
|
|
* @return string Sammlung als komplex kryptografischer String.
|
|
*/
|
|
public function renderComplex() : string {
|
|
$cd = [];
|
|
for($i=0;$i<count($this->dataList);$i++) {
|
|
$this->setDigits($this->digitList[$i]);
|
|
$cd[] = $this->addLength($this->base10ToBase($this->dataList[$i]));
|
|
}
|
|
return implode('', $cd);
|
|
}
|
|
|
|
/**
|
|
* Entschlüsseln der Sammlung aus einem einfach kryptografischen String.
|
|
* @param string $data Sammlung als einfach kryptografischer String
|
|
* @param array $digits Liste der digits
|
|
* @return array Plain Sammlung als Array
|
|
*/
|
|
public function decrypt(string $data, array $digits) : array {
|
|
$this->setDigits($digits);
|
|
$cd = [];
|
|
$len = 0;
|
|
while(strlen($data) > 0) {
|
|
$len = substr($data, 0, 1);
|
|
$len = $this->baseToBase10($len);
|
|
$data = substr($data, 1);
|
|
|
|
if($len <= strlen($data)) {
|
|
$tmp = substr($data, 0, $len);
|
|
$data = substr($data, $len);
|
|
|
|
$cd[] = $this->baseToBase10($tmp);
|
|
}
|
|
}
|
|
return $cd;
|
|
}
|
|
|
|
/**
|
|
* Entschlüsseln der Sammlung aus einem komplex kryptografischen String.
|
|
* @param string $data Sammlung als komplex kryptografischer String
|
|
* @param array $digits Mehrdimensinale Liste der digits als mehrdimensionales Array.
|
|
* @return array Plain Sammlung als Array
|
|
*/
|
|
public function decryptComplex(string $data, array $digitList) : array {
|
|
$cd = [];
|
|
for($i=0;$i<count($digitList);$i++) {
|
|
$this->setDigits($digitList[$i]);
|
|
|
|
$len = substr($data, 0, 1);
|
|
$len = $this->baseToBase10($len);
|
|
$data = substr($data, 1);
|
|
|
|
if($len <= strlen($data)) {
|
|
$tmp = substr($data, 0, $len);
|
|
$cd[] = $this->baseToBase10($tmp);
|
|
$data = substr($data, $len);
|
|
}
|
|
}
|
|
return $cd;
|
|
}
|
|
|
|
/**
|
|
* Umwandeln einer Liste von Digit-Sets seperiert durch Leerzeichen von String zu einem Mehrdimensionalen Array.
|
|
* @param string $digitList enthält Digit-Sets seperiert durch Leerzeichen
|
|
* @return array Mehrdimensionales Array mit Digit-Sets (Array)
|
|
*/
|
|
public function digitListFromString(string $digitList) : array {
|
|
$data = explode(' ', $digitList);
|
|
$cd = [];
|
|
foreach($data as $digits) {
|
|
$cd[] = str_split($digits, 1);
|
|
}
|
|
return $cd;
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|