我有以下代码:
$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;返回已解码的字符串。
答案 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)
);
}