Twofish(双鱼)加密/解密,用于对文本进行Twofish加密和Twofish解密,支持多种工作模式。
Twofish(双鱼)是布鲁斯·施奈尔带领的项目组于1998年研发的分组密码算法。美国国家标准技术研究所(NIST)公开招募的高级加密标准(AES)决赛算法之一,但最终并未当选高级加密标准。Twofish的标志性特点是它采用了和密钥相关的替换盒(S盒)。密钥输入位的一半被用于“真正的”加密流程进行编排并作为Feistel的轮密钥使用,而另一半用于修改算法所使用的S盒,Twofish的密钥编排非常复杂。
Twofish加密/解密算法是一种可逆的对称加密算法,这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥,一般用于服务端对服务端之间对数据进行加密/解密。作为可逆且对称的块加密,Twofish加密算法的速度比公钥加密等加密算法快很多,但是要求加密端和解密端双方都使用相同的密钥是Twofish算法的主要缺点之一。
Twofish常见的工作模式为:ECB,CBC,OFB,CFB,CFB8,CTR,GCM,除了ECB无须设置初始化向量IV而不安全之外,其它Twofish工作模式都必须设置向量IV,其中GCM工作模式较为特殊。
Twofish-GCM工作模式注意事项:
块密码只能对确定长度的数据块进行处理,而消息的长度通常是可变的,因此需要选择填充模式。
初始化向量IV可以有效提升安全性,但是在实际的使用场景中,它不能像密钥KEY那样直接保存在配置文件或固定写死在代码中,一般正确的处理方式为:在加密端将IV设置为一个16位的随机值,然后和加密文本一起返给解密端即可。
加解密参数需要完全一致才能成功,为防止乱码和保证正确的传输结果,加解密文本一律使用Base64编码的字符串。