gpt4 book ai didi

java - Java 中的 DSA 与 RSA 和 AES128 与 AES256 加密

转载 作者:行者123 更新时间:2023-11-30 07:27:59 32 4
gpt4 key购买 nike

动态搜索广告和自适应搜索广告

不在于谁强。

我一直在互联网上研究这个主题,下面是我得到的信息摘要。能否请您告知是否正确,以及是否还有其他重要问题我没有在这里提及。

这里我只讨论 DSA 和 RSA 在 Java 上的应用。我的主要目标 - 使用公钥算法将 session key (AES) 从客户端发送到服务器,然后检查客户端的真实性。

动态搜索广告。
1.在 Java 中,您应该使用私钥加密文件。
2.这意味着它是一个签名——任何拥有公钥的人都可以阅读它,但只有所有者才能签名。
3.如果您尝试将公钥用作私钥,反之亦然,您会遇到麻烦,因为通过私钥猜测公钥并不难。
4.您实际上不能使用 DSA 发送 session key ,因为每个人都可以解密它。

RSA。
1.在 Java 中,您应该使用公钥加密文件。
2.这意味着这是将 secret 消息传递给特定收件人的最佳方式。签名后,除所有者外,任何人都无法阅读。
3.如果你尝试相互切换 key 会带来麻烦(同上)
4.您可以有效地为客户端使用 RSA 发送使用服务器的公开 key 加密的 session key ,然后从使用客户端的公开 key 签名的服务器接收确认。

基于此,我决定将 RSA 用于我的目的。

AES256 与 AES128

另一个不相关的问题 - 您认为对于没有任何极其敏感数据的 session 加密,使用 AES256 是否有意义?

我愿意,但它会给最终用户带来问题。我知道安装允许 256 位 key 的 Java 更新非常容易,但可悲的事实是,即使是这样简单的事情也会将潜在用户群减少一半。

另一方面 - 如果我不发送敏感信息(如信用卡号)并且每个 key 的使用时间不超过几天,也许 AES128 就足够了吗?

显然,我将为那些不介意安装更新的用户提供使用 AES256 的选项。

感谢任何评论!

最佳答案

如您所知,DSA 只是一种签名算法,不是加密算法,因此不适合 key 交换。

如果你有在线连接(而不仅仅是从一个点到另一个点的传输),你可以使用 Diffie-Hellman(它基于类似 DSA 的想法),并在签名模式下使用 DSA 或 RSA 来验证对方避免中间人攻击。

除此之外,RSA key 交换也很常见(即发送使用服务器的 RSA key 加密的 key AES key )。

对于 AES 变体,AES-128 应该在任何时候都是安全的(即暴力破解所花的时间应该比你活的时间还长)。只有一个更大的 key 变体,因为美国军方希望对不同的东西使用不同级别的安全性。 (而且,AES-256 最近显示出一些 AES-128 中没有的(理论上的)弱点,这可能意味着 AES-128 实际上更安全。)

但正如 Kerrek 评论的那样,不要尝试发明自己的协议(protocol),使用现有协议(protocol)。你会犯其他人以前犯过的所有错误,并添加新的错误。 (如果你愿意,你可以自己实现这些协议(protocol),但重用现有的实现通常也更容易和更安全——即使使用安全协议(protocol),也有很多事情会出错,比如使用错误的随机数。)

对于在线(双向)通信,SSL(或者现在更好的它的后继者 TLS)是必经之路。在 Java 中,它作为 SSLEngine 可用。类(如果你想使用异步 I/O),或使用 SSL(Server)SocketFactory(用于普通套接字读/写)。我将其用于小程序/服务器通信(用于我的项目 fencing-game )。

对于离线(单向)通信(如电子邮件)或存储,请使用 PGP 数据格式(也可以使用 RSA 和 AES)。 (不过,我不知道现有的 Java 实现。)

关于java - Java 中的 DSA 与 RSA 和 AES128 与 AES256 加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9368620/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com