Xml 在Magento系统配置中设置密码字段的默认值

Xml 在Magento系统配置中设置密码字段的默认值,xml,magento,encryption,configuration,passwords,Xml,Magento,Encryption,Configuration,Passwords,为系统配置字段设置默认值很容易理解(通过@alan storm和从@alan storm),但密码字段不同,因为它们在保存到数据库时是加密的。因此,当Magento从config.xml读取默认值时,它会尝试解密该值,如果默认值为明文,则会失败 是否有XML帮助程序或流程(除了使用$setup->setConfigData('config/path/here',md5('default'))创建设置脚本以指定这些默认值之外) 我不是100%确定(这是一个快速的grep),但我认为密码加密发生在

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

是否有XML帮助程序或流程(除了使用
$setup->setConfigData('config/path/here',md5('default'))
创建设置脚本以指定这些默认值之外)

我不是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需要能够解读被篡改的内容。因此,您可以使用core helper的
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
请记住,每个存储区都有自己的加密密钥,因此这对于分发模块没有用处

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


希望有帮助

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


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

。。。不幸的是,_beforeSave:)