<?php
// Define the Polynomial class
class Polynomial {
public $coefficients ;
public function __construct( $coefficients ) {
$this -> coefficients = is_array ( $coefficients ) ?
$coefficients : [ ] ; }
public function order( ) {
return count ( $this -> coefficients ) - 1 ; }
public function evaluate( $x ) {
$result = 0 ;
foreach ( $this -> coefficients as $power => $coefficient ) {
$result += $coefficient * pow ( $x , $power ) ; }
return $result ;
}
}
// Define the LagrangeInterpolation class
class LagrangeInterpolation {
private $x ;
private $y ;
public function __construct( $x , $y ) {
$this -> x = $x ;
$this -> y = $y ;
}
public function evaluate( $x ) {
$result = 0 ;
for ( $i = 0 ; $i < $n ; $i ++ ) {
$term = $this -> y [ $i ] ;
for ( $j = 0 ; $j < $n ; $j ++ ) {
if ( $j != $i ) {
$term *= ( $x - $this -> x [ $j ] ) / ( $this -> x [ $i ] - $this -> x [ $j ] ) ;
}
}
$result += $term ;
}
return $result ;
}
}
function root_finding_initial_values( $f ) {
// Sample coefficients for Polynomial for demonstration
$poly1 = new Polynomial( [ 1 , - 1 ] ) ; // Example polynomial x - 1
$degree1 = $poly1 -> order ( ) ;
if ( 1 <= $degree1 && $degree1 < 10 ) {
$nth_root = $degree1 / 2 ;
} elseif ( 10 <= $degree1 && $degree1 <= 15 ) {
$nth_root = $degree1 / 3 ;
} else {
$nth_root = $degree1 ;
}
$constant = abs ( $poly1 -> evaluate ( 0 ) ) ; $constant_nth_root = pow ( $constant , 1 / $nth_root ) ; $initial_one_false_position = - round ( $constant_nth_root ) ; $initial_two_false_position = round ( $constant_nth_root ) ;
return [ $initial_one_false_position , $initial_two_false_position ] ;
}
function hybrid_method( $f , $a , $b , $tol = 1e-6 , $max_iter = 100000 ) {
$a1 = $a ;
$a2 = $a ;
$b1 = $b ;
$b2 = $b ;
for ( $i = 0 ; $i < $max_iter ; $i ++ ) {
$xT1 = ( $b + 2 * $a ) / 3 ;
$xT2 = ( 2 * $b + $a ) / 3 ;
$fa = $f ( $a ) ;
$fb = $f ( $b ) ;
if ( $fb - $fa == 0 ) {
throw new Exception( "Division by zero in false position calculation" ) ;
}
$xF = $a - ( $fa * ( $b - $a ) ) / ( $fb - $fa ) ;
$x = $xT1 ;
if ( abs ( $f ( $xT2 ) ) < abs ( $f ( $x ) ) ) { $x = $xT2 ;
}
if ( abs ( $f ( $xF ) ) < abs ( $f ( $x ) ) ) { $x = $xF ;
}
if ( abs ( $f ( $x ) ) <= $tol ) { $execution_time = $end_time - $start_time ;
return [ $x , $f ( $x ) , $i , $execution_time , $a , $b ] ;
}
if ( $fa * $f ( $xT1 ) < 0 ) {
$b1 = $xT1 ;
} elseif ( $f ( $xT1 ) * $f ( $xT2 ) < 0 ) {
$a1 = $xT1 ;
$b1 = $xT2 ;
} else {
$a1 = $xT2 ;
}
if ( $fa * $f ( $xF ) < 0 ) {
$b2 = $xF ;
} else {
$a2 = $xF ;
}
}
throw new Exception( "Hybrid method did not converge within the maximum number of iterations" ) ;
}
// Generate random text of a specific length
$length = 80 ;
$random_text = '' ;
for ( $i = 0 ; $i < $length ; $i ++ ) {
$random_text .= $characters [ array_rand ( $characters ) ] ; }
// Encode the plaintext using UTF-8 encoding
// Convert the bytes to a list of integers representing the individual byte values
// Randomly select an odd degree between 1 and 9
// Generate randomised polynomial through Lagrange Interpolation
$x = range ( 1 , $degree + 2 ) ; // x values for interpolation $y = array_slice ( $digits , 0 , $degree + 2 ) ; // y values for interpolation $poly = new LagrangeInterpolation( $x , $y ) ;
// Generate scrambled polynomial
$f = function ( $x ) use ( $poly , $digits ) {
return $poly -> evaluate ( $x ) - $digits [ 0 ] ;
} ;
// Guess initial values using root_finding_initial_values function
list ( $init_a , $init_b ) = root_finding_initial_values
( $f ) ;
try {
// Apply the Hybrid method
list ( $x , $fx , $i , $execution_time , $a , $b ) = hybrid_method
( $f , $init_a , $init_b ) ;
function encrypt_file( $file_path , $key , $iv ) {
$cipher = "aes-256-cfb8" ;
$ciphertext = openssl_encrypt( $plaintext , $cipher , $key , OPENSSL_RAW_DATA, $iv ) ;
}
$key = ( string
) round ( $x , 0 ) ; $iv = openssl_random_pseudo_bytes( 16 ) ;
$file_path = "Data.txt" ;
encrypt_file( $file_path , $key , $iv ) ;
echo "key: " . $key . "\n " ;
} catch ( Exception $e ) {
echo 'Error: ' . $e -> getMessage ( ) ;
}
?>
PD9waHAKCi8vIERlZmluZSB0aGUgUG9seW5vbWlhbCBjbGFzcwpjbGFzcyBQb2x5bm9taWFsIHsKICAgIHB1YmxpYyAkY29lZmZpY2llbnRzOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkY29lZmZpY2llbnRzKSB7CiAgICAgICAgJHRoaXMtPmNvZWZmaWNpZW50cyA9IGlzX2FycmF5KCRjb2VmZmljaWVudHMpID8gJGNvZWZmaWNpZW50cyA6IFtdOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBvcmRlcigpIHsKICAgICAgICByZXR1cm4gY291bnQoJHRoaXMtPmNvZWZmaWNpZW50cykgLSAxOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBldmFsdWF0ZSgkeCkgewogICAgICAgICRyZXN1bHQgPSAwOwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5jb2VmZmljaWVudHMgYXMgJHBvd2VyID0+ICRjb2VmZmljaWVudCkgewogICAgICAgICAgICAkcmVzdWx0ICs9ICRjb2VmZmljaWVudCAqIHBvdygkeCwgJHBvd2VyKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9Cn0KCi8vIERlZmluZSB0aGUgTGFncmFuZ2VJbnRlcnBvbGF0aW9uIGNsYXNzCmNsYXNzIExhZ3JhbmdlSW50ZXJwb2xhdGlvbiB7CiAgICBwcml2YXRlICR4OwogICAgcHJpdmF0ZSAkeTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHgsICR5KSB7CiAgICAgICAgJHRoaXMtPnggPSAkeDsKICAgICAgICAkdGhpcy0+eSA9ICR5OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBldmFsdWF0ZSgkeCkgewogICAgICAgICRuID0gY291bnQoJHRoaXMtPngpOwogICAgICAgICRyZXN1bHQgPSAwOwogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRuOyAkaSsrKSB7CiAgICAgICAgICAgICR0ZXJtID0gJHRoaXMtPnlbJGldOwogICAgICAgICAgICBmb3IgKCRqID0gMDsgJGogPCAkbjsgJGorKykgewogICAgICAgICAgICAgICAgaWYgKCRqICE9ICRpKSB7CiAgICAgICAgICAgICAgICAgICAgJHRlcm0gKj0gKCR4IC0gJHRoaXMtPnhbJGpdKSAvICgkdGhpcy0+eFskaV0gLSAkdGhpcy0+eFskal0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZXN1bHQgKz0gJHRlcm07CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQp9CgpmdW5jdGlvbiByb290X2ZpbmRpbmdfaW5pdGlhbF92YWx1ZXMoJGYpIHsKICAgIC8vIFNhbXBsZSBjb2VmZmljaWVudHMgZm9yIFBvbHlub21pYWwgZm9yIGRlbW9uc3RyYXRpb24KICAgICRwb2x5MSA9IG5ldyBQb2x5bm9taWFsKFsxLCAtMV0pOyAvLyBFeGFtcGxlIHBvbHlub21pYWwgeCAtIDEKICAgICRkZWdyZWUxID0gJHBvbHkxLT5vcmRlcigpOwoKICAgIGlmICgxIDw9ICRkZWdyZWUxICYmICRkZWdyZWUxIDwgMTApIHsKICAgICAgICAkbnRoX3Jvb3QgPSAkZGVncmVlMSAvIDI7CiAgICB9IGVsc2VpZiAoMTAgPD0gJGRlZ3JlZTEgJiYgJGRlZ3JlZTEgPD0gMTUpIHsKICAgICAgICAkbnRoX3Jvb3QgPSAkZGVncmVlMSAvIDM7CiAgICB9IGVsc2UgewogICAgICAgICRudGhfcm9vdCA9ICRkZWdyZWUxOwogICAgfQoKICAgICRjb25zdGFudCA9IGFicygkcG9seTEtPmV2YWx1YXRlKDApKTsKICAgICRjb25zdGFudF9udGhfcm9vdCA9IHBvdygkY29uc3RhbnQsIDEgLyAkbnRoX3Jvb3QpOwogICAgJGluaXRpYWxfb25lX2ZhbHNlX3Bvc2l0aW9uID0gLXJvdW5kKCRjb25zdGFudF9udGhfcm9vdCk7CiAgICAkaW5pdGlhbF90d29fZmFsc2VfcG9zaXRpb24gPSByb3VuZCgkY29uc3RhbnRfbnRoX3Jvb3QpOwogICAgCiAgICByZXR1cm4gWyRpbml0aWFsX29uZV9mYWxzZV9wb3NpdGlvbiwgJGluaXRpYWxfdHdvX2ZhbHNlX3Bvc2l0aW9uXTsKfQoKZnVuY3Rpb24gaHlicmlkX21ldGhvZCgkZiwgJGEsICRiLCAkdG9sPTFlLTYsICRtYXhfaXRlcj0xMDAwMDApIHsKICAgICRzdGFydF90aW1lID0gdGltZSgpOwogICAgJGExID0gJGE7CiAgICAkYTIgPSAkYTsKICAgICRiMSA9ICRiOwogICAgJGIyID0gJGI7CiAgICBmb3IgKCRpID0gMDsgJGkgPCAkbWF4X2l0ZXI7ICRpKyspIHsKICAgICAgICAkeFQxID0gKCRiICsgMiokYSkgLyAzOwogICAgICAgICR4VDIgPSAoMiokYiArICRhKSAvIDM7CiAgICAgICAgJGZhID0gJGYoJGEpOwogICAgICAgICRmYiA9ICRmKCRiKTsKICAgICAgICAKICAgICAgICBpZiAoJGZiIC0gJGZhID09IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiRGl2aXNpb24gYnkgemVybyBpbiBmYWxzZSBwb3NpdGlvbiBjYWxjdWxhdGlvbiIpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAkeEYgPSAkYSAtICgkZmEgKiAoJGIgLSAkYSkpIC8gKCRmYiAtICRmYSk7CiAgICAgICAgJHggPSAkeFQxOwogICAgICAgIAogICAgICAgIGlmIChhYnMoJGYoJHhUMikpIDwgYWJzKCRmKCR4KSkpIHsKICAgICAgICAgICAgJHggPSAkeFQyOwogICAgICAgIH0KICAgICAgICBpZiAoYWJzKCRmKCR4RikpIDwgYWJzKCRmKCR4KSkpIHsKICAgICAgICAgICAgJHggPSAkeEY7CiAgICAgICAgfQogICAgICAgIGlmIChhYnMoJGYoJHgpKSA8PSAkdG9sKSB7CiAgICAgICAgICAgICRlbmRfdGltZSA9IHRpbWUoKTsKICAgICAgICAgICAgJGV4ZWN1dGlvbl90aW1lID0gJGVuZF90aW1lIC0gJHN0YXJ0X3RpbWU7CiAgICAgICAgICAgIHJldHVybiBbJHgsICRmKCR4KSwgJGksICRleGVjdXRpb25fdGltZSwgJGEsICRiXTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKCRmYSAqICRmKCR4VDEpIDwgMCkgewogICAgICAgICAgICAkYjEgPSAkeFQxOwogICAgICAgIH0gZWxzZWlmICgkZigkeFQxKSAqICRmKCR4VDIpIDwgMCkgewogICAgICAgICAgICAkYTEgPSAkeFQxOwogICAgICAgICAgICAkYjEgPSAkeFQyOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRhMSA9ICR4VDI7CiAgICAgICAgfQogICAgICAgIGlmICgkZmEgKiAkZigkeEYpIDwgMCkgewogICAgICAgICAgICAkYjIgPSAkeEY7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGEyID0gJHhGOwogICAgICAgIH0KICAgICAgICAkYSA9IG1heCgkYTEsICRhMik7CiAgICAgICAgJGIgPSBtaW4oJGIxLCAkYjIpOwogICAgfQogICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiSHlicmlkIG1ldGhvZCBkaWQgbm90IGNvbnZlcmdlIHdpdGhpbiB0aGUgbWF4aW11bSBudW1iZXIgb2YgaXRlcmF0aW9ucyIpOwp9CgovLyBHZW5lcmF0ZSByYW5kb20gdGV4dCBvZiBhIHNwZWNpZmljIGxlbmd0aAokbGVuZ3RoID0gODA7CiRyYW5kb21fdGV4dCA9ICcnOwokY2hhcmFjdGVycyA9IGFycmF5X21lcmdlKHJhbmdlKCdhJywgJ3onKSwgcmFuZ2UoJ0EnLCAnWicpLCByYW5nZSgwLCA5KSwgc3RyX3NwbGl0KCchQCMkJV4mKigpJykpOwpmb3IgKCRpID0gMDsgJGkgPCAkbGVuZ3RoOyAkaSsrKSB7CiAgICAkcmFuZG9tX3RleHQgLj0gJGNoYXJhY3RlcnNbYXJyYXlfcmFuZCgkY2hhcmFjdGVycyldOwp9CgovLyBFbmNvZGUgdGhlIHBsYWludGV4dCB1c2luZyBVVEYtOCBlbmNvZGluZwokcGxhaW5fYnl0ZXMgPSB1dGY4X2VuY29kZSgkcmFuZG9tX3RleHQpOwoKLy8gQ29udmVydCB0aGUgYnl0ZXMgdG8gYSBsaXN0IG9mIGludGVnZXJzIHJlcHJlc2VudGluZyB0aGUgaW5kaXZpZHVhbCBieXRlIHZhbHVlcwokZGlnaXRzID0gYXJyYXlfbWFwKCdvcmQnLCBzdHJfc3BsaXQoJHBsYWluX2J5dGVzKSk7CgovLyBSYW5kb21seSBzZWxlY3QgYW4gb2RkIGRlZ3JlZSBiZXR3ZWVuIDEgYW5kIDkKJGRlZ3JlZSA9IHJhbmQoMSwgOSk7CgovLyBHZW5lcmF0ZSByYW5kb21pc2VkIHBvbHlub21pYWwgdGhyb3VnaCBMYWdyYW5nZSBJbnRlcnBvbGF0aW9uCiR4ID0gcmFuZ2UoMSwgJGRlZ3JlZSArIDIpOyAgLy8geCB2YWx1ZXMgZm9yIGludGVycG9sYXRpb24KJHkgPSBhcnJheV9zbGljZSgkZGlnaXRzLCAwLCAkZGVncmVlICsgMik7ICAvLyB5IHZhbHVlcyBmb3IgaW50ZXJwb2xhdGlvbgokcG9seSA9IG5ldyBMYWdyYW5nZUludGVycG9sYXRpb24oJHgsICR5KTsKCi8vIEdlbmVyYXRlIHNjcmFtYmxlZCBwb2x5bm9taWFsCiRmID0gZnVuY3Rpb24oJHgpIHVzZSAoJHBvbHksICRkaWdpdHMpIHsKICAgIHJldHVybiAkcG9seS0+ZXZhbHVhdGUoJHgpIC0gJGRpZ2l0c1swXTsKfTsKCi8vIEd1ZXNzIGluaXRpYWwgdmFsdWVzIHVzaW5nIHJvb3RfZmluZGluZ19pbml0aWFsX3ZhbHVlcyBmdW5jdGlvbgpsaXN0KCRpbml0X2EsICRpbml0X2IpID0gcm9vdF9maW5kaW5nX2luaXRpYWxfdmFsdWVzKCRmKTsKCnRyeSB7CiAgICAvLyBBcHBseSB0aGUgSHlicmlkIG1ldGhvZAogICAgbGlzdCgkeCwgJGZ4LCAkaSwgJGV4ZWN1dGlvbl90aW1lLCAkYSwgJGIpID0gaHlicmlkX21ldGhvZCgkZiwgJGluaXRfYSwgJGluaXRfYik7CgogICAgZnVuY3Rpb24gZW5jcnlwdF9maWxlKCRmaWxlX3BhdGgsICRrZXksICRpdikgewogICAgICAgICRwbGFpbnRleHQgPSBmaWxlX2dldF9jb250ZW50cygkZmlsZV9wYXRoKTsKICAgICAgICAkY2lwaGVyID0gImFlcy0yNTYtY2ZiOCI7CiAgICAgICAgJGNpcGhlcnRleHQgPSBvcGVuc3NsX2VuY3J5cHQoJHBsYWludGV4dCwgJGNpcGhlciwgJGtleSwgT1BFTlNTTF9SQVdfREFUQSwgJGl2KTsKICAgIAogICAgICAgIGZpbGVfcHV0X2NvbnRlbnRzKCRmaWxlX3BhdGggLiAnLmVuYycsICRjaXBoZXJ0ZXh0KTsKICAgIH0KCiAgICAka2V5ID0gKHN0cmluZykgcm91bmQoJHgsIDApOwogICAgJGl2ID0gb3BlbnNzbF9yYW5kb21fcHNldWRvX2J5dGVzKDE2KTsKICAgICRmaWxlX3BhdGggPSAiRGF0YS50eHQiOwogICAgZW5jcnlwdF9maWxlKCRmaWxlX3BhdGgsICRrZXksICRpdik7CiAgICBlY2hvICJrZXk6ICIgLiAka2V5IC4gIlxuIjsKICAgIGVjaG8gIml2OiAiIC4gYmluMmhleCgkaXYpOyAKfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CiAgICBlY2hvICdFcnJvcjogJyAuICRlLT5nZXRNZXNzYWdlKCk7Cn0KCj8+Cg==