去年 11 月份时我收到封信,有个人反映 Crypt_XXTEA 的加密结果和网上某些已有的实现不同,当时给他回复解释了一下原因。
XXTEA 是一种分块加密算法,要求块大小不能低于两个字,也就是 32 位。当字符串的长度不是 4 的整倍数时,最后一个块中的有效信息就会不足 32 位。为了加密能正常进行,需要将其填充到 32 位。但是这样解密后就会在结尾产生长度不定的垃圾数据。为了解决这个问题,Crypt_XXTEA 的初始版本会将原始字符串长度值附加到转换后的长整型数据的结尾,也成为一个待加密的 32 位块。这样解密时就可以根据记录的字符串原始长度来截断以获得正确结果。
但最近考虑到程序中的这种默认处理可能确实会给使用者造成困惑,就又将它改了改。在 0.9.0 版中,使用者可以使用自己定义的函数来进行字符串和长整型数组之间的转换了。
Link: http://pear.php.net/package/Crypt_XXTEA
XXTEA 是一种分块加密算法,要求块大小不能低于两个字,也就是 32 位。当字符串的长度不是 4 的整倍数时,最后一个块中的有效信息就会不足 32 位。为了加密能正常进行,需要将其填充到 32 位。但是这样解密后就会在结尾产生长度不定的垃圾数据。为了解决这个问题,Crypt_XXTEA 的初始版本会将原始字符串长度值附加到转换后的长整型数据的结尾,也成为一个待加密的 32 位块。这样解密时就可以根据记录的字符串原始长度来截断以获得正确结果。
但最近考虑到程序中的这种默认处理可能确实会给使用者造成困惑,就又将它改了改。在 0.9.0 版中,使用者可以使用自己定义的函数来进行字符串和长整型数组之间的转换了。
Link: http://pear.php.net/package/Crypt_XXTEA