2

为系统配置字段设置默认值很容易理解(通过Chapagain和@alanstorm的博客文章),但密码字段不同,因为它们在保存到数据库时是加密的。因此,当 Magento 从 config.xml 中读取默认值时,它会尝试解密该值,如果默认值是明文,则会失败。

$setup->setConfigData('config/path/here', md5('default'))是否有用于指定这些默认值的 XML 帮助程序或进程(除了创建设置脚本 to with )?

4

2 回答 2

3

我不是 100% 确定(这很快grep),但我认为密码加密发生在

File: app/code/core/Mage/Adminhtml/Model/System/Config/Backend/Encrypted.php 
protected function _beforeSave()
{
    $value = (string)$this->getValue();
    // don't change value, if an obscured value came
    if (preg_match('/^\*+$/', $this->getValue())) {
        $value = $this->getOldValue();
    }
    if (!empty($value) && ($encrypted = Mage::helper('core')->encrypt($value))) {
        $this->setValue($encrypted);
    }
}

请记住,这是一种加密,而不是散列。由于您要存储密码以在某处使用(最常见的是支付 API),因此 Magento 需要能够解读已加密的内容。encrypt因此,您可以使用核心助手的方法生成这些值。你也可以试试这样的

$o = Mage::getModel('adminhtml/system_config_backend_encrypted');
$o->setData('value','encrypted or unencrypted value');

$o->beforeSave();     //to encrypt the value

$o->afterLoad();      //to unencrypted the value

$password = $o->getValue();  //fetch the value

请记住,每个商店都有自己的加密密钥,因此这对于分发模块没有用处。

您还应该在加载和处理过程中查看backend_model属性(自我链接免责声明,未在 Internet 上的其他任何地方记录) 。config.xml

希望有帮助。

于 2012-06-22T03:23:53.783 回答
2

这是一个有趣的问题/思想实验,但目前的行为似乎是合理的。如果一个值的数据存储需要加密,我无法想象一个函数值以纯文本形式出现在文件系统的任何地方,无论是在 config.xml 还是在安装/升级脚本中。

唯一的另一种选择是自己加密,这可能是不可取的,因为您必须分发并因此了解密钥值。

于 2012-06-22T03:54:15.023 回答