- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
动态搜索广告和自适应搜索广告
不在于谁强。
我一直在互联网上研究这个主题,下面是我得到的信息摘要。能否请您告知是否正确,以及是否还有其他重要问题我没有在这里提及。
这里我只讨论 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/
有没有办法在java中将DSA私钥转换为字符串或字节[]? 最佳答案 您调用 key 的 getEncoded() 方法。 相关: Save the Signature and the Public
这是设置: 我使用 .NET 创建公钥/私钥对,我想签署一个字符串。我获取一个随机字符串,从中获取一个 byte[],对其进行签名,然后在 java 应用程序中获取签名。我想在java中验证它((!)
如果我使用 Crypto++ 为 DSA 生成私钥和公钥: CryptoPP::AutoSeededRandomPool rng; CryptoPP::DSA::PrivateKey privateK
我正在使用 this MSDN article 中给出的示例关于 DSACryptoServiceProvider 类。问题是每次运行代码时我都会得到不同的签名。 我尝试了 OpenSSL 并没有遇到
我错过了什么吗?来自 FIPS180-2 ,在第 25 页,它给出了 u1、u2、g^u1 mod p、y^u2 mod p 和 v 的值。我已经计算了除 v 之外的所有值。但是,当我进行数学运算时,
当你执行 ssh-keygen -t ssh-dss 它生成两个文件:一个包含公钥,另一个包含私钥。 ssh-keygen man-page说它总是生成一个 1024 位 key ,但是当我打开公钥文
作为项目实现的一部分,我做了以下事情:1. 通用 DSA key 2.使用AES加密私钥3.保存到文件中4.打开文件并读取加密后的私钥5. 我尝试将读取的值转换为主键格式,但出现错误。我在这里附上上述
我正在尝试使用 DSA 证书签署一些数据。我将证书保存在内存中(它是使用 openssl gendsa 命令生成的)。 我的函数看起来像这样,我的问题是 res = EVP_SignFinal。这里函
有人可以让我放心,看看这个设置是否会验证文件是否来 self 。知道这有多安全以及任何潜在的攻击媒介会很棒。 使用 DSACryptoServiceProvider 创建公钥和私钥。 添加公钥作为应用
我在我的应用程序中使用 Sparkle 进行更新,但在文档中它说要生成 DSA 签名并提供一个工具来做(该工具是用 ruby 编码的)但我不知道如何使用它.有人可以帮忙吗? 这是文档所在的位置(第
我目前正在开发的共享软件注册系统将公共(public) DSA key 嵌入到可执行文件本身中,而私钥驻留在服务器上。 (为了讨论,我们假设服务器是 100% 安全的,任何人都无法获得私钥。) 每当购
看来它们都是需要公钥和私钥的加密算法。为什么我要选择其中之一来在我的客户端服务器应用程序中提供加密? 最佳答案 检查AVA's answer below . 我的旧答案似乎是错误的 关于encrypt
我收到了一个(非常)简单的 DSA 问题,并且已经找到了 key 和其他变量。为了验证签名,我需要以某种方式翻译方程: V = [(y^u1*h^u2)mod p] mod q 转换为 BigInte
有人知道 Python 中用于签名消息的纯 DSA 模块吗? 最佳答案 如果 OpenSSL 具有您正在寻找的功能,请尝试 pyOpenSSL . 关于python - Python 中的 DSA 模
我想使用 M2Crypto 创建一个 DSA_pub 对象来验证 DSA 签名。我知道 q、p、g 和公钥,但我知道实例化 DSA 对象的唯一方法是使用: dsa = DSA.set_params(q
我在使用 Python/M2Crypto 验证 DSA 签名时遇到问题。签名是在 Java 中生成的,使用标准的 java.security.Signature 类,带有 Sun 的加密提供程序和 S
在CentOS下有的时候用yum安装软件的时候最后会提示: 复制代码 代码如下: warning: rpmts_HdrFromFdno: Header V3
最小化安装后,安装rpm包时经常会遇到 复制代码 代码如下: warning: rpmts_HdrFromFdno: Header V3 DSA signature: NOKE
是否有人可以使用工具来区分 RSA 公钥和 DSA 公钥?我有两个 SSH .pub 文件,我需要知道它们是 RSA 还是 DSA。 最佳答案 正如其他答案中所述,由于文件是 SSH.COM 格式,您
假设我有一个如下所示的 DSA 公钥: -----BEGIN PUBLIC KEY----- MIIBuDCCASwGByqGSM44BAEwggEfAoGBAOwYAcAzXpuw+XCXuNp5z
我是一名优秀的程序员,十分优秀!