Come posso decrittografare un valore di configurazione crittografato?


11
protected $_paymentData;
protected $_scopeConfig;
protected $logger;

public function __construct(
    \Magento\Framework\Model\Context $context,
    \Magento\Framework\Registry $registry,
    \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
    \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory,
    \Magento\Payment\Helper\Data $paymentData,
    \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
    \Magento\Payment\Model\Method\Logger $logger,
    \Magento\Framework\Module\ModuleListInterface $moduleList,
    \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
    \Magento\Directory\Model\CountryFactory $countryFactory,
    \Stripe\Stripe $stripe,
    \Inchoo\Stripe\Model\StripeFactory $stripeFactory,
    array $data = array()
) {
    parent::__construct(
        $context,
        $registry,
        $extensionFactory,
        $customAttributeFactory,
        $paymentData,
        $scopeConfig,
        $logger,
        $moduleList,
        $localeDate,
        null,
        null,
        $data
    );
    $this->_scopeConfig = $scopeConfig;
    $this->logger = $logger;
    $this->initializeData($data);
}
 public function getPaymentKey(){
   $key= $this->_scopeConfig->getValue('payment/webpay/keyid');
    echo $key;
    exit; 
}

Risultato eco: idfrk3-45pfnrkhwneirgplbmisniepssnie: hirtw45 True Key - 'p92GBhcQl7TklHOsWcxBk4eOmL6wpQWBG9nT2Qcf'

Risposte:


25

Finalmente ottieni il successo nel codice Decrypt ...

protected $_encryptor;

public function __construct(
    \Magento\Framework\Encryption\EncryptorInterface $encryptor,
) {
    $this->_encryptor = $encryptor;
    parent::__construct($context);
}
$test = 'dfrk3-45pfnrkhwneirgplbmisniepssnie';
$test = $this->_encryptor->decrypt($test);
echo $test;

Condividi e aiuta gli altri ...


Restituisce un valore vuoto. Come posso ottenere output in formato leggibile?
Emipro Technologies Pvt. Ltd.

puoi condividere il codice di emissione?
Magento2 Devloper,

20

\Magento\Framework\App\Config\ScopeConfigInterface::getValuerestituirà il valore decrittografato. Quando ScopeConfigInterface::getValuerestituisce un valore crittografato, l'opzione di configurazione è impostata in modo errato . Una corretta implementazione di un valore di configurazione crittografata è:

Venditore / modulo / etc / adminhtml / system.xml

Qui aggiungiamo un oscuro valore di configurazione nel percorso che payment/webpay/keyidle cose critiche qui stanno garantendo l' fieldha type="obscure"e gli usi Magento\Config\Model\Config\Backend\Encryptedper il backend_model. Ecco come Magento sa usare un campo modulo mascherato e crittografare qualsiasi input dell'utente al momento del salvataggio.

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
    <system>
        <section id="payment">
            <group id="webpay">
                <field id="keyid" translate="label" type="obscure" sortOrder="100" showInDefault="1" showInWebsite="1" showInStore="0">
                    <label>Key Id</label>
                    <backend_model>Magento\Config\Model\Config\Backend\Encrypted</backend_model>
                </field>
            </group>
        </section>
    </system>
</config>

Venditore / modulo / etc / config.xml

L'aggiunta backend_model="Magento\Config\Model\Config\Backend\Encrypted"qui dice a Magento che il valore di configurazione dovrebbe essere decifrato quando recuperato conScopeConfigInterface::getValue

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
    <default>
        <payment>
            <webpay>
                <keyid backend_model="Magento\Config\Model\Config\Backend\Encrypted" />
            </webpay>
        </payment>
    </default>
</config>

Venditore / modulo / etc / di.xml

Ciò aggiunge il percorso di configurazione all'array sensibile e impedisce l'inclusione del valore del percorso durante il dumping della configurazione dell'archivio.

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Config\Model\Config\TypePool">
        <arguments>
            <argument name="sensitive" xsi:type="array">
                <item name="payment/webpay/keyid" xsi:type="string">1</item>
            </argument>
        </arguments>
    </type>
</config>

Sembra che ci siano alcuni scenari in cui questo non funziona, nel mio caso funzionava prima e si è rotto dopo che ho spostato il campo in una configurazione xml del gruppo inclusa. I suggerimenti di cui sopra sono stati implementati, ma non funzionano
snez

@snez hai provato a salvare nuovamente la configurazione dopo averla spostata?
Roman Snitko,

5

Se hai installato n98-magerun2.phar, puoi ottenere un valore di configurazione decrittografato con qualcosa del tipo:

php bin/n98-magerun2.phar config:store:get --decrypt payment/webpay/keyid

Puoi anche impostare valori di configurazione crittografati dalla riga di comando con qualcosa del tipo:

php bin/n98-magerun2.phar config:store:set --encrypt payment/webpay/keyid NEW_KEY_ID_VALUE_HERE

È possibile ottenere n98-magerun2.phar da qui: https://github.com/netz98/n98-magerun2


2
n98 non è la cosa migliore?
William Tran,

Questo funziona anche in n98-magerun (per Magento 1)
CCBlackburn il

0

You can try with below method for payment encryption method to get value,

Devi sostituire \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,con il seguente percorso di classe, \Magento\Payment\Gateway\ConfigInterface Funziona benissimo,

   <?php
/**
 * Copyright © 2015 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Vendor\Module\Gateway\Http;

use Magento\Payment\Gateway\Http\TransferBuilder;
use Magento\Payment\Gateway\Http\TransferFactoryInterface;
use Magento\Payment\Gateway\Http\TransferInterface;
use Magento\Payment\Gateway\ConfigInterface;

class TransferFactory implements TransferFactoryInterface
{
    private $config;

    private $transferBuilder;

    public function __construct(
        ConfigInterface $config,
        TransferBuilder $transferBuilder
    ) {
        $this->config = $config;
        $this->transferBuilder = $transferBuilder;
    }


    public function getPaymentKey()
    {
        echo $this->config->getValue('payment/webpay/keyid')
    }
}

Questo lavoro fa per te?
Rakesh Jesadiya,

Errore irreversibile: impossibile creare un'istanza dell'interfaccia Magento \ Payment \ Gateway \ ConfigInterface in E: \ wamp \ www \ magento2_8 \ vendor \ magento \ framework \ ObjectManager \ Factory \ Dynamic \ Developer.php sulla linea 73
Magento2 Devloper

hai risolto il problema?
Rakesh Jesadiya,

nessun errore irreversibile: impossibile creare un'istanza dell'interfaccia Magento \ Payment \ Gateway \ ConfigInterface in E: \ wamp \ www \ magento2_8 \ vendor \ magento \ framework \ ObjectManager \ Factory \ Dynamic \ De‌ veloper.php alla riga 73.
Magento2 Devloper,

provare con il codice sopra aggiornato e rimuovere la cartella var.
Rakesh Jesadiya,

0

Nel caso in cui desideri decrittografare un valore usando una chiave: inserisci il codice seguente in decrypt-config-value.php nella radice del tuo progetto magento.

<?php

use Magento\Framework\App\Bootstrap;
require __DIR__ . '/app/bootstrap.php';

$bootstrap = Bootstrap::create(BP, $_SERVER);

$obj = $bootstrap->getObjectManager();

$state = $obj->get('Magento\Framework\App\State');
$state->setAreaCode('frontend');


######################################################################################################################

/**
 * @var \Magento\Framework\Encryption\EncryptorInterfaceFactory $ef
 */
$ef = $obj->get('Magento\Framework\Encryption\EncryptorInterfaceFactory');

class CustomDeploymentConfig extends \Magento\Framework\App\DeploymentConfig {
    public function get($key = null, $defaultValue = null)
    {
        return '8343d1c27ee612c73131c0ec693ed86e';
    }
}

/**
 * @var CustomDeploymentConfig $d
 */
$d = $obj->get(CustomDeploymentConfig::class);

/**
 * @var \Magento\Framework\Encryption\EncryptorInterface $e
 */
$e = $ef->create(['deploymentConfig' => $d]);

echo ">>>", $e->decrypt('encripted-value-here'), "<<<\n";

Esegui php decrypt-config-value.php utilizzando la console o //yourwebsite.com/decrypt-config-value.php utilizzando un browser.


-1

Prova con il codice seguente per il valore di decodifica json,

class Paymentmodule
{
    protected $jsonEncoder;
    protected $jsonDecoder;

    public function __construct(
        ..//
        \Magento\Framework\Json\DecoderInterface $jsonDecoder
    ) {
        ..//
        $this->jsonDecoder = $jsonDecoder;
    }

    public function getPaymentKey()
    {
        $key= $this->_scopeConfig->getValue('payment/webpay/keyid');
        $config = $this->jsonDecoder->decode($key);
        echo $key;
    }

}

1
Decodifica non riuscita: errore di sintassi "; i: 1; s: 10720:" # 0 E: \ wamp \ www \ magento2_8 \ vendor \ magento \ framework \ Json \ Decoder.php (20): Zend_Json :: decode ('0: 2: 234SyEIM4aj ... ') # 1 E: \ wamp \ www \ magento2_8 \ vendor \ magento \ module-checkout \ Controller \ Onepage \ Success.php (58): Magento \ Framework \ Json \ Decoder-> decode (' 0: 2: 234SyEIM4aj ... ')
Magento2 Devloper

qualche idea su questo errore?
Magento2 Devloper,

non ne ho idea, perché questo è per il metodo di pagamento, ho lavorato per il metodo sopra per una semplice query
Rakesh Jesadiya,

errore di sintassi penso che definire altri tipi.
Magento2 Devloper,

funziona bene in una query semplice ??
Magento2 Devloper,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.