像DES这样的加密算法应该应用在比特或字节上吗



我在互联网上发现了一些使用CipherInputStream或其他东西加密字节的代码示例。。。如果我有一个包含1000位的文件,我该如何在上面应用DES??我在java 中执行此操作

Java没有允许您访问小于一个字节的任何内容的基元类型。因此,您需要处理字节,而不是Java中的位。

如果我有一个包含1000位的文件,该怎么办?我该如何在上面应用DES?

使用字节。Cipher.doUpdate和Cipher.doFinal方法使用字节,而不是字节数组。使用适当的填充方案来说明任何未填充的数据。

这是一个非常合理的问题,尽管有反对票。

许多加密模式(例如CBC)要求输入是底层密码的块大小的倍数(例如,AES为16字节或DES为8字节)。为了实现这一点,使用了填充方案。是否可以对任意比特长度的明文进行加密取决于您使用的填充方案。

最常用的填充方案(即PKCS#5填充)将n个值为n的字节作为明文的前缀。这显然要求明文以字节为单位。但也有一些鲜为人知的填充方案允许任意输入。例如,所谓的"位填充"会在明文中添加一个1位,并根据需要添加尽可能多的0位,直到输入的长度是密码块大小的倍数。例如,ISO/IEC 9797-1标准提出了这一点。

在决定是否要在应用程序中支持任意比特长度时,还必须考虑要使用的加密库。虽然一些加密算法已经标准化,允许以位为单位的任意大小的输入,但它可能不会由您的加密库实现。例如,散列函数SHA-1是为4位字符串"0101"等输入定义的,但您可能很难找到一个可以实际计算此哈希的库。

相关内容

最新更新