Comment puis-je déchiffrer une valeur de configuration chiffrée?

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; 
}

Résultat d'écho: idfrk3-45pfnrkhwneirgplbmisniepssnie: hirtw45 True Key - 'p92GBhcQl7TklHOsWcxBk4eOmL6wpQWBG9nT2Qcf'

Magento2 Devloper
la source

Réponses:

25

Obtenez enfin le succès dans le code 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;

Partagez et aidez les autres ...

Magento2 Devloper
la source
Il renvoie une valeur vide. Comment puis-je obtenir une sortie dans un format lisible?
Emipro Technologies Pvt. Ltd
pouvez-vous partager le code d'émission?
Magento2 Devloper
20

\Magento\Framework\App\Config\ScopeConfigInterface::getValuerenverra la valeur déchiffrée. Lorsque ScopeConfigInterface::getValuerenvoie une valeur chiffrée, l'option de configuration est mal configurée . Une implémentation correcte d'une valeur de configuration chiffrée est:

Fournisseur / Module / etc / adminhtml / system.xml

Ici, nous ajoutons une valeur de configuration obscure dans le chemin que payment/webpay/keyidles choses critiques ici garantissent le fieldhas type="obscure"et les utilisations Magento\Config\Model\Config\Backend\Encrypteddu backend_model. C'est ainsi que Magento sait utiliser un champ de formulaire masqué et crypter toute entrée utilisateur lors de la sauvegarde.

<?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>

Fournisseur / Module / etc / config.xml

L'ajout backend_model="Magento\Config\Model\Config\Backend\Encrypted"ici indique à Magento que la valeur de configuration doit être déchiffrée lors de la récupération avecScopeConfigInterface::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>

Fournisseur / Module / etc / di.xml

Cela ajoute le chemin de configuration à la baie sensible et empêche la valeur du chemin d'être incluse lors du vidage de la configuration du magasin.

<?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>
Pmclain
la source
Il semble y avoir certains scénarios où cela ne fonctionne pas, dans mon cas, cela fonctionnait auparavant et il s'est cassé après que j'ai déplacé le champ dans une configuration XML de groupe incluse. Les suggestions ci-dessus ont été mises en œuvre, mais ne fonctionnent pas
snez
@snez avez-vous essayé de réenregistrer la configuration après l'avoir déplacée?
Roman Snitko
5

Si n98-magerun2.phar est installé, vous pouvez obtenir une valeur de configuration déchiffrée avec quelque chose comme:

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

Vous pouvez également définir des valeurs de configuration chiffrées à partir de la ligne de commande avec quelque chose comme:

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

Vous pouvez obtenir n98-magerun2.phar à partir d'ici: https://github.com/netz98/n98-magerun2

Silas Palmer
la source
2
N98 n'est-il pas la meilleure chose?
William Tran
Cela fonctionne également dans n98-magerun (pour Magento 1)
CCBlackburn
0

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

Vous devez remplacer \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,par le chemin de classe ci-dessous, \Magento\Payment\Gateway\ConfigInterface cela fonctionne bien,

   <?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')
    }
}
Rakesh Jesadiya
la source
Est-ce que cela vous convient?
Rakesh Jesadiya
Erreur fatale: impossible d'instancier l'interface Magento \ Payment \ Gateway \ ConfigInterface dans E: \ wamp \ www \ magento2_8 \ vendor \ magento \ framework \ ObjectManager \ Factory \ Dynamic \ Developer.php sur la ligne 73
Magento2 Devloper
avez-vous résolu le problème?
Rakesh Jesadiya
erreur irrécupérable: impossible d'instancier l'interface Magento \ Payment \ Gateway \ ConfigInterface dans E: \ wamp \ www \ magento2_8 \ vendor \ magento \ framework \ ObjectManager \ Factory \ Dynamic \ De‌ veloper.php on line 73 error.
Magento2 Devloper
essayez avec le code mis à jour ci-dessus et supprimez le dossier var.
Rakesh Jesadiya
0

Si vous souhaitez décrypter une valeur à l'aide d'une clé: Mettez le code ci-dessous dans decrypt-config-value.php à la racine de votre projet 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";

Exécutez php decrypt-config-value.php à l' aide de la console ou //yourwebsite.com/decrypt-config-value.php à l'aide d'un navigateur.

Федосимов Сергей
la source
-1

Essayez avec le code ci-dessous pour la valeur de décodage 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;
    }

}
Rakesh Jesadiya
la source
1
Échec du décodage: erreur de syntaxe "; 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
une idée de cette erreur?
Magento2 Devloper
je n'en ai aucune idée, car c'est pour le mode de paiement, j'ai travaillé pour la méthode ci-dessus pour une requête simple
Rakesh Jesadiya
erreur de syntaxe je pense définir un autre type.
Magento2 Devloper
fonctionne bien dans une requête simple ??
Magento2 Devloper