cosa ne pensate di questa funzione?
PHP:
<?php
/*
--cripto una stringa ma in modo che non vi siano caratteri speciali--
--vi sono alcune ridondanze da semplificare--
--per una parola chiave di 6 lettere alfanum si possono utilizzare 999989 chiavi--
-- con 12 lettere, 999999999989 chiavi--
--non consentite chiavi con numeri tutti uguali-
--lo zero corrisponde a 10--
es. di utilizzo:
pagina con form di accesso a pagine riservate
campo USERNAME (presente nel DB)
campo PASSWORD (presente nel DB ma criptata)
campo CHIAVE (in possesso dell'utente, ma non presente nel DB e possibilmente nemmeno in locale)
nella pagina accesso ho, provenienti dal form:
$user=$_POST{'miaUser'];
$paswForm=$_POST{'miaPsw']; es. psw = pAroLaCHiavE
dalla query ecc.. leggo la pasw dal DB
$paswDB = $riga[password]; nel DB ho sH0tTkMJrgyI
$paswDB = deCodifica($paswDB,$_POST{'miaChiave']); la chiave è 379580029634
if ($paswForm == $paswDB){ecc. ecc......(in questo caso OK)
il metodo potrebbe essere utilizzato (con qualche piccola modifica @.-_) all'indirizzo email
per renderne difficile la lettura agli spam, es.
$mioIndirizzo = decodifica("Sdr55iUnMMkhlo", "135896780023648"); non impossibile, ma difficile
(è evidente che prima avrò dovuto codificare l'indirizzo con la stessa chiave)
la chiave non è ne sul remoto ne in locale (salvo foglio di carta)
---> usatelo e modificatelo come vi pare, se avete voglia informatemi [email protected]
*/
function codifica($stringa,$code){ // legge la parola e la chiave numerica di codifica
/*-----verifica immissione----*/
$lunStringa = strlen($stringa);
$lunCode = strlen($code);
if ($lunStringa != $lunCode){//lunghezza parole e chiave uguali
return "<br>parola e codice non congrui<br>";
}
$veroP = ereg("^([0-9A-Za-z]{1,$lunStringa})$", $stringa); //parola solo lettere o numeri (per ora)
if ($veroP == FALSE){
return "<br>la parola contiene caratteri non ammessi<br>";
}
$veroC = ereg("^([0-9]{1,$lunCode})$", $code); //chiave solo numeri (per ora)
if ($veroC == FALSE){
return "<br>la chiave deve essere numerica<br>";
}
$flag= 0;
for ($j=1 ; $j <= $lunCode; $j++){//chiave non con tutti numeri uguali
if ($code[0] == $code[$j]){
$flag ++;
}
}
if ($lunCode == ($flag+1)){
return "<br>la chiave non deve avere tutti i numeri uguali<br>";
}
/*----inizializzo variabili----*/
$daCodificare=$stringa;
$codice= int;
$codice=$code;
$incremento= int;
$nuovoASCI= int;
$codificata="";
$daRestituire="";
$k=0;
/*----inizio la codifica----*/
for($k=0; $k < $lunStringa; $k++){
$carASCI= ord($daCodificare[$k]); //codice ASCI del kappesimo carattere della stringa
$incremento = ord($codice[$k])-48; //valore numerico del kappesimo carattere del code
if ($incremento == 0) { $incremento = 10;} //evito comunque di non codificare
if($carASCI > 47 and $carASCI <= 57){ //originale è da 0-9
$nuovoASCI = $carASCI + $incremento; //ricavo il nuovo codice ASCI
if($nuovoASCI > 57){//interssa la zona di caratteri non ammessi
$incre= $nuovoASCI - 58;
$nuovoASCI = 65 + $incre; //adesso cade nella zona A-Z
}//fine > 57
} // fine if 48 57
if($carASCI > 64 and $carASCI <=90){ //originale è da A-Z
$nuovoASCI = $carASCI + $incremento; //ricavo il nuovo codice ASCI
if($nuovoASCI > 90){//interssa la zona di caratteri non ammessi
$incre= $nuovoASCI - 91;
$nuovoASCI = 97 + $incre; //adesso cade nella zona a-z
}//fine > 90
} //fine IF 65-90
if($carASCI > 96 and $carASCI <=122){ //originale è da a-z
$nuovoASCI = $carASCI + $incremento; //ricavo il nuovo codice ASCI
if($nuovoASCI > 122){//interssa la zona di caratteri non ammessi
$incre= $nuovoASCI - 123;
$nuovoASCI = 48 + $incre; //adesso cade nella zona 0-9
}//fine > 122
} //fine IF 97-122
//ho passato i filtri e ho ruotato il codice carattere
$codificata[$k] = chr($nuovoASCI); //
$daRestituire .= $codificata[$k]; //riformo la parola codificata
} //fine del FOR
return $daRestituire;
}// fine function codifica
/********************************************************************/
function deCodifica($stringa,$code){
/*-----verifica immissione----*/
$lunStringa = strlen($stringa);
$lunCode = strlen($code);
if ($lunStringa != $lunCode){
return "<br>parola e codice non congrui<br>";
}
$veroP = ereg("^([0-9A-Za-z]{1,$lunStringa})$", $stringa);
if ($veroP == FALSE){
return "<br>la parola contiene caratteri non ammessi<br>";
}
$veroC = ereg("^([0-9]{1,$lunCode})$", $code);
if ($veroC == FALSE){
return "<br>la chiave deve essere numerica<br>";
}
$flag= 0;
for ($j=1 ; $j <= $lunCode; $j++){
if ($code[0] == $code[$j]){
$flag ++;
}
}
if ($lunCode == ($flag+1)){
return "<br>la chiave non deve avere tutti i numeri uguali<br>";
}
/*----inizializzo variabili----*/
$daCodificare=$stringa;
$codice= int;
$codice=$code;
$incremento= int;
$nuovoASCI= int;
$codificata="";
$daRestituire="";
$k=0;
/*----inizio la decodifica----*/
for($k=0; $k < $lunStringa; $k++){
$carASCI= ord($daCodificare[$k]); //codice ASCI del kappesimo carattere della stringa
$incremento = ord($codice[$k])-48; //valore numerico del kappesimo carattere del code
if ($incremento == 0) { $incremento = 10;} //come da codifica
if($carASCI > 47 and $carASCI <=57){ //il codificato è da 0-9
$nuovoASCI = $carASCI - $incremento; //ricavo il nuovo codice ASCI inverso a codifica
if( $nuovoASCI < 48){//interssa la zona di caratteri non ammessi
$incre= 47 - $nuovoASCI;
$nuovoASCI = 122 - $incre; //riporto nella zona a-z
}// fine IF<47
} //fine IF 48-57
if($carASCI > 64 and $carASCI <=90){ //il codificato è da A-Z
$nuovoASCI = $carASCI - $incremento; //ricavo il nuovo codice ASCI inverso a codifica
if( $nuovoASCI < 65){//interssa la zona di caratteri non ammessi
$incre= 64 - $nuovoASCI;
$nuovoASCI = 57 - $incre; //riporto nella zona 0-9
}// fine IF<65
} //fine IF 65-90
if($carASCI > 96 and $carASCI <=122){ //il codificato è da a-z
$nuovoASCI = $carASCI - $incremento; //ricavo il nuovo codice ASCI inverso a codifica
if( $nuovoASCI < 97){//interssa la zona di caratteri non ammessi
$incre= 96 - $nuovoASCI;
$nuovoASCI = 90 - $incre; //riporto nella zona A-Z
}// fine IF<96
} //fine IF 97-122
//ho passato i filtri e ho ruotato il codice carattere
/*echo "il cofificato ASCI è = ".$carASCI."<br>";
echo "corrispondente a = ".chr($carASCI)."<br>";
echo "incremento decode = ".$incremento."<br>";
echo "il nuovo ASCI è = ".$nuovoASCI."<br>";
echo "corrispondente a = ".chr($nuovoASCI)."<br>";*/
$codificata[$k] = chr($nuovoASCI); //
$daRestituire .= $codificata[$k]; //riformo la parola decodificatacodificata
/*echo "da restituire = ".$daRestituire."<br>";*/
}//fine del for
return $daRestituire;
}//fine functio deCodifica
/*****************---TEST DI PROVA---*****************/
$password = "pAroLaCHiavE";
$chiave = "379580029634";
/*è possibile criptare più volte anche con chiavi diverse es chiave1, chiave2, ...
per decrippare invertire l'ordine delle chiavi ..., chiave2, chiave1
*/
$pswCode= codifica($password,$chiave);
echo "la parola originale è : ".$password."<br>";
echo "codificata con chiave : ".$chiave."<br>";
echo "la parola codificata è: ".$pswCode."<br><br><br>";
$pswDeCode= deCodifica($pswCode,$chiave); /*la chiave deve essere identica a quella
con cui ho codificato*/
echo "la parola decodificata è: ".$pswDeCode."<br><br><br>";
if ($password == $pswDeCode){
echo "il criptaggio - decriptaggio è andato a buon fine<br>";
}else {
echo "è sopravvenuto un errore di decriptaggio - verificare chiave<br><br><br>";
}
?>