4

我有以下代码:

$Field = $FW->Encrypt("Test");

echo "<pre>";
print_r($Field);
echo "</pre>";
#  $IV_Count = strlen($Field['IV']);
#  $Key_Count = strlen($Field['Key']);
#  $Cipher_Count = strlen($Field['CipheredText']);

foreach ($Field AS $Keys => $Values){
    echo $Keys."Count = ".strlen($Values)."<br><br>";
}

输出如下:

Array
(
    [CipheredText] => x2nelnArnS1e2MTjOrq+wd9BxT6Ouxksz67yVdynKGI=
    [IV] => 16
    [Key] => III#TcTf‡eB12T
)

CipheredTextCount = 44

IVCount = 2

KeyCount = 16

无论输入如何,IV/KeyCount 总是返回相同的值。但是CipheredTextCount会根据输入而变化。例如:

 $Field = $FW->Encrypt("This is a longer string");

foreach循环返回:

密码文本计数 = 64

IVCount = 2

键数 = 16

现在我的问题。让我们以 TextCount 为 44 的第一个示例为例

如何拆分字符串implode("",$Field);以显示为原始数组?一个例子是:

 echo implode("",$Field);

哪个输出:

ijGglH/vysf52J5aoTaDVHy4oavEBK4mZTrAL3lZMTI=16III#TcTf‡eB12T

根据strlen?

可以将第$Cipher_Count一个的计数存储在数据库中以供参考


我当前的设置涉及将密钥和 IV 存储在远离密文字符串的单独列中。我需要将其包含在一个字段中,并且脚本处理所需的信息以执行以下操作:

检索长字符串 > 将字符串拆分到原始数组 > 将数组推送到另一个函数 > 解密 > 返回解码后的字符串。

4

2 回答 2

1

为什么不使用序列化呢?然后当你从数据库中取出数据时,你可以使用unserialize将它恢复到一个数组中。

于 2013-06-10T20:44:13.210 回答
0
$Combined_Field =  implode("",$Field);

    echo $str1 = substr($Combined_Field, 0, $Cipher_Count)."<br><br>";
    echo $str2 = substr($Combined_Field,$Cipher_Count,$IV_Count)."<br><br>";
    echo $str3 = substr($Combined_Field, $IV_Count+$Cipher_Count,$Key_Count);

或者使用一个函数:

function Cipher_Split($Cipher, $Cipher_Count, $KeyCount, $IVCount){
            return array(
                "Ciphered Text" => substr($Cipher,0,$Cipher_Count),
                "IV" => substr($Cipher,$Cipher_Count,$IVCount),
                "Key" => substr($Cipher,$IVCount+$Cipher_Count,$KeyCount)

            );
        }
于 2013-06-10T20:49:28.360 回答