Search This Blog

Showing posts with label PHP. Show all posts
Showing posts with label PHP. Show all posts

Wednesday, October 13, 2021

Security : Java PHP encryption decryption for AES-128-CTR or AES/CTR/NoPadding

 Java

package com.security;

import java.util.Base64;


import javax.crypto.Cipher;

import javax.crypto.spec.IvParameterSpec;

import javax.crypto.spec.SecretKeySpec;


/**

 * @author drvijay

 * @date 13-0ct-2021

 */


public class EncryptDecrypt

{

private static String encrypt ( String data, String cipherType, String key, String iv )

{

String encrypted = "";


try

{

Cipher encryptionCipher = Cipher.getInstance ( cipherType );

IvParameterSpec ivv = new IvParameterSpec ( iv.getBytes ( "UTF-8" ), 0, encryptionCipher.getBlockSize () );

encryptionCipher.init ( Cipher.ENCRYPT_MODE, new SecretKeySpec ( key.getBytes (), "AES" ), ivv );

// encrypt

byte [] cipherText = encryptionCipher.doFinal ( data.getBytes () );


encrypted = new String ( Base64.getEncoder ().encode ( cipherText ) );

}

catch ( Exception e )

{

throw new IllegalStateException ( e );

}

return encrypted;

}


private static String decrypt ( String encryptData, String cipherType, String key, String iv )

{

String decrypted = "";

try

{


Cipher decryptionCipher = Cipher.getInstance ( cipherType );

IvParameterSpec ivv = new IvParameterSpec ( iv.getBytes ( "UTF-8" ), 0, decryptionCipher.getBlockSize () );


SecretKeySpec secretKeySpec = new SecretKeySpec ( key.getBytes (), "AES" );

decryptionCipher.init ( Cipher.DECRYPT_MODE, secretKeySpec, ivv );

// decrypt

byte [] finalCipherText = decryptionCipher.doFinal ( Base64.getDecoder ().decode ( encryptData ) );

// converting to string

String finalDecryptedValue = new String ( finalCipherText );

decrypted = finalDecryptedValue;

}

catch ( Exception e )

{

throw new IllegalStateException ( e );

}

return decrypted;

}


public static void main ( String [] args )

{

String cipherType = "AES/CTR/NoPadding";

String valueToEncrypt = "hello, vijay";

String key = "0123456789abcdef";

String iv = "2208250639374785";


String encrypted = encrypt ( valueToEncrypt, cipherType, key, iv );

String decrypted = decrypt ( encrypted, cipherType, key, iv );


//System.out.println(Base64.getDecoder ().decode ( "ycbnIE8vn2lTUi/9F/FEa+5v86qzOU09yjdxfGDc8wA=" ));

// END OF ENCODE CODE

System.out.println ( "encrypted and saved as Base64 : " + encrypted );


System.out.println ( "decrypted from Base64->aes128 : " + decrypted );

// END OF DECRYPT CODE


}

}




PHP code

<!DOCTYPE html>

<html>

<body>

<?php

$simple_string = "hello, vijay";

echo ($simple_string .'<br/>');

        $ciphering = 'AES-128-CTR';

        $iv_length = openssl_cipher_iv_length($ciphering);

        $options = 0;

        // Non-NULL Initialization Vector for encryption

        $iv = '2208250639374785';


       

        $key = '0123456789abcdef';


                $encryption = openssl_encrypt($simple_string, $ciphering,

                    $key, $options, $iv); 

                    echo($encryption .'<br/>');

                    

                  $decryption=openssl_decrypt ($encryption, $ciphering,

                $key, $options, $iv);

                echo($decryption .'<br/>');

                

?>


</body>

</html>



output

hello, vijay
0iQoUVC/QZG3cM20
hello, vijay

Tuesday, May 11, 2021

Eclipse - PHP Fatal error: Call to undefined function json_decode()

Add PHP 

1. Window->Preferences->Installed PHPs-> Add

    /usr/bin/<search php> select /usr/bin/php7.4.x

2. Check "Window->Preferences->Installed PHPs" checkbox "Use system default php.ini configuration" must be enabled. And I had to setup "apt install php-json" on my Ubuntu.

3. Enable Debug

   Open Terminal -> sudo apt-get install php-xdebug

4. Check "Window->Preferences->Installed PHPs" ->Debuger -> XDebug [from dropdown]



Enjoy

Wednesday, April 7, 2021

Filezilla FTP zip file Uncompress / Extract

1. Copy the below code and paste it into a file and name it unzip.php

2. Copy this file to your current directory in ftp location where zip files are there. 

3. type your url/unzip.php  [ ex: infovijay.com/unzip.php ]

4. now you can see the screen like below. select the zip file and click unzip archieve. ENJOY.

tkx Andreas.



unzip.php


<?php

/**

 * The Unzipper extracts .zip or .rar archives and .gz files on webservers.

 * It's handy if you do not have shell access. E.g. if you want to upload a lot

 * of files (php framework or image collection) as an archive to save time.

 * As of version 0.1.0 it also supports creating archives.

 *

 * @author  Andreas Tasch, at[tec], attec.at

 * @license GNU GPL v3

 * @package attec.toolbox

 * @version 0.1.1

 */

define('VERSION', '0.1.1');


$timestart = microtime(TRUE);

$GLOBALS['status'] = array();


$unzipper = new Unzipper;

if (isset($_POST['dounzip'])) {

  // Check if an archive was selected for unzipping.

  $archive = isset($_POST['zipfile']) ? strip_tags($_POST['zipfile']) : '';

  $destination = isset($_POST['extpath']) ? strip_tags($_POST['extpath']) : '';

  $unzipper->prepareExtraction($archive, $destination);

}


if (isset($_POST['dozip'])) {

  $zippath = !empty($_POST['zippath']) ? strip_tags($_POST['zippath']) : '.';

  // Resulting zipfile e.g. zipper--2016-07-23--11-55.zip.

  $zipfile = 'zipper-' . date("Y-m-d--H-i") . '.zip';

  Zipper::zipDir($zippath, $zipfile);

}


$timeend = microtime(TRUE);

$time = round($timeend - $timestart, 4);


/**

 * Class Unzipper

 */

class Unzipper {

  public $localdir = '.';

  public $zipfiles = array();


  public function __construct() {

    // Read directory and pick .zip, .rar and .gz files.

    if ($dh = opendir($this->localdir)) {

      while (($file = readdir($dh)) !== FALSE) {

        if (pathinfo($file, PATHINFO_EXTENSION) === 'zip'

          || pathinfo($file, PATHINFO_EXTENSION) === 'gz'

          || pathinfo($file, PATHINFO_EXTENSION) === 'rar'

        ) {

          $this->zipfiles[] = $file;

        }

      }

      closedir($dh);


      if (!empty($this->zipfiles)) {

        $GLOBALS['status'] = array('info' => '.zip or .gz or .rar files found, ready for extraction');

      }

      else {

        $GLOBALS['status'] = array('info' => 'No .zip or .gz or rar files found. So only zipping functionality available.');

      }

    }

  }


  /**

   * Prepare and check zipfile for extraction.

   *

   * @param string $archive

   *   The archive name including file extension. E.g. my_archive.zip.

   * @param string $destination

   *   The relative destination path where to extract files.

   */

  public function prepareExtraction($archive, $destination = '') {

    // Determine paths.

    if (empty($destination)) {

      $extpath = $this->localdir;

    }

    else {

      $extpath = $this->localdir . '/' . $destination;

      // Todo: move this to extraction function.

      if (!is_dir($extpath)) {

        mkdir($extpath);

      }

    }

    // Only local existing archives are allowed to be extracted.

    if (in_array($archive, $this->zipfiles)) {

      self::extract($archive, $extpath);

    }

  }


  /**

   * Checks file extension and calls suitable extractor functions.

   *

   * @param string $archive

   *   The archive name including file extension. E.g. my_archive.zip.

   * @param string $destination

   *   The relative destination path where to extract files.

   */

  public static function extract($archive, $destination) {

    $ext = pathinfo($archive, PATHINFO_EXTENSION);

    switch ($ext) {

      case 'zip':

        self::extractZipArchive($archive, $destination);

        break;

      case 'gz':

        self::extractGzipFile($archive, $destination);

        break;

      case 'rar':

        self::extractRarArchive($archive, $destination);

        break;

    }


  }


  /**

   * Decompress/extract a zip archive using ZipArchive.

   *

   * @param $archive

   * @param $destination

   */

  public static function extractZipArchive($archive, $destination) {

    // Check if webserver supports unzipping.

    if (!class_exists('ZipArchive')) {

      $GLOBALS['status'] = array('error' => 'Error: Your PHP version does not support unzip functionality.');

      return;

    }


    $zip = new ZipArchive;


    // Check if archive is readable.

    if ($zip->open($archive) === TRUE) {

      // Check if destination is writable

      if (is_writeable($destination . '/')) {

        $zip->extractTo($destination);

        $zip->close();

        $GLOBALS['status'] = array('success' => 'Files unzipped successfully');

      }

      else {

        $GLOBALS['status'] = array('error' => 'Error: Directory not writeable by webserver.');

      }

    }

    else {

      $GLOBALS['status'] = array('error' => 'Error: Cannot read .zip archive.');

    }

  }


  /**

   * Decompress a .gz File.

   *

   * @param string $archive

   *   The archive name including file extension. E.g. my_archive.zip.

   * @param string $destination

   *   The relative destination path where to extract files.

   */

  public static function extractGzipFile($archive, $destination) {

    // Check if zlib is enabled

    if (!function_exists('gzopen')) {

      $GLOBALS['status'] = array('error' => 'Error: Your PHP has no zlib support enabled.');

      return;

    }


    $filename = pathinfo($archive, PATHINFO_FILENAME);

    $gzipped = gzopen($archive, "rb");

    $file = fopen($destination . '/' . $filename, "w");


    while ($string = gzread($gzipped, 4096)) {

      fwrite($file, $string, strlen($string));

    }

    gzclose($gzipped);

    fclose($file);


    // Check if file was extracted.

    if (file_exists($destination . '/' . $filename)) {

      $GLOBALS['status'] = array('success' => 'File unzipped successfully.');


      // If we had a tar.gz file, let's extract that tar file.

      if (pathinfo($destination . '/' . $filename, PATHINFO_EXTENSION) == 'tar') {

        $phar = new PharData($destination . '/' . $filename);

        if ($phar->extractTo($destination)) {

          $GLOBALS['status'] = array('success' => 'Extracted tar.gz archive successfully.');

          // Delete .tar.

          unlink($destination . '/' . $filename);

        }

      }

    }

    else {

      $GLOBALS['status'] = array('error' => 'Error unzipping file.');

    }


  }


  /**

   * Decompress/extract a Rar archive using RarArchive.

   *

   * @param string $archive

   *   The archive name including file extension. E.g. my_archive.zip.

   * @param string $destination

   *   The relative destination path where to extract files.

   */

  public static function extractRarArchive($archive, $destination) {

    // Check if webserver supports unzipping.

    if (!class_exists('RarArchive')) {

      $GLOBALS['status'] = array('error' => 'Error: Your PHP version does not support .rar archive functionality. <a class="info" href="http://php.net/manual/en/rar.installation.php" target="_blank">How to install RarArchive</a>');

      return;

    }

    // Check if archive is readable.

    if ($rar = RarArchive::open($archive)) {

      // Check if destination is writable

      if (is_writeable($destination . '/')) {

        $entries = $rar->getEntries();

        foreach ($entries as $entry) {

          $entry->extract($destination);

        }

        $rar->close();

        $GLOBALS['status'] = array('success' => 'Files extracted successfully.');

      }

      else {

        $GLOBALS['status'] = array('error' => 'Error: Directory not writeable by webserver.');

      }

    }

    else {

      $GLOBALS['status'] = array('error' => 'Error: Cannot read .rar archive.');

    }

  }


}


/**

 * Class Zipper

 *

 * Copied and slightly modified from http://at2.php.net/manual/en/class.ziparchive.php#110719

 * @author umbalaconmeogia

 */

class Zipper {

  /**

   * Add files and sub-directories in a folder to zip file.

   *

   * @param string $folder

   *   Path to folder that should be zipped.

   *

   * @param ZipArchive $zipFile

   *   Zipfile where files end up.

   *

   * @param int $exclusiveLength

   *   Number of text to be exclusived from the file path.

   */

  private static function folderToZip($folder, &$zipFile, $exclusiveLength) {

    $handle = opendir($folder);


    while (FALSE !== $f = readdir($handle)) {

      // Check for local/parent path or zipping file itself and skip.

      if ($f != '.' && $f != '..' && $f != basename(__FILE__)) {

        $filePath = "$folder/$f";

        // Remove prefix from file path before add to zip.

        $localPath = substr($filePath, $exclusiveLength);


        if (is_file($filePath)) {

          $zipFile->addFile($filePath, $localPath);

        }

        elseif (is_dir($filePath)) {

          // Add sub-directory.

          $zipFile->addEmptyDir($localPath);

          self::folderToZip($filePath, $zipFile, $exclusiveLength);

        }

      }

    }

    closedir($handle);

  }


  /**

   * Zip a folder (including itself).

   *

   * Usage:

   *   Zipper::zipDir('path/to/sourceDir', 'path/to/out.zip');

   *

   * @param string $sourcePath

   *   Relative path of directory to be zipped.

   *

   * @param string $outZipPath

   *   Relative path of the resulting output zip file.

   */

  public static function zipDir($sourcePath, $outZipPath) {

    $pathInfo = pathinfo($sourcePath);

    $parentPath = $pathInfo['dirname'];

    $dirName = $pathInfo['basename'];


    $z = new ZipArchive();

    $z->open($outZipPath, ZipArchive::CREATE);

    $z->addEmptyDir($dirName);

    if ($sourcePath == $dirName) {

      self::folderToZip($sourcePath, $z, 0);

    }

    else {

      self::folderToZip($sourcePath, $z, strlen("$parentPath/"));

    }

    $z->close();


    $GLOBALS['status'] = array('success' => 'Successfully created archive ' . $outZipPath);

  }

}

?>


<!DOCTYPE html>

<html>

<head>

  <title>File Unzipper + Zipper</title>

  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

  <style type="text/css">

    <!--

    body {

      font-family: Arial, sans-serif;

      line-height: 150%;

    }


    label {

      display: block;

      margin-top: 20px;

    }


    fieldset {

      border: 0;

      background-color: #EEE;

      margin: 10px 0 10px 0;

    }


    .select {

      padding: 5px;

      font-size: 110%;

    }


    .status {

      margin: 0;

      margin-bottom: 20px;

      padding: 10px;

      font-size: 80%;

      background: #EEE;

      border: 1px dotted #DDD;

    }


    .status--ERROR {

      background-color: red;

      color: white;

      font-size: 120%;

    }


    .status--SUCCESS {

      background-color: green;

      font-weight: bold;

      color: white;

      font-size: 120%

    }


    .small {

      font-size: 0.7rem;

      font-weight: normal;

    }


    .version {

      font-size: 80%;

    }


    .form-field {

      border: 1px solid #AAA;

      padding: 8px;

      width: 280px;

    }


    .info {

      margin-top: 0;

      font-size: 80%;

      color: #777;

    }


    .submit {

      background-color: #378de5;

      border: 0;

      color: #ffffff;

      font-size: 15px;

      padding: 10px 24px;

      margin: 20px 0 20px 0;

      text-decoration: none;

    }


    .submit:hover {

      background-color: #2c6db2;

      cursor: pointer;

    }

    -->

  </style>

</head>

<body>

<p class="status status--<?php echo strtoupper(key($GLOBALS['status'])); ?>">

  Status: <?php echo reset($GLOBALS['status']); ?><br/>

  <span class="small">Processing Time: <?php echo $time; ?> seconds</span>

</p>

<form action="" method="POST">

  <fieldset>

    <h1>Archive Unzipper</h1>

    <label for="zipfile">Select .zip or .rar archive or .gz file you want to extract:</label>

    <select name="zipfile" size="1" class="select">

      <?php foreach ($unzipper->zipfiles as $zip) {

        echo "<option>$zip</option>";

      }

      ?>

    </select>

    <label for="extpath">Extraction path (optional):</label>

    <input type="text" name="extpath" class="form-field" />

    <p class="info">Enter extraction path without leading or trailing slashes (e.g. "mypath"). If left empty current directory will be used.</p>

    <input type="submit" name="dounzip" class="submit" value="Unzip Archive"/>

  </fieldset>


  <fieldset>

    <h1>Archive Zipper</h1>

    <label for="zippath">Path that should be zipped (optional):</label>

    <input type="text" name="zippath" class="form-field" />

    <p class="info">Enter path to be zipped without leading or trailing slashes (e.g. "zippath"). If left empty current directory will be used.</p>

    <input type="submit" name="dozip" class="submit" value="Zip Archive"/>

  </fieldset>

</form>

<p class="version">Unzipper version: <?php echo VERSION; ?></p>

</body>

</html>


Tuesday, February 18, 2020

Joomla ERROR: The archive file is corrupt, truncated or archive parts

Open configuration.php

Modify 
public $tmp_path = '../tmp';
public $tmp_path = 'tmp';

TO [add slash only]
public $tmp_path = '/tmp';

Tuesday, August 27, 2019

Telegram - Broadcast or Send Message through Programming Java Python C# VB

1. Create a bot token through @botfather.
           1.1 Install Telegram
           1.2 Login to telegram
           1.3 on Search window type @botfather and select
           1.4 type one by one until you see Done !, Congratulations , your token
                     /start
                     /newbot
                    drvautobot     (username)
                   
                   Done !, ...
                   token    123456:dsfd..

2. Copy this token and keep it.
   
3. Open telegram and create new channel.
     Ex: autobot
     3.1 open autobot channel window
     3.2 click on top to see administrators , click
     3.3 search @drvautobot (bot username), select
     3.4 assign as administrator

Thats it.
Now use browser or programing with GET method.

browser
https://api.telegram.org/bot/sendMessage?chat_id=@&text=hello

ex: https://api.telegram.org/bot123456:dsfdadsfsdfdsfahgjhgsfd/sendMessage?chat_id=@autobot&text=hello

response 
{"ok":true,"result":{"message_id":2,"chat":{"id":-1001493064021,"title":"Autobot","username":"infovijay","type":"channel"},"date":1566909775,"text":"hello"}}




open your channel window and see the text hello.


Enjoy

Thursday, April 26, 2018

PHP curl to upload a FILE with POST data



$ch = curl_init();

$fname = 'd:/temp/xxx.jpg';   
//windows
$cfile = new CURLFile(realpath($fname));
//linux
//$cfile = new CURLFile(realpath($fname), 'application/octet-stream', 'filename.pdf');

$data = array('param' => 'value', 
'param2' => 'value2',
'param3' => '{"jsonkey1":"jsonvalue1","jsonkey2":"jsonvalue2"}',
'file' => $cfile
);

curl_setopt($ch, CURLOPT_URL, 'https://api-url');
//return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('cache-control: no-cache','Content-Type: multipart/form-data'));
//curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

$response  = curl_exec($ch);

$err = curl_error($ch);

//echo "INfo : ".implode(',',curl_getinfo($ch));

curl_close($ch);

if ($err) {
  echo "cURL Error #: " . $err;
} else {
  echo "Success : ".$response;
}

?>

Wednesday, March 7, 2018

PHP - Aes-256-cbc Encrypt Decrypt with IV vector


function encrypt_decrypt($action, $string) {
    $output = false;
    $encrypt_method = "aes-256-cbc";
    $secret_key = 'abcdefghi1234567890';
    $secret_iv = '';
 
// hash
    $key = hash('sha256', $secret_key);
    echo "

".$key;

    // iv - encrypt method AES-256-CBC expects 16 bytes - else you will get a warning
    $iv = substr(hash('sha256', $secret_iv), 0, 16);
    if ( $action == 'encrypt' ) {
        $output = openssl_encrypt($string, $encrypt_method, $key, 0, $iv);
        $output = base64_encode($output);
    } else if( $action == 'decrypt' ) {
        $output = openssl_decrypt(base64_decode($string), $encrypt_method, $key, 0, $iv);
    }
    return $output;
}
$plain_txt = "I am vijay";
echo "

Plain Text =" .$plain_txt. "\n";
$encrypted_txt = encrypt_decrypt('encrypt', $plain_txt);
echo "

Encrypted Text = " .$encrypted_txt. "\n";

$decrypted_txt = encrypt_decrypt('decrypt', $encrypted_txt);
echo "

Decrypted Text =" .$decrypted_txt. "\n";

if ( $plain_txt === $decrypted_txt ) echo "

SUCCESS";
else echo "

FAILED";
echo "\n";

?>



Output

Plain Text =I am vijay

681448fb66d8704c7d52f6770f6087882db21c899fe48d21012a587bbe70cdd3

Encrypted Text = THRtUkJYWFUzb1NzUFRoOUw5T3Q2UT09

681448fb66d8704c7d52f6770f6087882db21c899fe48d21012a587bbe70cdd3

Decrypted Text =I am vijay

SUCCESS

PHP - Encrypt / Decrypt with out IV Vector with AES-256-CBC



const PASSWORD = 'abcdefghi1234567890';
const CIPHER_METHOD = 'AES-256-CBC';

function encrypt($str) {
    $val = openssl_encrypt($str, CIPHER_METHOD, hash('sha256', PASSWORD, true));
    return $val;    
}

function decrypt($str) {
   return openssl_decrypt($str, CIPHER_METHOD, hash('sha256', PASSWORD, true));
}

$plain_data = 'I am vijay';

$encrypted = encrypt($plain_data);
echo "Encrypted : ".$encrypted."

";


$decrypted = decrypt($encrypted);
echo "Decrypted : ".$decrypted."

";


?>


Output

: openssl_encrypt(): Using an empty Initialization Vector (iv) is potentially insecure and not recommended in D:\php\test.php >

Encrypted :
zmuNrqZ+GwtQC5B0riJoMw==

Decrypted : I am vijay


Tuesday, June 14, 2016

Slim Framework - Global PHP reference Steps Installation

1. Download composer_setup.exe for windows
install it -> select php.exe from xampp/php/


2 Copy composer.phar from C:\ProgramData\ComposerSetup\bin [hidden folder] to D:\php\ [apache root directory]

3. type to install vendor folder [slim setups]
    D:\php> php composer.phar require slim/slim

4. create your root folder (ex: test) and in your index.php..
    add ../vendor/autoload.php

ex:index.php
 
   
    use \Psr\Http\Message\ServerRequestInterface as Request;
    use \Psr\Http\Message\ResponseInterface as Response;

    require '../vendor/autoload.php';

    $app = new \Slim\App;
    $app->get('/', function (Request $request, Response $response) {
         $response->getBody()->write("Welcome");
    });

    $app->get('/home/{name}', function (Request $request, Response $response) {
        $name = $request->getAttribute('name');
        $response->getBody()->write("Hello, $name");
   
        return $response;
    });
    $app->run();




5. run apache and in browser    http://localhost:8888/test/




Slim Framework - PHP Install Steps

1. Download composer_setup.exe for windows
install it -> select php.exe from xampp/php/

2. create a folder where your xampp root folder
    Create folder
    D:\works\beyond\php\test
    D:\works\beyond\php\test\src
    D:\works\beyond\php\test\src\public


2.1 Copy composer.phar from C:\ProgramData\ComposerSetup\bin [hidden folder] to X:\test\src

//install slim
3. X:\test\src> php composer.phar require slim/slim

//extra dependencies
4. X:\test\src> composer install

5. SVN commit with vendor folder as ignore. that will take care by composer.phar composer.lock composer.json.

6. Create a file X:\test\src\public\index.php
    write your program.
   

7. RUN xampp and type http://localhost:8888/test/src/public/

FOR REST API
*************

1. Go to xampp/apache/conf/httpd.conf change to doc root/directory to D:/test/public
2. restart the apache
3. api url. http://localhost:8888/hello/vijay

Hit Counter


View My Stats