1KA_F2F/main/survey/class.EvalvacijaMain.php

653 lines
24 KiB
PHP

<?php
//include_once('../../function.php');
class EvalvacijaMain {
// Izvedba ustrezne kontrole za prijavo
public static function studentCheck($ank_type){
$student = $_REQUEST['student'];
// Anketa PRED in PO
if($ank_type == 'anketa_pred' || $ank_type == 'anketa_po'){
$predmeti_string = $_REQUEST['predmeti'];
$predmeti = explode('x', $predmeti_string);
$predmeti = array_map('intval', $predmeti);
$check = self::check_prijava($ank_type, $student, $predmeti);
$output = array();
$output['student'] = $student;
$output['prijava'] = $check['prijava'];
$output['msg'] = $check['msg'];
$output['predmeti_reseni'] = $check['predmeti_reseni'];
$output['predmeti_nereseni'] = $check['predmeti_nereseni'];
}
// SPLOSNA in PODIPLOMSKA anketa
else{
$check = self::check_prijava($ank_type, $student);
$output = array();
$output['student'] = $student;
$output['prijava'] = $check['prijava'];
$output['msg'] = $check['msg'];
}
// Vrnemo JSON odgovor
echo json_encode($output, JSON_UNESCAPED_SLASHES);
}
// Preverimo ce se student lahko prijavi (na izpit oz. v visji letnik - ce je izpolnil ustrezne ankete)
private static function check_prijava($ank_type, $student, $predmeti=array()){
// Preberemo podatke o studentu (da lahko zlepimo nacim studija s predmetom)
if($ank_type == 'anketa_pred' || $ank_type == 'anketa_po'){
$return = array();
$return['prijava'] = true;
$return['msg'] = '';
$return['predmeti_nereseni'] = '';
$return['predmeti_reseni'] = '';
$sqlStudent = sisplet_query("SELECT * FROM eval_student WHERE id_student='$student'");
}
elseif($ank_type == 'anketa_splosna'){
$return = array();
$return['prijava'] = true;
$return['msg'] = '';
$sqlStudent = sisplet_query("SELECT * FROM eval_student WHERE id_student='$student'");
}
else{
$return = array();
$return['prijava'] = true;
$return['msg'] = '';
$sqlStudent = sisplet_query("SELECT * FROM eval_student_podipl WHERE id_student='$student'");
}
// Ce nimamo fakultete oz. ni aktivirana, vedno dovolimo prijavo (vrnemo da je student vse resil)
$fakulteta = isset($_REQUEST['fakulteta']) ? $_REQUEST['fakulteta'] : 0;
$fak_active = self::getFaksData($fakulteta, 'active');
// Ce imamo studenta v bazi pustimo naprej preverjanje - drugače vrnemo da je že vse resil
if(mysqli_num_rows($sqlStudent) > 0 && $fak_active == 1){
$rowStudent = mysqli_fetch_array($sqlStudent);
// Preverjanje ce je student izpolnil vse ankete PRED in se lahko prijavi na izpit
if($ank_type == 'anketa_pred'){
foreach ($predmeti AS $predmet) {
if($predmet != ''){
// Zlepimo predmet in nacin studija (redni/izredni)
$predmet_izvedba = $predmet.'_'.$rowStudent['nacin_studija'];
$sql = sisplet_query("SELECT * FROM eval_data_anketaPred WHERE student='$student' AND predmet='$predmet_izvedba'");
if (mysqli_num_rows($sql) == 0) {
$sqlp = sisplet_query("SELECT DISTINCT idp, predmet, praksa FROM eval_izvajalec WHERE idp='$predmet' AND nacin_studija='".$rowStudent['nacin_studija']."' AND fakulteta='".$fakulteta."'");
if(mysqli_num_rows($sqlp) > 0){
$rowp = mysqli_fetch_array($sqlp);
// Ce je praksa 1 ali 2 potem preskocimo anketo PRED, ker nimamo kontaktnih ur
if($rowp['praksa'] == '1' || $rowp['praksa'] == '2'){
$return['predmeti_reseni'] .= $predmet.'x';
}
else{
if ($return['msg'] != '') $return['msg'] .= ', ';
$rowp['predmet'] = str_replace("ccc", "č", str_replace("sss", "š", str_replace("zzz", "ž", str_replace("CCC", "Č", str_replace("SSS", "Š", str_replace("ZZZ", "Ž", str_replace("cc_cc", "ć", $rowp['predmet'])))) ) ) );
$return['msg'] .= ''.$rowp['predmet'].'';
// Zabelezimo vse predmete za katere se ni resil ankete
$return['predmeti_nereseni'] .= $predmet.'x';
$return['prijava'] = false;
}
}
// Ce slucajno nimamo predmeta v nasi bazi ga oznacimo kot da ga je ze resil (ker drugace bi reseval prazno anketo)
else{
$return['predmeti_reseni'] .= $predmet.'x';
}
}
else{
// Zabelezimo vse predmete za katere je ze resil anketo
$return['predmeti_reseni'] .= $predmet.'x';
}
}
}
// Pobrisemo odvecen zadnji separator
if(substr($return['predmeti_reseni'], -1) == 'x')
$return['predmeti_reseni'] = substr($return['predmeti_reseni'], 0, -1);
if(substr($return['predmeti_reseni'], -1) == 'x')
$return['predmeti_nereseni'] = substr($return['predmeti_nereseni'], 0, -1);
if ($return['msg'] != '')
$return['msg'] = 'Pred prijavo morate izpolniti še ankete po zaključku predavanj za naslednje predmete: <a href="ankete.asp">'. $return['msg'].'</a>';
}
// Preverjanje ce je student izpolnil vse ankete PO in se lahko prijavi na izpit/visji letnik?
elseif($ank_type == 'anketa_po'){
foreach ($predmeti AS $predmet) {
if($predmet != ''){
// Zlepimo predmet in nacin studija (redni/izredni)
$predmet_izvedba = $predmet.'_'.$rowStudent['nacin_studija'];
$sql = sisplet_query("SELECT * FROM eval_data_anketaPo WHERE student='$student' AND predmet='$predmet_izvedba'");
if (mysqli_num_rows($sql) == 0) {
$sqlp = sisplet_query("SELECT DISTINCT idp, predmet FROM eval_izvajalec WHERE idp='$predmet' AND nacin_studija='".$rowStudent['nacin_studija']."' AND fakulteta='".$fakulteta."'");
if(mysqli_num_rows($sqlp) > 0){
$rowp = mysqli_fetch_array($sqlp);
if ($return['msg'] != '') $return['msg'] .= ', ';
$rowp['predmet'] = str_replace("ccc", "č", str_replace("sss", "š", str_replace("zzz", "ž", str_replace("CCC", "Č", str_replace("SSS", "Š", str_replace("ZZZ", "Ž", str_replace("cc_cc", "ć", $rowp['predmet'])))) ) ) );
$return['msg'] .= ''.$rowp['predmet'].'';
// Zabelezimo vse predmete za katere se ni resil ankete
$return['predmeti_nereseni'] .= $predmet.'x';
$return['prijava'] = false;
}
// Ce slucajno nimamo predmeta v nasi bazi ga oznacimo kot da ga je ze resil (ker drugace bi reseval prazno anketo)
else{
$return['predmeti_reseni'] .= $predmet.'x';
}
}
else{
// Zabelezimo vse predmete za katere je ze resil anketo
$return['predmeti_reseni'] .= $predmet.'x';
}
}
}
// Pobrisemo odvecen zadnji separator
if(substr($return['predmeti_reseni'], -1) == 'x')
$return['predmeti_reseni'] = substr($return['predmeti_reseni'], 0, -1);
if(substr($return['predmeti_reseni'], -1) == 'x')
$return['predmeti_nereseni'] = substr($return['predmeti_nereseni'], 0, -1);
if ($return['msg'] != '')
$return['msg'] = 'Pred prijavo morate izpolniti še ankete po opravljanju izpita za naslednje predmete: <a href="ankete.asp">'. $return['msg'].'</a>';
}
// Preverjanje ce je student izpolnil SPLOSNO ANKETO in se lahko prijavi v visji letnik
elseif($ank_type == 'anketa_splosna'){
// Ce anketa ni aktivna, se vedno vraca true da se lahko prijavlja
$fak_anketa_splosna = self::getFaksData($fakulteta, $ank_type);
$sqlA = sisplet_query("SELECT id, active FROM srv_anketa WHERE id='$fak_anketa_splosna'");
$rowA = mysqli_fetch_array($sqlA);
if($rowA['active'] == '1'){
// Spremenjeno, ker se studentka vpisana na 2 fakulteti hkrati ni mogla prijaviti, ko je na eni izpolnila splosno anketo, na drugi pa se ne
//$sql2 = sisplet_query("SELECT * FROM eval_data_splosna WHERE student='$student' AND ank_id='$fak_anketa_splosna'");
$sql2 = sisplet_query("SELECT * FROM eval_data_splosna WHERE student='$student'");
// Po novem za fdv vse anketiramo in ne preverjamo vzorca
if (mysqli_num_rows($sql2) == 0 && (self::check_vzorec($student) || $fakulteta == '3000021')) {
//if (mysqli_num_rows($sql2) == 0 && self::check_vzorec($student)) {
$return['msg'] = 'Pred vnosom vpisnega lista morate izpolniti še anketo o splošnem zadovoljstvu s fakulteto.';
$return['prijava'] = false;
}
}
}
// Preverjanje ce je student izpolnil PODIPLOMSKO ANKETO in se lahko prijavi v visji letnik
elseif($ank_type == 'anketa_podipl'){
// Ce anketa ni aktivna, se vedno vraca true da se lahko prijavlja
$fak_anketa_podipl = self::getFaksData($fakulteta, $ank_type);
$sqlA = sisplet_query("SELECT id, active FROM srv_anketa WHERE id='$fak_anketa_podipl'");
$rowA = mysqli_fetch_array($sqlA);
if($rowA['active'] == '1'){
// Podiplomska anketa
if($rowStudent['letnik'] == '1'){
// Preverimo ce je podiplomski student ze odgovarjal na splosno podiplomsko anketo
$sql2 = sisplet_query("SELECT * FROM eval_data_podipl WHERE student='$student'");
if (mysqli_num_rows($sql2) == 0){
$return['msg'] = 'Pred vnosom vpisnega lista morate izpolniti še podiplomsko anketo.';
$return['prijava'] = false;
}
}
// Podiplomska anketa 2
elseif($rowStudent['letnik'] == '2'){
// Preverimo ce je podiplomski student ze odgovarjal na splosno podiplomsko anketo 2
$sql2 = sisplet_query("SELECT * FROM eval_data_podipl2 WHERE student='$student'");
if (mysqli_num_rows($sql2) == 0){
$return['msg'] = 'Pred vnosom vpisnega lista morate izpolniti še podiplomsko anketo 2.';
$return['prijava'] = false;
}
}
// Podiplomska anketa 3
elseif($rowStudent['letnik'] == '3'){
// Preverimo ce je podiplomski student ze odgovarjal na splosno podiplomsko anketo 3
$sql2 = sisplet_query("SELECT * FROM eval_data_podipl3 WHERE student='$student'");
if (mysqli_num_rows($sql2) == 0){
$return['msg'] = 'Pred vnosom vpisnega lista morate izpolniti še podiplomsko anketo 3.';
$return['prijava'] = false;
}
}
}
}
}
return $return;
}
// Preverimo, ce student pride v vzorec za izvedbo splosne ankete
private static function check_vzorec($student){
$sql = sisplet_query("SELECT pre.id_student as student, pre.letnik as letnik, pro.st_letnik as st_letnik
FROM eval_student pre, eval_program pro
WHERE pre.id_student='$student' AND pre.id_program=pro.id AND pre.letnik>'0'");
if(mysqli_num_rows($sql) > 0){
$row = mysqli_fetch_array($sql);
// Zadnja 2 znaka studenteve sifre (md5) spremenimo iz hex v dec
$value = hexdec(substr($row['student'], -2));
$value = (int)$value / 255 * 100;
// Zracunamo interval v katerega pade student glede na letnik in stevilo letnikov (ce je 1. letnik je med 0 in 25, 2. je med 25 in 50...)
$min = 100 / (int)$row['st_letnik'] * ((int)$row['letnik']-1);
$max = 100 / (int)$row['st_letnik'] * (int)$row['letnik'];
// Ce gre za 1. letnik vzamemo
if($row['letnik'] == 1 && $value <= $max)
return true;
// Ce gre za zadnji letnik
elseif($row['letnik'] == $row['st_letnik'] && $value > $min)
return true;
// Ce gre za vmesni letnik
elseif($value > $min && $value <= $max)
return true;
}
return false;
}
// Izvedba preusmeritve studenta na ustrezno anketo
public static function studentRedirect($ank_type){
// Drugace browser cachira in ne prikaze pravilno ce se takoj vrnemo po koncani
header("Cache-Control: no-cache, must-revalidate");
// Dekriptiramo parametre in jih zapisemo nazaj v $_REQUEST
$params = array();
$params = self::decryptAES($_REQUEST['params'], $testing=false);
$fakulteta = trim($params['fakulteta']);
$student = trim($params['student']);
$student = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $student);
if($ank_type == 'anketa_pred' || $ank_type == 'anketa_po')
$predmet = (int) $params['predmet'];
$ank_id = 0;
// Dobimo podatke o studentu in ce je ze resil anketo
$finished = false;
if($ank_type == 'anketa_pred' || $ank_type == 'anketa_po' || $ank_type == 'anketa_splosna')
$sqlStudent = sisplet_query("SELECT * FROM eval_student WHERE id_student='$student'");
else
$sqlStudent = sisplet_query("SELECT * FROM eval_student_podipl WHERE id_student='$student' AND (letnik='1' OR letnik='2' OR letnik='3')");
if(mysqli_num_rows($sqlStudent) > 0){
$rowStudent = mysqli_fetch_array($sqlStudent);
// Ce imamo slucajno 2 vnosa za istega studenta - je vpisan hkrati na 2 programa
if(mysqli_num_rows($sqlStudent) > 1){
$rowStudent2 = mysqli_fetch_array($sqlStudent);
}
// Zlepimo predmet in nacin studija (redni/izredni)
$predmet_izvedba = $predmet.'_'.$rowStudent['nacin_studija'];
// Pogledamo ce imamo slucajno podiplomsko anketo 2
if($ank_type == 'anketa_podipl' && $rowStudent['letnik'] == '2'){
$ank_type = 'anketa_podipl2';
}
// Pogledamo ce imamo slucajno podiplomsko anketo 3
if($ank_type == 'anketa_podipl' && $rowStudent['letnik'] == '3'){
$ank_type = 'anketa_podipl3';
}
// Dobimo id ustrezne ankete
$ank_id = self::getFaksData($fakulteta, $ank_type);
// Dobimo podatke o resenosti ankete
if($ank_type == 'anketa_pred')
$sql = sisplet_query("SELECT * FROM eval_data_anketaPred WHERE predmet='$predmet_izvedba' AND student='$student' AND ank_id='$ank_id'");
elseif($ank_type == 'anketa_po')
$sql = sisplet_query("SELECT * FROM eval_data_anketaPo WHERE predmet='$predmet_izvedba' AND student='$student' AND ank_id='$ank_id'");
elseif($ank_type == 'anketa_splosna')
$sql = sisplet_query("SELECT * FROM eval_data_splosna WHERE student='$student' AND ank_id='$ank_id'");
elseif($ank_type == 'anketa_podipl')
$sql = sisplet_query("SELECT * FROM eval_data_podipl WHERE student='$student' AND ank_id='$ank_id'");
elseif($ank_type == 'anketa_podipl2')
$sql = sisplet_query("SELECT * FROM eval_data_podipl2 WHERE student='$student' AND ank_id='$ank_id'");
elseif($ank_type == 'anketa_podipl3')
$sql = sisplet_query("SELECT * FROM eval_data_podipl3 WHERE student='$student' AND ank_id='$ank_id'");
// Ce ze imamo odgovor studenta v bazi ga ne spustimo naprej
if(mysqli_num_rows($sql) > 0)
$finished = true;
}
// Ce sploh ne obstaja student v bazi ga tudi ne spustimo naprej
else
$finished = true;
// Ce imamo ze vnos oz. ne obstaja student v bazi, prikazemo obvestilo in ne pustimo redirecta
if($finished){
echo '<head>'."\n";
echo ' <title>Študentska anketa</title>'."\n";
echo ' <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />'."\n";
echo '</head>'."\n";
if($ank_type == 'anketa_pred' || $ank_type == 'anketa_po')
echo 'Anketo za ta predmet ste že izpolnili. Hvala za sodelovanje.';
else
echo 'Anketo ste že izpolnili. Hvala za sodelovanje.';
die();
}
// Zgradimo ustrezen url
$request = '';
// Parametri za anketo PRED
if($ank_type == 'anketa_pred'){
$i = 1;
$sql = sisplet_query("SELECT * FROM eval_izvajalec WHERE idp='".$predmet."' AND nacin_studija='".$rowStudent['nacin_studija']."' AND fakulteta='".$fakulteta."'");
while ($row = mysqli_fetch_array($sql)) {
// v csvju mam kot utf8. v bazo dam kot utf8, izpisem kot utf8, pa ne delajo sumniki... zato replacam...
$row['predmet'] = str_replace("ccc", "č", str_replace("sss", "š", str_replace("zzz", "ž", str_replace("CCC", "Č", str_replace("SSS", "Š", str_replace("ZZZ", "Ž", str_replace("cc_cc", "ć", $row['predmet'])))) ) ) );
$row['ime_pedagoga'] = str_replace("ccc", "č", str_replace("sss", "š", str_replace("zzz", "ž", str_replace("CCC", "Č", str_replace("SSS", "Š", str_replace("ZZZ", "Ž", str_replace("cc_cc", "ć", $row['ime_pedagoga'])))) ) ) );
// Posebej dodamo samo za FDV (testno v letu 2018/2019) - lahko dodamo kar za vse, itak ce ni sistemske spr. nima veze
$ktmin = $row['st_kt'] * 25;
$ktmax = $row['st_kt'] * 30;
if ($i == 1)
$request .= '&sifpredm='.$predmet_izvedba.'&predmet='.urlencode($row['predmet']).'&stkt='.$row['st_kt'].'&ktmin='.$ktmin.'&ktmax='.$ktmax;
$request .= '&izvajalec'.$i.'='.urlencode($row['ime_pedagoga']).'&sifizv'.$i.'='.$row['idpedagoga'];
$i++;
}
$request .= '&sifstud='.$student;
$request .= '&siffaks='.$fakulteta;
// dobimo program studenta na katerega je vpisan
$id_prog = $rowStudent['id_program'];
$program = $rowStudent['program'];
$request .= '&idprog='.$id_prog.'&program='.urlencode($program);
if(mysqli_num_rows($sqlStudent) > 1){
$request .= '&idprog2='.$rowStudent2['id_program'].'&program2='.urlencode($rowStudent2['program']);
}
$request .= '&letnik='.$rowStudent['letnik'];
$request .= '&nacinstud='.$rowStudent['nacin_studija'];
}
// Parametri za anketo PO
elseif($ank_type == 'anketa_po'){
$sql = sisplet_query("SELECT * FROM eval_izvajalec WHERE idp='".$predmet."' AND nacin_studija='".$rowStudent['nacin_studija']."' AND fakulteta='".$fakulteta."'");
$row = mysqli_fetch_array($sql);
// v csvju mam kot utf8. v bazo dam kot utf8, izpisem kot utf8, pa ne delajo sumniki... zato replacam...
$row['predmet'] = str_replace("ccc", "č", str_replace("sss", "š", str_replace("zzz", "ž", str_replace("CCC", "Č", str_replace("SSS", "Š", str_replace("ZZZ", "Ž", str_replace("cc_cc", "ć", $row['predmet'])))) ) ) );
$ktmin = $row['st_kt'] * 25;
$ktmax = $row['st_kt'] * 30;
$praksa = $row['praksa'];
$request .= '&sifpredm='.$predmet_izvedba.'&predmet='.urlencode($row['predmet']).'&stkt='.$row['st_kt'].'&ktmin='.$ktmin.'&ktmax='.$ktmax.'&praksa='.$praksa;
$request .= '&sifstud='.$student;
$request .= '&siffaks='.$fakulteta;
// dobimo program studenta na katerega je vpisan
$id_prog = $rowStudent['id_program'];
$program = $rowStudent['program'];
$request .= '&idprog='.$id_prog.'&program='.urlencode($program);
if(mysqli_num_rows($sqlStudent) > 1){
$request .= '&idprog2='.$rowStudent2['id_program'].'&program2='.urlencode($rowStudent2['program']);
}
$request .= '&letnik='.$rowStudent['letnik'];
$request .= '&nacinstud='.$rowStudent['nacin_studija'];
}
// Parametri za SPLOSNO anketo in za PODIPLOMSKO SPLOSNO anketo
elseif($ank_type == 'anketa_splosna' || $ank_type == 'anketa_podipl' || $ank_type == 'anketa_podipl2' || $ank_type == 'anketa_podipl3'){
$request .= '&sifstud='.$student;
$request .= '&siffaks='.$fakulteta;
$request .= '&idprog='.$rowStudent['id_program'].'&program='.urlencode($rowStudent['program']);
// Pri splosni anketi zapisemo tudi letnik in dodaten program (ce obstaja)
if($ank_type == 'anketa_splosna'){
if(mysqli_num_rows($sqlStudent) > 1){
$request .= '&idprog2='.$rowStudent2['id_program'].'&program2='.urlencode($rowStudent2['program']);
}
}
$request .= '&letnik='.$rowStudent['letnik'];
$request .= '&nacinstud='.$rowStudent['nacin_studija'];
}
// Se preverimo da imamo vse nujne spremenljivke
if($ank_id < 1 || $request == ''){
echo 'Napaka!';
echo '<br />ID ankete: '.$ank_id;
echo '<br />Parametri: '.$request;
die();
}
// Encodamo z base64
$request_encoded = urlencode(base64_encode($request));
// Redirectamo na ustrezeno anketo
header('Location: https://anketa.uni-lj.si/student/a/'.$ank_id.'?enc='.$request_encoded);
}
// Testiranje kriptiranja parametrov
public static function studentTest(){
if(isset($_REQUEST['encrypt']) && $_REQUEST['encrypt'] == '1'){
//$string = 'fakulteta=3000004&student=0001840F06C3752D4F51B58EB5286590&predmet=0517';
//$string = 'fakulteta=3000071&student=0001840F06C3752D4F51B58EB5286590&predmet=1402';
$string = 'fakulteta=3000071&predmet=1511&student=0a25994554e936f9a9a71c07053826fb';
$string = 'fakulteta=3000071&predmet=1511&student=C90BE9EB07C51B1B47A0FE56EA4AAE5F';
$string = 'fakulteta=3000004&student=6b474f63abaa45485a027748017c9b45';
$encryptedString = self::encryptAES($string);
echo 'Original:<br />';
echo $string;
echo '<br /><br />';
echo 'Kripitirano:<br />';
echo $encryptedString;
}
else{
// Dekriptiramo parametre in jih zapisemo nazaj v $_REQUEST
$params = array();
$params = self::decryptAES($_REQUEST['params'], $testing=true);
$fak_id = $params['fakulteta'];
// Dobimo id ustrezne ankete
$fakulteta = self::getFaksData($fak_id, 'ime');
echo '<br /><br /><br />';
echo 'FAKULTETA: '.$fakulteta.'<br /><br />';
echo 'DEKRIPTIRANI PARAMETRI: <br />';
foreach($params as $key => $param){
echo $key.': '.$param;
echo '<br />';
}
}
}
// Vrne podatek o fakulteti
private static function getFaksData($fak_id, $what){
$sql = sisplet_query("SELECT * FROM eval_fakulteta WHERE id='$fak_id'");
if(mysqli_num_rows($sql) > 0){
$row = mysqli_fetch_array($sql);
if(isset($row[$what]))
return $row[$what];
else
return -1;
}
else
return -1;
}
// Enkripcija stringa - AES256 (CBC mode)
public static function encryptAES($stringClear){
// Kljuc v hex pretvorimo v binary
//$aes256Key = pack('H*', "7d51622d752a7e2c3952372e422d3f2126247945686150445a25546525");
$aes256Key = pack('H*', "725F826C530E8FC17014AD08A427EE9ACB169204C037278B5D5E5F89F3ED0764");
// Generiramo random iv
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_RAND);
$iv = utf8_encode('f23fff7891abcd12');
//echo 'Besedilo: '.$stringClear.'<br><br>';
echo 'vektor: '.$iv.'<br /><br />';
//$xx = unpack('H*', $iv);
//var_dump($xx);
// Kriptiramo besedilo z AES256 CBC
$stringEncrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $aes256Key, $stringClear, MCRYPT_MODE_CBC, $iv);
//$xx= htmlspecialchars($stringEncrypted);
echo 'kriptirano: '.$stringEncrypted.'<br><br>';
//echo htmlspecialchars(utf8_encode($stringEncrypted)).'<br><br>';
//$byte_array = unpack('H*', $stringEncrypted);
//$hex = $byte_array[1];
//echo $hex;
echo 'pripnemo vektor: '.$iv.$stringEncrypted.'<br><br>';
// Pripnemo iv in encodamo (base64 in potem se urlencode)
$stringEncrypted = urlencode(base64_encode($iv.$stringEncrypted));
echo 'se base64 cez kriptirano besedilo: '.$stringEncrypted.'<br><br>';
/*echo 'IV: '.$iv.'<br />';
echo 'Zacetno besedilo: '.$stringClear.'<br />';
echo 'Kriptirano besedilo: '.$stringEncrypted.'<br /><br />';*/
// Dekriptiramo
//self::decryptAES($stringEncrypted);
return $stringEncrypted;
}
// Dekripcija stringa
public static function decryptAES($stringEncrypted, $testing=false){
// Kljuc v hex pretvorimo v binary
//$aes256Key = pack('H*', "7d51622d752a7e2c3952372e422d3f2126247945686150445a25546525");
$aes256Key = pack('H*', "725F826C530E8FC17014AD08A427EE9ACB169204C037278B5D5E5F89F3ED0764");
if($testing){
echo '<br /><br />Params: '.$stringEncrypted.'<br />';
echo 'Kljuc: '.unpack('H*',$aes256Key)[1].'<br />';
}
// Decodamo
$stringDecrypted = urldecode($stringEncrypted);
if($testing){
echo '<br /><br />';
echo 'Urldecode: '.$stringDecrypted.'<br />';
}
$stringDecrypted = base64_decode($stringEncrypted);
if($testing){
echo 'Base64: '.$stringDecrypted.'<br />';
}
// Preberemo iv (prvih 16 znakov) in ga odstranimo od kriptiranega besedila
$iv = substr($stringDecrypted, 0, 16);
$stringDecrypted = substr($stringDecrypted, 16);
if($testing){
echo 'Vektor: '.$iv.'<br />';
echo 'Kriptiran string: '.$stringDecrypted.'<br><br>';
}
// Dekripcija besedila
$stringDecrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $aes256Key, $stringDecrypted, MCRYPT_MODE_CBC, $iv);
if($testing){
echo '<br /><br />';
echo 'Dekriptiran string: '.$stringDecrypted.'<br><br>';
}
// Na koncu zapisemo parametre v $_REQUEST (da ni potrebno popravljat v vseh skriptah:))
/*$params = explode("&", $stringDecrypted);
foreach($params as $param){
$parameter = explode("=", $param);
$_REQUEST[$parameter[0]] = $parameter[1];
}*/
// Na koncu vrnemo vse dekriptirane parametre
$params = explode("&", $stringDecrypted);
$params_array = array();
foreach($params as $param){
$parameter = explode("=", $param);
$params_array[$parameter[0]] = $parameter[1];
}
return $params_array;
}
}
?>