问题标签 [encryption-asymmetric]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
59960 浏览

c# - 如何在 C# 中使用 RSA 加密文件(大数据)

我是加密新手。我需要实现非对称加密算法,我认为它使用私钥/公钥。我开始使用 RSACryptoServiceProvider 的示例。可以加密小数据。但是当在相对较大的数据“2行”上使用它时,我得到异常 CryptographicException “Bad Length”!

然后我找到了一些使用 CryptoStream 加密大数据(或文件)的示例,并且只使用了 DES 或 3DES 等对称算法,这些算法具有 CreateEncryptor 函数以返回 ICryptoTransform 作为 CryptoStream 构造函数的输入之一!!!

使用 RSA 加密文件的方法是什么?

0 投票
4 回答
2029 浏览

encryption - 使用硬件加密设备(例如 USB 加密狗/密钥库)而不是使用软件库是否有正当理由?

如果您的应用程序需要加密/解密数据(出于各种原因),您是否有任何理由使用硬件设备(例如 USB 加密设备 - 如马克思 CryptoBox)而不是使用软件加密库(如 .net Cryptography或自己编写)并将您的密钥保存在安全的密钥库中?

我正在就此事寻求一些客观的看法。


缩小提出的问题范围: 如果使用 USB 加密加密狗的系统安装在物理安全的服务器保险库中,并且只有一个系统存在(即它不是分发和运行的软件产品),您会怎么看?许多台式机)?用非常简单的术语来说,上述系统的目的是验证(解密和比较)一段传入的加密数据。


到目前为止,感谢您的出色回答!

0 投票
1 回答
6722 浏览

c# - 使用证书公钥验证java中的签名

我希望将一些 C# 代码转换为 Java 中的等效代码。

C# 代码采用一些字符串内容和一个签名(使用私钥在单独的机器上生成)并与公钥相结合,它验证签名匹配,提供一定程度的保证,即请求没有被篡改。

公钥本身是一个 X509 证书 - 由 .cer 文件构建,存储为程序集资源,即

我想做的是在 Java 中模拟这个功能,所以我可以验证 C# 中的一些代码生成的签名......我已经开始研究 Java 的加密功能,但我有点像 java 菜鸟. 到目前为止,这是我想出的:

任何人都可以提供有关我如何验证签名的任何见解 - 或提供一些资源的链接,这些资源可能比磨坊 java 文档的运行更好地解释 java.crypto 和 java.security.cert 的用法。

0 投票
3 回答
285 浏览

c# - 是否可以仅从已知客户端强制执行 Web 服务调用?

设想:

我可以完全控制的公开可用的 Web 服务。但我只希望这个特定的桌面应用程序(我发布的应用程序)能够访问 Web 服务。我可以在桌面客户端中存储一个秘密密码,但这很容易破解。

是否有任何已知的实现可以强制执行此操作?PKI,非对称密钥?

0 投票
6 回答
1815 浏览

signing - 为什么我们不应该在非对称密码系统中使用私钥进行加密?

在非对称密码系统的标准使用中,使用公钥进行加密,使用私钥进行解密。

反过来,“用私钥加密”称为“签名”。

尽管有术语和缺乏直接工具,但标准工具允许实现使用私钥进行加密的加密系统。

谁能清楚地解释为什么这种解决方案容易受到攻击?

用户案例:

假设 Alice 想以一种非传统的方式向 Bob 发送一些东西:

爱丽丝和鲍勃曾经见过面,爱丽丝给了鲍勃一个“公钥”,这个“公钥”是由她创建的私钥生成的,但她警告鲍勃要保密。而且她将私钥保密,并且从未将公钥提供给其他任何人。

Bob 是否可以确定他从 Alice 那里收到的消息(假设这些消息是由 Alice 私钥加密的)只能由他读取(假设他真的将 Alice 的公钥副本保密)?

以及如何将这种加密可靠性与传统方式进行比较,在我们的例子中,传统方式是 Bob 向 Alice 发送消息(由 Alice 的公钥加密)?

问题是关于什么的

非对称密钥被命名为“私有”和“公共”这一事实无助于理解我的问题。密钥具有基础属性,是我在广播“公钥”,使其具有“公共”属性。请在回答之前明确区分:我不是在考虑这些密钥的“公共”和“私有”属性,而是“私有密钥”加密与“公共密钥”加密的可靠性。

即使在这种特殊情况下具有误导性,我也不能使用其他术语。

我知道这种情况是非传统的,可能会导致一些不一致,或者不是非对称加密系统的重点,因为 Bob 和 Alice 在这里共享某种共同的秘密,而这不是非对称加密的重点。

我看到几个 Stackoverflow 答案表明“私钥”和“公钥”是可交换的(请阅读下面的答案)。这对于 RSA 来说是不正确的,因为从密钥生成公钥是微不足道的,并且反过来保证在计算上不可行。对于非信徒,在 openssl 中使用 RSA 生成密钥的过程是:

  1. 生成密钥
  2. 从密钥中提取公钥。

如果“私钥”和“公钥”之间存在如此大的差异,那么“私钥”加密与传统的“公钥”加密之间是否存在稳固性差异?

长选答案的简短答案

对“私钥”到底是什么的误解对我没有帮助。“私钥”有两种不同的定义。“实用私钥”和“理论私钥”。

来自 RSA 理论的理论私钥与公钥具有数学对称性:

  • 你不能从另一个中推断出一个
  • 无论哪种方式,加密都同样可靠

出于效率原因,来自 RSA 工具(如 openssl)的实用私钥包含附加信息,并且通常,部分公钥甚至是按约定设置的。这些假设打破了对称性:

  • 从“实用私钥”中获取公钥是微不足道的
  • 但加密仍然同样可靠

有关更多详细信息,请参阅所选答案!如果仍有误解,请发表评论...

编辑说明:

  • 非对称加密系统密钥对经常被宣传为可交换的(即使在当前的 stackoverflow 答案中也是如此),我试图反思这样一个事实,即它可能是危险的误解,因为在现实生活工具中并非如此。
  • 添加了用户案例,我希望这能澄清我的问题
  • 添加了最终的“简短答案”
0 投票
1 回答
613 浏览

pgp - PGP - GnuPG - 几个问题

我想使用 GnuPG ( http://www.gnupg.org/ ),它是完全替代 PGP 的开源软件。

该软件看起来很棒,虽然我以前从未使用过它。

我将使用该软件加密文件以通过网络传输,我不使用该软件来发送电子邮件。

我有几个问题:

  1. Windows 和 Ubuntu 有哪些推荐的 GUI?

  2. 我想生成一个密钥对,它是 Diffee Hellman (DH/DSS) 而不是 RSA。执行此操作的行命令是什么?以及使用 2048 的密钥长度。

  3. 一旦我生成了我的公钥-私钥对,我如何通过命令行签署别人的公钥?

0 投票
2 回答
3110 浏览

c# - 使用 RSA 实施许可证验证

我即将出售我用 C# 编写的程序,并且我想严格控制它的许可证。这意味着我想让客户端每次启动时都连接到我的服务器。这也使我能够禁用密钥(在贝宝退款或代码分发的情况下)。当然这对其他用户来说可能是个麻烦,但在这种情况下是必要的。由于我找不到任何未破解的好的 .NET Licensing 系统,我想自己编写一个小系统。我的计划是执行以下操作:

  1. 生成一个包含 1024 个字符的 key.dat,随软件一起提供(每个用户都有)
  2. 在应用程序入口点向我的服务器添加一个 httprequest,它发送 key.dat + 当前时间戳,加密。
  3. 我的 HTTP 服务器(运行 PHP)解密请求并检查密钥是否有效(在我的数据库中)并回复“访问级别”(许可证类型)。如果密钥无效或被禁用,它会回复错误代码。就像请求一样,回复是用时间戳加盐的,因此某人无法通过向自己发送有效数据包来验证他的程序。正在客户端中检查时间戳。回复使用 RSA 和先前生成的公钥加密。
  4. 客户端收到响应,用私钥解密并做出反应。

RSA 是否是正确的方法,所以我可以确保数据包是由我发送的,而不是由我制作的(没有其他人拥有公钥)?有没有更好的方法来解决这个问题?

0 投票
4 回答
50830 浏览

c# - RSA 加密,长度变差

调用以下函数时:

我现在收到错误:长度错误。

使用较小的字符串它可以工作,任何问题可能是我传递的字符串的任何想法都在 200 个字符以下。

0 投票
2 回答
1374 浏览

c# - Java 加密 C# 解密

我有一个 RSA 加密数据并传递给 C# 的模块。C# 需要根据公钥(64 位编码)和传递的令牌对其进行解密。

我有令牌,64 位编码的公钥,可以帮助我开始使用示例。我从 Java 端所知道的是,它正在使用。我已经从 Java 端得到了结果,需要用 C# 编写一个解析器来解密它。我将公钥和令牌都作为字符串值。

谢谢

0 投票
4 回答
20815 浏览

.net - rsacryptoserviceprovider 使用 x509 证书 c#

我正在使用由 makecert 生成的具有私钥和公钥的证书。java 端使用此公钥加密数据,.net 将其解密回来。

我正在尝试解密 Java 的加密 64 位编码字符串并获取错误数据。

为了查看.Net 端是否一切正常,我首先尝试使用公钥加密,然后使用相同的证书使用私钥解密。我的代码看起来像这样。

即使在这里我也得到了错误。我错过了什么吗?

证书看起来对公钥和私钥都有效。