减少 codeigniter 中的加密字符串长度

Reduce the encrypted string length in codeigniter

当我尝试使用 CI 的加密库加密字符串时,返回的字符串非常大,大约 178 个字符长。有什么方法可以减少字符串的长度。 默认密码是:AES-128。

假设:$data=$this->encryption->encrypt("welcome to ooty"); 它 returns 178 长度字符串值..我需要它减少到 20

更新:当我加密数字时,比如 6 ,它 returns 178 长字符串。

你可以 substr($encodedString, 0, 20) 但这将是一个 非常糟糕的想法™

您将大大降低加密字符串的熵,从而降低加密的安全性。这么长是有原因的!

您可以使用密码、密码模式和 HMAC 算法的不同组合,这样会增加更少的数据开销,但不会 - 生成的 cipherText 不会减少到 20 - 单独的 HMAC 会导致至少 28字节。

此外,根据您的描述 ("around 178 characters"),纯文本本身超过 20 个字节...加密不是压缩,您不能期望生成的密文长度小于纯文本。

加密不会减少数据长度。

AES加密输出长度取决于模式。 CTR 模式等流模式不会改变长度。 ECB 或 CBC 等块模式需要填充为块长度的倍数,但 PKCS#7 填充最多只会增加一个块大小的长度,AES 为 16 字节。

除了加密字节之外,还有更多的事情要做。可以使用诸如CBC的模式并且可以将IV(一个块长度)添加到加密数据之前。可以添加身份验证,这可能会添加 32 字节。可能会有密码推导,可能会添加盐和计数。最后,结果可能会被编码为 Base64 或十六进制,这将分别增加 33% 或 100% 的长度。

可能的情况:"welcome to ooty" 是 15 个字节。填充为 1 字节,验证 32 字节,盐 32 字节,计数 2 字节,版本 1 字节 = 83 字节,十六进制编码 = 166 字节,接近你得到的 178 字节。

所有这些额外的购买安全。根据您的使用情况,可能并非全部都需要,请咨询密码领域专家。