我有一个使用 Triple DES 加密和解密数据的代码。 代码一切正常。
我对 Triple Des 有疑问。 Triple DES 在执行加密过程时会改变数据大小。 我用谷歌搜索,对得到的答案感到非常困惑。
它会改变吗?如果是意味着如何找到加密数据的大小。
代码如下:
unsigned char initVector[8];
unsigned char* block;
int j;
memset(initVector, 0xEE, sizeof(initVector));
nBlocks = dwDataSize / 8;
for (i=0; i < nBlocks; i++)
{
block = (unsigned char*) pData + i*8;
memset(initVector, 0xEE, sizeof(initVector));
des_ede3_cbc_encrypt((unsigned char *)block,(unsigned char *)block, 8,
m_Schedule1 , m_Schedule2, m_Schedule3, (C_Block *)initVector, DES_ENCRYPT);
我在另一个讨论中看到大小会改变。
这是链接。 Length of Encrypted String
问候, 湿婆./
最佳答案
TripleDES 是一个分组密码原语。 block 密码的工作原理是根据 key 创建输入数据 block (应该与随机数据无法区分)的排列,只有在 key 已知的情况下才能反转。
因此,加密数据占用的空间量与输入数据完全相同(除了最后一个 block 的填充)。典型的 block 大小是 4 到 32 字节之间的任意 2 的幂。
(一个思想实验:密文不可能比输入短,因为这样两个不同的输入必须映射到相同的密文,这是不可能的。反之,如果密文更长,那么就会有某些密文永远不会成为加密的结果,因此不会“与随机数据无法区分”。)
关于c++ - TripleDes 会改变数据大小吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12347148/