EncryptionController.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. class EncryptionController extends Controller{
  5. private $public_key = "WrBEGoJnMnMhC/2hiaYypcmPwP9Z4p4/bNex0T/WUWA=";
  6. private $secret_key = "CEIBkv7QG1WoAoBO7Ny5cqzyJ5yCUwBMhnFYUBbCeTk=";
  7. public function encrypt($msg){
  8. $nonce = random_bytes(SODIUM_CRYPTO_BOX_NONCEBYTES);
  9. $nonceArr = array();
  10. for($i = 0; $i < strlen($nonce); $i++){
  11. $char = $nonce[$i];
  12. $ascii = ord($char);
  13. $nonceArr[] = $ascii;
  14. }
  15. $nonceJson = json_encode($nonceArr);
  16. $nonceStr = base64_encode($nonceJson);
  17. $encryption_key = sodium_crypto_box_keypair_from_secretkey_and_publickey(
  18. base64_decode($this->secret_key),
  19. base64_decode($this->public_key));
  20. $encrypted = sodium_crypto_box($msg, $nonce, $encryption_key);
  21. $encryptedArr = array();
  22. for($i = 0; $i < strlen($encrypted); $i++){
  23. $char = $encrypted[$i];
  24. $ascii = ord($char);
  25. $encryptedArr[] = $ascii;
  26. }
  27. $encryptedJson = json_encode($encryptedArr);
  28. $encryptedStr = base64_encode($encryptedJson);
  29. return base64_encode($encryptedStr . "|" . $nonceStr);
  30. }
  31. public function decrypt($enc){
  32. $dec = base64_decode($enc);
  33. $decArr = explode("|", $dec);
  34. $nonceDec = base64_decode($decArr[1]);
  35. $caddec = base64_decode($decArr[0]);
  36. $nonceArr = json_decode($nonceDec);
  37. $cadArr = json_decode($caddec);
  38. $nonceF = "";
  39. foreach($nonceArr as $asciiF){
  40. $nonceF .= chr($asciiF);
  41. }
  42. $cadF = "";
  43. foreach($cadArr as $asciiF){
  44. $cadF .= chr($asciiF);
  45. }
  46. $encryption_key_dec = sodium_crypto_box_keypair_from_secretkey_and_publickey(base64_decode($secret_key), base64_decode($public_key));
  47. $decrypted = sodium_crypto_box_open($cadF, $nonceF, $encryption_key_dec);
  48. return $decrypted;
  49. }
  50. }