Guest User

questions/39197913/pdo-and-openssl-public-decrypt-failing

a guest
Mar 23rd, 2018
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.97 KB | None | 0 0
  1. cat >> pdo.php <<'EOF'
  2. <?php
  3. // follow tutorial http://xmodulo.com/enable-ssl-mysql-server-client.html to create a ssl capable mysqld and place "require-secure-transport = on" in mysqld.conf to enforce SSL
  4. // creates database connection
  5. $user="root";
  6. $pass="password";
  7. $host="127.0.0.1";
  8. $port="3306";
  9. $database="test";
  10. $options = [
  11.     PDO::MYSQL_ATTR_SSL_CA => '/etc/mysql/ssl/ca-cert.pem',
  12.     PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,
  13. ];
  14.  
  15. function createDsn($host, $database, $port)
  16. {
  17.     $string = "mysql:host=$host;dbname=$database;port=$port";
  18.     return $string;
  19. }
  20.  
  21. $dsn = createDsn($host, $database, $port);
  22.  
  23. $pdo = new PDO($dsn, $user, $pass, $options);
  24. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  25.  
  26. ?>
  27. EOF
  28.  
  29. cat >> keys.php <<'EOF'
  30. <?php
  31. // these are disposable test keys
  32. $pubkey = '-----BEGIN PUBLIC KEY-----
  33. MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2BtDSLm4yoen5/6pWqlg
  34. ztfBr6fXylbMChjtzWNJOxan1VDYHUNberc6WM5S8pRaFXIlvgohnF41QYvW6ewW
  35. GGeKNvFysu76TyiWtBiBLPhLxm+qgDaZwsI0pBUSVp8rY7BZQ1WUuMWBUXU50tI9
  36. k3zwrniUf78bnK6EyoUG79gKbvqHFYnYWLLc0c4nAQMk6F3T01DdKNpmhU5x/GeW
  37. /ry7SSUtU+4fAGmhlIXK18xGWeR5rVo85JUXcKUiDVLpGlHxBBUJ6G92kVQCTH4b
  38. pmjMI4lF/kO2/TVQGsYv1x5dfARPYySEXTXD0k5hZvMvbvSxwgt1dQmI7GT3G82w
  39. kwIDAQAB
  40. -----END PUBLIC KEY-----';
  41. $privkey = '-----BEGIN RSA PRIVATE KEY-----
  42. MIIEogIBAAKCAQEA2BtDSLm4yoen5/6pWqlgztfBr6fXylbMChjtzWNJOxan1VDY
  43. HUNberc6WM5S8pRaFXIlvgohnF41QYvW6ewWGGeKNvFysu76TyiWtBiBLPhLxm+q
  44. gDaZwsI0pBUSVp8rY7BZQ1WUuMWBUXU50tI9k3zwrniUf78bnK6EyoUG79gKbvqH
  45. FYnYWLLc0c4nAQMk6F3T01DdKNpmhU5x/GeW/ry7SSUtU+4fAGmhlIXK18xGWeR5
  46. rVo85JUXcKUiDVLpGlHxBBUJ6G92kVQCTH4bpmjMI4lF/kO2/TVQGsYv1x5dfARP
  47. YySEXTXD0k5hZvMvbvSxwgt1dQmI7GT3G82wkwIDAQABAoIBACdZR3YNgw01iCgg
  48. 4XtFjf/7nyO5vvvzs/E+usYEBwiARoz7zG3/nr+Ib1JONyI+SuzOvPqOY7JSIQZP
  49. TRGI0DkfWTZJ3mWgR+lz7YTbVWH3z+xQ1s3Do1mn/OfHgnBNSRw8tvQguBSwuaw4
  50. WQ//AgFB5Z0PDZL5HDD6QemSMUIoUY5L4n7a+uBIPwp8COdZLGaTwpNySdkXmivn
  51. Dr7xh5XVl2+baQPp/ssS9OMihfvHNUYyJpzMg7hG2ai0LiwxeEyMzAfCF6yW7RQv
  52. AJAqYJZle8xb5uhHiOBt0LZRvZEJGmHW5FZxjD6RC6vsNQdsJ5pkRfTnU07EYdpH
  53. 4B8mnSkCgYEA60VSgATTrTI3SNKfq9yJ9+D1+ddpboF5y+tJZmv94MjgyFTVGSyM
  54. iZWNzGVPZe59HC9nSlzYOnaQ/ArHJG8IORau/gdEiLd3ey5fTe0bboGRR4wttI/p
  55. k/8JQwxOgbJ8GaYozkCC+pdR/0y9yA0L8wWD18cmDYKlBW9bgFCppA8CgYEA6yWt
  56. lqKVIvMZksedyvuVAYcBXd+RP69OK4ct0EoE9ON5tZ2aRY2rXgCmVFtEs2xcuNIM
  57. 1sdP/bxqOagIMQ4MdoT5q/HDc67BwXB4N7R4Q3MD9vCQ8A6N8U7oIJ5t/GMtQDCI
  58. q4/1YjYE19+FNV29S2rWgqQBROP2GkSkfz7X1z0CgYAcDwBv1COKnFqLjNMOJBcw
  59. QNwVF+OzEi38a+stE+QLUum7+qIPhoicQAHRRqPZfD/fhKfE7p27GzjfVkm5xqQs
  60. atAj66n4xCizwCwNlyGWZE13QviQeDlbNSddn7IdNbQnOvHS5063pCRbVkOsACJU
  61. sWuv6EhZhCM6KrW27+fLcQKBgDg5XBYmba5bngPAgvQjz278DtGZQSuPCQvTWJry
  62. 99huA43vTxHOW+kwEpUc9YJJKKpwXu2D3pZ21JdQnBTOnSBBj0kTl34zjNRpxfTb
  63. y92kxI/o2V7su/e0vEAAYZ/1Pr6YXDVZSHzhGatcIIewEDDWLNAz0rHcJ94EB6j9
  64. J7KpAoGANCixf6SDBdsn0YQ/AL8SthVxBo6LoBiL16OXOdA6DG8f5NB2obVS8Ks+
  65. 7BrY0WMgPgyoWgoHddS2So9Uy8FnVWOvi8AR0fLkMb8jMqp/Xcqk1wejGFkSv/xv
  66. /CasiktSOuimkTzvIj/qojN7lgEKDISOxHxixudZ7XBtyXHkHBM=
  67. -----END RSA PRIVATE KEY-----';
  68.  
  69. EOF
  70.  
  71.  
  72. cat >> run.php <<'EOF'
  73. <?php
  74. // workaround for PHP bug #73978 "(openssl_decrypt triggers bug in PDO)"
  75. include("pdo.php");
  76.  
  77. function processPlainText($plainText, $action) {
  78.  
  79.     include("keys.php");
  80.  
  81.     $cryptText = '';
  82.     $res = 'encrypt' == $action ? openssl_get_privatekey($privkey) : openssl_get_publickey($pubkey);
  83.     $action = 'encrypt' == $action ? 'openssl_private_' . $action : 'openssl_public_'.$action;
  84.  
  85.     $action($plainText, $cryptText, $res);
  86. //  enable/disable workaround, and run multiple times with php7.0-cli and php7.1-cli
  87. //  while(false !== openssl_error_string());
  88.     openssl_free_key($res);
  89.     return $cryptText;
  90. }
  91.  
  92. $password1 = processPlainText("plaintext", 'encrypt');
  93.  
  94. $query = $pdo->prepare("select 2+2;");
  95. $query->execute();
  96. $row = $query->fetch(PDO::FETCH_ASSOC);
  97. var_dump($row);
  98.  
  99. $password2 = processPlainText("encrypted", 'decrypt');
  100.  
  101. $query = $pdo->prepare("select 2+2;");
  102. $query->execute();
  103. $row = $query->fetch(PDO::FETCH_ASSOC);
  104. var_dump($row);
  105.  
  106. EOF
Add Comment
Please, Sign In to add comment