当我尝试使用CI加密库加密字符串时,返回的字符串非常大,大约178个字符长。是否有任何方法可以减少字符串的长度。 默认密码是:AES-128。
假设:$data=$this->encryption->encrypt("welcome to ooty");
它返回178长度的字符串值..我需要将它减少到20以下
更新:当我加密数字时,例如6,它返回178个长字符串。
答案 0 :(得分:2)
加密不会减少数据长度。
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字节。
所有这些额外购买安全性。根据您的使用情况,可能并非所有必要,请咨询加密领域专家。
答案 1 :(得分:1)
你可以使用密码,密码模式和HMAC算法的不同组合来增加更少的数据开销,但是没有 - 得到的cipherText不会减少到20 - 单独的HMAC将导致至少28字节。
另外,根据您的描述判断("大约178个字符"),plainText本身超过20个字节...加密不是压缩,您不能期望得到的结果cipherText的长度小于plainText。
答案 2 :(得分:0)
嗯,你可以做substr($encodedString, 0, 20)
,但这将是一个 很糟糕的想法
您将大大减少加密字符串的熵,从而降低该加密的安全性。这有点长的原因!