当前位置: 首页 > 面试题库 >

加密(模式和填充)

欧阳飞
2023-03-14
问题内容

我的任务是编写一个涉及加密的小型Java控制台应用程序。我对加密不熟悉,因此我必须先阅读一些内容。到目前为止,给出的高级要求是应使用AES-256生成一次性密钥来加密文件。

之后,应使用收件人的公共密钥(RSA-2048)来加密该AES-256一次性密钥。然后将加密的文件和加密的一次性AES-256密钥压缩并发送给收件人。

从我对读取的加密和解密的了解中,除了算法(RSA,AES等)之外,还有所谓的模式和填充。例如,以下代码将RSA指定为算法,ECB模式和PKCS1Padding。

Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");

加密和解密中必须使用相同的算法,模式和填充。因此,我合理地去问用户他们想要什么模式和填充?

我注意到,Cipher cipher = Cipher.getInstance(“ RSA”)似乎使用ECB的默认模式和PKCS1Padding的填充,因此此代码行与上面的代码相同。那么可以确定默认将ECB模式和PKCS1Padding模式用于RSA-2048吗?


问题答案:

不可以,对于发送消息,您应该使用较新的OAEP方案,因为带有PKCS#1 v1.5的RSA可能容易受到Bleichenbacher攻击。但是,请求RSA混合加密的人完全有可能甚至从未听说过该攻击。通常,PKCS#1 v1.5填充仍被用作默认值。

除非唯一的用户是密码学的学生(并且了解上述攻击),否则您永远不要期望用户为您做出安全决策。通常,安全性不应过分依赖于教育用户。

我个人当然会向请求者询问有关填充的信息。您还应该检查对称加密是否需要认证(MAC,HMAC,认证密码或签名)。如果他/她不能回答问题,那么他们可能对加密的了解不多。

我目前不会认为您所获得的要求是完整的(尽管“出于学习目的”可能是一个借口)。

笔记
"RSA/ECB/PKCS1Padding"实际上没有实现ECB模式加密。应该调用"RSA/None/PKCS1Padding"它,因为它只能用于加密单个明文块(或者实际上是密钥)。这只是Sun / Oracle的命名错误。

还有一种称为RSA-KEM的混合加密模式,该模式应至少与RSA OAEP一样安全,但尚未在Java SE中实现。

AES-256本身不应该用于“生成一次密钥”。您应该使用一个实例KeyGenerator生成一次AES-256密钥(这可能有点命名混乱,因为它KeyGenerator本身不使用AES,而是为AES创建密钥)。



 类似资料:
  • 我的任务是编写一个涉及加密的小型Java控制台应用程序。我对加密不熟悉,所以我必须先读一读。到目前为止,给出的高级要求是AES-256应该用于生成一个一次性密钥来加密文件。 之后,应使用收件人的公钥(RSA-2048)加密该AES-256一次性密钥。加密的文件和加密的一次性AES-256密钥然后将被拉链并发送给收件人。 根据我对加密和解密的理解,除了算法(RSA、AES等)之外,还有一些叫做模式和

  • 我正在尝试将aes-128-cbc加密与openssl一起使用,我希望密钥需要32位。但是,我注意到当我输入密钥长度为18时,openssl不会给我错误。 但是,如果我在密钥后添加0,直到它是32位,我仍然会得到相同的结果。 有文档说OpenSSL给键添加了填充吗? 编辑:我需要在代码中重现此行为。我得到了密钥,但不能保证密钥是多少位数。

  • 本文向大家介绍Java实现SSH模式加密,包括了Java实现SSH模式加密的使用技巧和注意事项,需要的朋友参考一下 Java实现SSH模式加密的实现原理思路分享给大家。 一、SSH加密原理 SSH是先通过非对称加密告诉服务端一个对称加密口令,然后进行验证用户名和密码的时候,使用双方已经知道的加密口令进行加密和解密,见下图: 解释:SSH中为什么要使用非对称加密,又使用对称加密,到底有什么用处?到底

  • 在Android中生成RSA密钥对。Android中包含了Bouncy castle的删减版本: Python中的加密: Android解密。android中包含了Bouncy castle的删减版本: 测试密钥:

  • 问题内容: 我希望用户能够单击表,并根据他们单击的行-它会用与该行相关的内容(MYSQL查询)填充模式,并打开模式。 我尝试执行以下操作:-加载表内容-使用jQuery单击表时-使用AJAX通过单击的行信息发布到PHP文件-使用行信息执行MYSQL查询- 填充具有收集的内容的模态-打开模态 我遇到的问题是,因为这是一条MYSQL语句,并且该函数是非阻塞的,所以在模式开始打开时尚未声明变量。Web编

  • 我正在尝试将java代码转换为NodeJs代码。这有点复杂,因为定制的格式包括密码和salt。 在main方法中有一个例子。 以下是我的java代码: 我正在尝试下面这样的JS代码,但不知道我做错了什么: 它抛出一个错误: 谢谢