Java的cipher
类支持这里列出的转换。其中有几个nopadding
变体:
但在这种情况下,像ECB或CBC这样的分组密码模式怎么能“无填充”地使用呢?假设我们使用aes/ecb/nopadding
加密一个250位的消息。明文的第一个块显然是消息的前128位。第二个明文块的最后6位是多少?
首先,您不能在任何模式下直接向cipher
提供250位的消息。原因是像大多数运行时一样,字节是可以处理的最小数据量。如果要对250位进行编码,则必须考虑以字节为单位对这些位进行编码(例如,通过指示最后一个字节中不使用的位,就像对DER编码的ASN.1定义位字符串进行值编码一样)。
设置为1的11位DER位字符串示例:
05 FF E0
这里,最后一个字节中有5个未使用的位(它们被设置为值0
)。因此,为了表明这一事实,第一个字节被简单地牺牲了--它不是值的一部分。
投掷:
· · · ……
· · · IllegalBlocksizeException
-如果此密码是块密码,则没有请求填充(仅在加密模式下),并且该密码处理的数据的总输入长度不是块大小的倍数;或者如果这种加密算法无法处理提供的输入数据。
· · · ...
注意,这是一个在我看来很糟糕的描述:在解密过程中,如果大小不是块大小的倍数,doFinally
将抛出这个异常,而不管使用了什么填充(同样,仅用于ECB和CBC模式)。只有在分组密码和操作模式解密后才会进行解压缩。
当然,在加密期间ECB&CBC模式的输出应该始终是块大小的倍数,因此这意味着密文在解密之前被截断或以其他方式更改。
对于GCM,不需要填充(内部使用CTR模式加密),因此nopadding
是唯一现实的选项,而且任何数量的数据都可以使用--但同样,cipher
加密的最小元素是一个字节。尽管GCM算法是以比特而不是字节来指定的,但此实现不支持它。
问题内容: 这是我的代码: 这是我从解释器运行输出时的结果: 如果您注意到输出,则创建巨大的列表会消耗621.5 MB,而删除它只会释放152.6 MB。当我检查文档时,我发现以下语句: 因此,我猜想它并没有删除对象本身,而只是取消了绑定。 但是,它在解除绑定方面做了什么工作,从而释放了很大的空间(152.6 MB) 。有人可以痛苦地解释我在这里发生什么吗? 问题答案: Python是一种垃圾收集
我很难理解的概念,因为根据视图,它做不同的事情。根据官方的留档,这是一个 用于根据系统窗口(如状态栏)调整视图布局的布尔内部属性。如果为true,则调整此视图的填充以为系统窗口留出空间。 现在,检查class我可以看到,当设置为时,窗口会插入(状态栏、导航栏…)应用于视图填充,该填充根据上面引用的文档工作。这是守则的相关部分: 有了新的材料设计,有了新的类别,这些类别广泛地使用了这面旗帜,这就是混
问题内容: 我听说过很多有关Spring的信息,人们在网络上都说Spring是Web开发的良好框架。Spring Framework到底是做什么用的? 问题答案: 基本上,Spring是用于依赖项注入的框架,该框架是一种允许构建高度分离的系统的模式。 问题 例如,假设你需要列出系统的用户,从而声明一个名为的接口: 也许是一个访问数据库以获取所有用户的实现: 在你看来,你需要访问一个实例(仅作为示例
@basic(optional=false)@column(nullable=false)@basic注释将属性标记为Java对象级别的非可选属性。第二个设置,列映射上的nullable=false,只负责生成NOT NULL数据库约束。Hibernate JPA实现在任何情况下都以相同的方式对待这两个选项,因此您不妨只使用其中一个注释来实现这一目的。 我很困惑。这是什么意思-属性或变量在Java
我很难理解流,以workcount为例,对于像Kafka这样的无限源,“sum”到底是做什么的? 我有点理解有时间窗的情况,因为它有开始和结束时间,对我来说就像一个“批次”,但如果没有时间窗, 什么是开始时间和结束时间