PHP-NumberBaseCrypt/src/class.NumberBaseCryptCollec...

146 lines
4.3 KiB
PHP
Raw Normal View History

<?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 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<$digitList;$i++) {
$numberBaseCrypt = new NumberBaseCrypt($digitList[$i]);
$len = substr($data, 0, 1);
$len = $numberBaseCrypt->baseToBase10($len);
$data = substr($data, 1);
if($len <= strlen($data)) {
$tmp = substr($data, 0, $len);
$cd[] = $numberBaseCrypt->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;
}
}