idObfuscation.php 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. <?php
  2. function getObfuscationSalt(){
  3. $saltFile=dirname(__FILE__)."/idObfuscation_salt.php";
  4. if(file_exists($saltFile)){
  5. require $saltFile;
  6. }else{
  7. $bytes=openssl_random_pseudo_bytes(4);
  8. $sf=fopen($saltFile,"w");
  9. fwrite($sf,chr(60)."?php\n");
  10. fwrite($sf,'$OBFUSCATION_SALT=0x'.bin2hex($bytes).";\n");
  11. fwrite($sf,"?".chr(62));
  12. fclose($sf);
  13. require $saltFile;
  14. }
  15. return isset($OBFUSCATION_SALT)?$OBFUSCATION_SALT:0;
  16. }
  17. /*
  18. This is a simple reversible hash function I made for encoding and decoding test IDs.
  19. It is not cryptographically secure, don't use it to hash passwords or something!
  20. */
  21. function obfdeobf($id,$dec){
  22. $salt=getObfuscationSalt()&0xFFFFFFFF;
  23. $id=$id&0xFFFFFFFF;
  24. if($dec){
  25. $id=$id^$salt;
  26. $id=(($id&0xAAAAAAAA)>>1)|($id&0x55555555)<<1;
  27. $id=(($id&0x0000FFFF)<<16)|(($id&0xFFFF0000)>>16);
  28. return $id;
  29. }else{
  30. $id=(($id&0x0000FFFF)<<16)|(($id&0xFFFF0000)>>16);
  31. $id=(($id&0xAAAAAAAA)>>1)|($id&0x55555555)<<1;
  32. return $id^$salt;
  33. }
  34. }
  35. function obfuscateId($id){
  36. return str_pad(base_convert(obfdeobf($id+1,false),10,36),7,0,STR_PAD_LEFT);
  37. }
  38. function deobfuscateId($id){
  39. return obfdeobf(base_convert($id,36,10),true)-1;
  40. }
  41. //IMPORTANT: DO NOT ADD ANYTHING BELOW THE PHP CLOSING TAG, NOT EVEN EMPTY LINES!
  42. ?>