一般情况下,使用不同语言开发的双方只有约定加密模式和明文填充方式,保证字节序列相同,保证秘钥的生成方式与编码相同,使用相同字符编解码方式等,才可以保证加密双方的互通。
而对数据在加密时进行填充、解密时去填充则是通信双方需要重要考虑的因素。对原文进行填充的主要原因:①安全性。可以使 原文可以“伪装”在填充后的数据中,使得攻击者很难找到正真的的原文位置。②块加密算法要求原文数据长度为固定块大小的整数倍,如果加密原文不满足这个条件,则需要在加密前填充原文数据至固定块大小的整数倍。③填充也为发送方和接收方提供了一种标准的形式以约束加密原文的大小。(只有加解密双方都知道填充方式,才知道任何正确移去填充的数据并就行解密)。
常用的填充模式至少有5种,不同的编程语言实现加密时用到的填充多来于这些方式或他们的变化。
1. 常用的填充形式
1. 1 填充数据为填充字节的长度
这种填充方式中,填充字符串由一个字节序列组成,每个字节填充该字节序列的长度。假定块长度为8,原文数据长度9,则填充字节数等于0x07;如果明文数据长度为8的整数倍,则填充字节数为0x08。(0x代表16进制。)
填充字符串如下:
原文数据1:FF FF FF FF FF FF FF FF FF
填充后数据1:FF FF FF FF FF FF FF FF FF 07 07 07 07 07 07 07