You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
doushio/.Trash-1000/files/old/encryption.php

152 lines
3.1 KiB

<?php
require_once "/main.inc";
class Encryption
{
public $publicKey=null;
public $privateKey=null;
private $res=null;
private $dt=null;
private $psk=null;
private $upsk=false;
private static $sklen = 4096;
private static $config = array(
"digest_alg" => "sha512",
"private_key_bits" => 4096,
"private_key_type"=> OPENSSL_KEYTYPE_RSA,
);
private function generateNewSymmetricKey()
{
return openssl_random_pseudo_bytes(self::$sklen);
}
private function _begin($prec)
{
$this->res = openssl_pkey_new(self::$config);
openssl_pkey_export($this->res, $this->publicKey);
$this->dt=openssl_pkey_get_details($this->res);
$this->publicKey=$this->dt["key"];
if($prec)
{
$this->upsk = true;
$this->psk = generateNewSymmetricKey();
}
}
public function __construct()
{
$this->_begin(false);
}
public function __construct1($p)
{
$this->_begin($p);
}
private function s_decrypt($data, $key)
{
return s_encrypt($data, $key); //same;
}
private function s_encrypt($data, $key)
{
$j=0;
$out = "";
for($i=0;$i<strlen($data);$i++)
{
if($j>=strlen($key)) $j=0;
$out .= ($data[$i] ^ $key[$j]);
$j+=1;
}
return $out;
}
public function encrypt($data)
{
$skey = ($this->upsk?$this->psk:$this->generateNewSymmetricKey());
$e_skey = null;
openssl_public_encrypt($skey, $e_skey, $this->publicKey);
$e_data = $this->s_encrypt($data, $skey);
return CreateFromEncryption(array("ekey"=>$e_skey, "edata"=>$e_data));
}
public function decrypt(EncryptedData $ed)
{
$ekey = $ed->e_symmetricKey();
$edata = $ed->e_data();
$skey = null;
openssl_private_decrypt($ekey, $skey, $this->privateKey);
return $this->s_decrypt($edata, $skey);
}
public function encdata_create($data)
{
return EncryptedData::CreateFromData($data);
}
}
class EncryptedData
{
private $ekey=null;
private $edata=null;
private function __construct(Array $data)
{
$this->ekey = $data["ekey"];
$this->edata = $data["edata"];
}
public function __construct1($ek, $ed)
{
$this->ekey = $ek;
$this->edata = $ed;
}
private function __construct2()
{
}
public function binaryData($set=null)
{
if($set==null) {
return "{".strlen($this->ekey).", ".strlen($this->edata)."}".$this->ekey.$this->edata;
}
else
{
$kvals = explode(", ", substr(substr($set, 0, strpos($set, "}")), 1));
$klen = intval($kvals[0]);
$dlen = intval($kvals[1]);
$this->ekey = substr($set, strpos($set, "}")+1, $klen);
$this->edata = substr($set, strpos($set, "}")+1+$klen, $dlen);
}
}
public function e_symmetricKey($val=null)
{
if($val==null) {
return $this->ekey;
}
else
{
$this->ekey = $val;
}
}
public function e_data($val=null)
{
if($val==null) {
return $this->edata;
}
else
{
$this->edata = $val;
}
}
public static function CreateFromData($data)
{
$val = new EncryptedData();
$val->binaryData($data);
return $val;
}
public static function CreateFromEncryption(Array $data)
{
return new EncryptedData($data);
}
}
?>