8 字节纯文本的 DES 加密产生 16 字节数组

Posted

技术标签:

【中文标题】8 字节纯文本的 DES 加密产生 16 字节数组【英文标题】:DES encryption of 8 bytes plain text results in 16 bytes array 【发布时间】:2009-08-11 20:04:09 【问题描述】:

我正在使用此代码使用 8 字节密钥加密 8 字节纯文本,但结果始终是 16 字节数组。

public static byte[] Encrypt(byte[] PlainText, byte[] key)

    MemoryStream ms = new MemoryStream();
    DESCryptoServiceProvider mDES = new DESCryptoServiceProvider();
    mDES.Mode = CipherMode.ECB;
    mDES.Key = key;

    CryptoStream encStream = new CryptoStream(ms, mDES.CreateEncryptor(), CryptoStreamMode.Write);
    BinaryWriter bw = new BinaryWriter(encStream);

    bw.Write(PlainText);
    bw.Close();
    encStream.Close();

    byte[] buffer = ms.ToArray();
    ms.Close();

    return buffer;

输出的前 8 个字节是我所期望的,但其余的我不知道它是什么......这段代码有问题吗?

【问题讨论】:

【参考方案1】:

输入将使用PKCS padding 填充到下一个 块大小。 7 字节输入将被填充到 8。8-15 到 16。16-23 到 24 等等。

【讨论】:

太棒了!添加 mDES.Padding = PaddingMode.None 有效.. 谢谢 只要知道纯文本的大小就可以了。否则,您将需要特定的填充方法来确定纯文本的大小(对于查看此 Q/A 的其他人)。

以上是关于8 字节纯文本的 DES 加密产生 16 字节数组的主要内容,如果未能解决你的问题,请参考以下文章

3DES算法密钥长度说明

如何使用 DES 实现 CBC-MAC?

安卓逆向 -- 算法基础(DES与3DES)

openssl 中调用哪个函数实现16字节des密钥cbc方式加密数据?

JAVA和.NET使用DES对称加密的区别

什么是3DES对称加密算法?