首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

分组加解密有关Final函数如EncryptFinal,怎么确定最后一部分实际有多大

2013-08-16 
分组加解密有关Final函数如EncryptFinal,如何确定最后一部分实际有多大?以加密为例,PKCS#11 与 OPENSSl都

分组加解密有关Final函数如EncryptFinal,如何确定最后一部分实际有多大?
以加密为例,PKCS#11 与 OPENSSl都有 
EncryptInit
EncryptUpdate
EncryptFinal

关于前两者,我能够理解(或者是部分理解)

但对最后的EncryptFinal 我不理解,参数中,只有两个带出加密后数据的参数
那么内部是如何确定最后一部分实际有多长的呢?

由于不理解,我不知道调用 EncryptFinal 函数的正确时机。

(看了PKCS#11文档例子,使用des的时候,是把源数据长度设置成正好8的倍数。我是每1024字节为一段来加密任意长度的文件,就是不知道这最后一块到底怎么处理……)
加密 解密 分组加解密
[解决办法]
没用过OPENSSl,做加密解密都是很久以前的事了。

我们在用分组密码加密时,密文总是比明文要长1~2个分组。在加密前会先生成一个随机分组放在前面,同明文一同加密,而每个明文分组时都会先与前一分组的密文异或。而到最后一个分组时,有两种情况:
1:明文正好占据一个分组,则追加一个随机分组,最后一个字节置为0.
2:明文不足一个分组,则用随机数填充分组的其余字节,并把最后一个分组中的明文长度写入最后一个字节。

而在解密时,第一个分组的抛弃掉,其余每个分组解密后再与前一分组的密文异或。最后一个分组解密后,根据最后一个字节的数值决定将这一分组的前n个字节加入到明文中。

不知道OPENSSL的函数中有没有作上面这两种处理,你可以用一些简短的数据测试一下,看一看不同长度数据的密文长度和解密后的明文长度。

热点排行