![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-analytics/Model/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Analytics\Model; use Magento\Framework\Exception\LocalizedException; /** * Class for encrypting data. */ class Cryptographer { /** * Resource for handling MBI token value. * * @var AnalyticsToken */ private $analyticsToken; /** * Cipher method for encryption. * * @var string */ private $cipherMethod = 'AES-256-CBC'; /** * @var EncodedContextFactory */ private $encodedContextFactory; /** * @param AnalyticsToken $analyticsToken * @param EncodedContextFactory $encodedContextFactory */ public function __construct( AnalyticsToken $analyticsToken, EncodedContextFactory $encodedContextFactory ) { $this->analyticsToken = $analyticsToken; $this->encodedContextFactory = $encodedContextFactory; } /** * Encrypt input data. * * @param string $source * @return EncodedContext * @throws LocalizedException */ public function encode($source) { if (!is_string($source)) { try { $source = (string)$source; } catch (\Exception $e) { throw new LocalizedException( __( 'The data is invalid. ' . 'Enter the data as a string or data that can be converted into a string and try again.' ) ); } } elseif (!$source) { throw new LocalizedException(__('The data is invalid. Enter the data as a string and try again.')); } if (!$this->validateCipherMethod($this->cipherMethod)) { throw new LocalizedException(__('The data is invalid. Use a valid cipher method and try again.')); } $initializationVector = $this->getInitializationVector(); $encodedContext = $this->encodedContextFactory->create([ 'content' => openssl_encrypt( $source, $this->cipherMethod, $this->getKey(), OPENSSL_RAW_DATA, $initializationVector ), 'initializationVector' => $initializationVector, ]); return $encodedContext; } /** * Return key for encryption. * * @return string * @throws LocalizedException */ private function getKey() { $token = $this->analyticsToken->getToken(); if (!$token) { throw new LocalizedException(__('Enter the encryption key and try again.')); } return hash('sha256', $token); } /** * Return established cipher method. * * @return string */ private function getCipherMethod() { return $this->cipherMethod; } /** * Return each time generated random initialization vector which depends on the cipher method. * * @return string */ private function getInitializationVector() { $ivSize = openssl_cipher_iv_length($this->getCipherMethod()); return openssl_random_pseudo_bytes($ivSize); } /** * Check that cipher method is allowed for encryption. * * @param string $cipherMethod * @return bool */ private function validateCipherMethod($cipherMethod) { $methods = array_map( 'strtolower', openssl_get_cipher_methods() ); $cipherMethod = strtolower($cipherMethod); return (false !== array_search($cipherMethod, $methods)); } }