对加密的PHP对象进行排序

对加密的PHP对象进行排序,php,Php,我有一个用户表,我已经加密并存储在MySQL数据库中 当拉出数据并通过选择输入控件将其添加到表单时,我希望能够按字母顺序对项目进行排序 我正在对foreach循环的每次迭代中的项进行解密 <?php foreach ($data['crewData'] as $crew) : ?> <option value="<?php echo $inputCrew; ?>"> <?php echo decryptData($c

我有一个用户表,我已经加密并存储在MySQL数据库中

当拉出数据并通过选择输入控件将其添加到表单时,我希望能够按字母顺序对项目进行排序

我正在对foreach循环的每次迭代中的项进行解密

<?php foreach ($data['crewData'] as $crew) : ?>
   <option value="<?php echo $inputCrew; ?>">
      <?php echo decryptData($crew->user_firstName).' '.decryptData($crew->user_lastName); ?>
   </option>
<?php endforeach; ?>
我想按用户名字段进行排序。我唯一想做的就是运行一个foreach循环对数据进行解密,创建一个临时的非加密对象,然后将其呈现给select

到目前为止,我只有大约50个用户,所以开销不是太大,但随着用户数量的增加,我可以看出这是一种痛苦

按照上面的路线走行吗

$crewData = $this->userModel->getUserByType('Crew');
$array = [];
foreach ($crewData as $item) {
   $firstName = decryptData($item->user_firstName)  //decryptData() is my decryption function
   array_push($array, $firstName );
}
$arraySorted = sort($array);

我不太了解您的需求或设置,但有一个选择是将解密逻辑向上移动到数据库中。这实际上为您提供了更多的控制和安全性,因为您可以将权限应用于和

这只是一些伪代码,但看起来像

// Create a function to do the decryption
CREATE FUNCTION decrypt (input VARCHAR) 
RETURNS VARCHAR

BEGIN

   DECLARE decrypted VARCHAR;

   SET decrypted = '';

   // your decryption logic

   RETURN decrypted;

END;

// Create your view which returns the decrypted values
CREATE VIEW users_decrypted AS

    SELECT first_name, last_name FROM (
        SELECT decrypt(first_name) as first_name
            , decrypt(last_name) as last_name
            , ...
        FROM users
    ) ORDER BY first_name;
然后在您的模型中,您将使用视图,而不必担心解密实际数据

<?php
$query = 'SELECT first_name, last_name FROM users_decrypted';
...

}

我不太了解您的要求或设置,但有一种选择是将解密逻辑向上移动到数据库中。这实际上为您提供了更多的控制和安全性,因为您可以将权限应用于和

这只是一些伪代码,但看起来像

// Create a function to do the decryption
CREATE FUNCTION decrypt (input VARCHAR) 
RETURNS VARCHAR

BEGIN

   DECLARE decrypted VARCHAR;

   SET decrypted = '';

   // your decryption logic

   RETURN decrypted;

END;

// Create your view which returns the decrypted values
CREATE VIEW users_decrypted AS

    SELECT first_name, last_name FROM (
        SELECT decrypt(first_name) as first_name
            , decrypt(last_name) as last_name
            , ...
        FROM users
    ) ORDER BY first_name;
然后在您的模型中,您将使用视图,而不必担心解密实际数据

<?php
$query = 'SELECT first_name, last_name FROM users_decrypted';
...

}

在运行时解密每个属性似乎有点尴尬。您是否可以在表上创建一个进行解密的视图,然后从视图中进行选择?或者将解密逻辑向上移动到模型中,以便在您获得模型数组时,这些模型已经被解密。
要执行上述操作,这是否可行?
-是,这是可行的,但随着应用程序的增长,您可能会后悔走这条路。对表的每次更改都会在PHP中产生n个更改(视图、控制器、模型等)。在运行时解密每个单独的属性似乎有点尴尬。您是否可以在表上创建一个进行解密的视图,然后从视图中进行选择?或者将解密逻辑向上移动到模型中,以便在您获得模型数组时,这些模型已经被解密。
要执行上述操作,这是否可行?
-是,这是可行的,但随着应用程序的增长,您可能会后悔走这条路。对表的每一次更改都会在PHP(视图、控制器、模型等)中产生n个更改,感谢@Waterlomatt-我现在正在使用libnaude进行加密/解密。我需要了解更多关于MySQL加密/解密的信息,但是它对LibNasdaq是否同样有效,我假设MySQL路由可能会像你在回答中提到的那样更安全?LibNasdaq是一个很棒的库,所以如果你想继续使用它。我的建议是将您的加密/解密逻辑向上移动到您的模型中,这样您就不必处理控制器/视图中的单个属性。谢谢@Waterlomatt-我现在正在使用LibNaude进行加密/解密。我需要了解更多关于MySQL加密/解密的信息,但是它对LibNasdaq是否同样有效,我假设MySQL路由可能会像你在回答中提到的那样更安全?LibNasdaq是一个很棒的库,所以如果你想继续使用它。我的建议是将加密/解密逻辑向上移动到模型中,这样就不必处理控制器/视图中的单个属性。