在X处拆分字符串,然后在Y值处拆分

时间:2013-06-10 20:23:23

标签: php

我有以下代码:

$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循环返回:

  

CipheredTextCount = 64

     

IVCount = 2

     

KeyCount = 16

现在我的问题。让我们看一下TextCount为44的第一个例子

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

 echo implode("",$Field);

哪个输出:

ijGglH/vysf52J5aoTaDVHy4oavEBK4mZTrAL3lZMTI=16III#TcTf‡eB12T

根据strlen

的结果

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


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

  

检索长字符串&gt;将字符串拆分为原始数组&gt;推   <另一个函数的数组>解密&gt;返回已解码的字符串。

2 个答案:

答案 0 :(得分:1)

为什么不使用serialize呢?然后,当您从数据库中获取数据时,可以使用unserialize将其还原为数组。

答案 1 :(得分: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)

            );
        }