Php 用于在cookie上存储数据的AES加密
我需要在一个cookie上存储尽可能多的字符,并在AES中加密存储字符字符串 cookie有大约4kb的内存 所以我需要计算我可以在一个cookie中存储多少字符,并在AES中加密所有这些字符 要存储的字符是字母数字字符串 编辑:我可以允许所有的UTF-8字母数字字符都是纯文本和chipertext 这是我的代码Php 用于在cookie上存储数据的AES加密,php,cookies,encryption,aes,formula,Php,Cookies,Encryption,Aes,Formula,我需要在一个cookie上存储尽可能多的字符,并在AES中加密存储字符字符串 cookie有大约4kb的内存 所以我需要计算我可以在一个cookie中存储多少字符,并在AES中加密所有这些字符 要存储的字符是字母数字字符串 编辑:我可以允许所有的UTF-8字母数字字符都是纯文本和chipertext 这是我的代码 <?php $Pass = "132ksjcngpt04938idjsk39urtokg"; $Clear = "123hryd{}ls.-''ksllasllallall
<?php
$Pass = "132ksjcngpt04938idjsk39urtokg";
$Clear = "123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123hryd{}ls.-''ksllasllallallallallal:{}::{}jdhhfn123456789012345678901234567890123456789o";
$crypted = fnEncrypt($Clear, $Pass);
echo "Encrypred: ".$crypted."<br></br>";
$newClear = fnDecrypt($crypted, $Pass);
echo "Decrypred: ".$newClear."<br></br>";
function fnEncrypt($sValue, $sSecretKey)
{
return trim(
base64_encode(
mcrypt_encrypt(
MCRYPT_RIJNDAEL_128,
$sSecretKey, $sValue,
MCRYPT_MODE_ECB,
mcrypt_create_iv(
mcrypt_get_iv_size(
MCRYPT_RIJNDAEL_128,
MCRYPT_MODE_ECB
),
MCRYPT_RAND)
)
)
);
}
function fnDecrypt($sValue, $sSecretKey)
{
return trim(
mcrypt_decrypt(
MCRYPT_RIJNDAEL_128,
$sSecretKey,
base64_decode($sValue),
MCRYPT_MODE_ECB,
mcrypt_create_iv(
mcrypt_get_iv_size(
MCRYPT_RIJNDAEL_128,
MCRYPT_MODE_ECB
),
MCRYPT_RAND
)
)
);
}
?>
chiperText由3040个utf-8字符组成
加密最多4056个utf-8字符如果我错了,请纠正我,但假设您将utf-8用作纯文本的字母数字字符,因为AES使用16字节长度的块(在本上下文中可以视为16个字母数字字符),您的纯文本至少填充了15字节(最糟糕的情况) 因此,给定
n
纯文本的长度,可以通过以下公式推断出密码文本的长度:
(n + 16) - (n % 16)
只要我的2美分。
Dario。如果使用经过身份验证的流模式,如AES-GCM,原始密文大小(以字节为单位)将比明文大小大32字节。其中16个用于随机静脉注射,16个用于MAC 现在的问题是,任意字节都不是有效的UTF-8,因此需要一些编码来解决这个问题。Base64是一种流行的变体,但它将大小增加到原始大小的4/3。
这意味着,如果您的大小限制为4KB,您将能够支持高达3040字节的明文 还有其他更有效的编码,但这会变得更复杂,您需要找出哪些字符是有效的(例如
\0
)。除非绝对必要,否则我不建议这样做
您的代码有很多错误:
MCRYPT\u DEV\u uradom
而不是MCRYPT\u RAND
1) AES不是散列。2) 输出大小取决于链接模式。你用哪一种?CBC?3) 您可能需要添加一个IV和一个MAC,否则它可能不安全。4) 字符和字节不是一回事(假设是一个健全的类型系统)。@CodesInChaos谢谢你的信息我是这个论点的新手我想了解一下,我编辑了我的答案以便更好地向你展示(希望我的英语好)我需要做什么;)你对角色的定义还不清楚。明文中允许哪些字符,密文中允许哪些字符?@CodesInChaos明文中允许所有utf-8字母数字字符密文是加密数据1)您假设的是CBC模式2)AES的输出不是有效的utf-8,因此您需要使用Base64这样的编码来增加大小。3) 如果有人能在我的房间里点些东西,你的配方奶漏了IV,MACi会变成疯子的head@CodesInChaos我知道你有答案,请给我ti:))我打算使用CBC模式,没问题吧?CBC会增加额外的开销(1-16字节),你仍然需要IV+MAC。CBC有点烦人,因为你需要自己添加一个MAC,这很容易出错。我推荐使用随机IV的AES-GCM(使用加密PRNG)。它包括身份验证和加密。我更新了一个问题,你能检查我的代码并编辑吗?@Ispuk这和我预测的差不多。如果你加上IV和MAC,你将得到4096个字符,这是你想要的最大4KB。您仍然需要修复我指出的缺陷,或者您的加密不安全。不,您需要比我更了解php的人。
(n + 16) - (n % 16)