问题标签 [rsa]

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 投票
3 回答
5109 浏览

c++ - 在 OpenSSL 上使用 Crypto++ 生成的 RSA 密钥

有没有办法使用我在 OpenSSL 中使用 Crypto++ API 生成的 RSA 密钥?我正在寻找的是一种以 Crypto++ 和 OpenSSL 都可以轻松打开它们的格式存储密钥的方法。

我正在编写一个许可方案,并希望使用 Crypto++ API 验证签名和解密文件,但要生成许可文件,我想使用 Web 界面(可能使用仅支持 OpenSSL 的 PHP)来生成和加密/签署许可证。

我会使用 Crypto++ 编写这两个应用程序并从 PHP 调用它,但是由于私钥将以加密形式存储,因此必须将密码传递给应用程序并在命令行上传递它似乎不是一个好的对我的想法。

0 投票
1 回答
641 浏览

c# - 为什么我不能将此数据导入到我的 RSACryptoServiceProvider?(C#.NET)

出于测试目的,我有一个要导出到 RSACryptoServiceProvider 的集合模数和私有指数。这是我的代码:

不幸的是,我得到了“坏数据”。导入参数时出错(最后一行)。(注意:我真的很讨厌这个错误。我正在经历几天的测试过程来找到原因,因为它根本不是描述性的。只要发生密码学异常,它就会被抛出)。

这个操作有什么违法的吗?

0 投票
3 回答
6177 浏览

c# - “坏钥匙。” 使用 RSACryptoServiceProvider (C#.NET) 解密时出现异常

我正在尝试解密以前在 RSA 中加密的数据(别担心,我应该能够,我有密钥。没有任何非法行为:)。

但是,我得到一个“坏钥匙”。解密线上的错误。我确信这个键是正确的,因为我是从向量中获取的。向量在以下代码中提供。从理论上讲,我有所有要解密的信息,尽管它不起作用。我想这可能是一种我还不理解的.NET 解密方式。

这是代码:

非常感谢任何见解。我已经尝试调试这个好几个星期了。字面上地。

0 投票
1 回答
948 浏览

c# - 使用 C#.NET RSA 加密数据时出现未指定的错误

我不知道如何描述我的问题。这是加密字节数组的最简单方法,我在 .Encrypt(...) 方法中确实得到了“未指定错误”。

注意:Logger.Hex 显示字节数组的十六进制字符串表示。没有任何干扰。

0 投票
3 回答
4123 浏览

c# - 如何使 RSACryptoServiceProvider 在没有填充(nopadding)的情况下工作?

我需要使 C# 应用程序与 Java 应用程序兼容。

Java 应用程序使用Cipher.getInstance("RSA/ECB/nopadding");初始化程序来生成密码 ECB 和无填充。

但是,在 C# 中,您有 2 个填充选项:OAEP 填充或 PKCS#1 v1.5 填充。我需要一个无填充版本,否则我肯定会卡在我的项目中。

我认为没有任何方法可以使 C#.NET RSACryptoServiceProvider 使用无填充方案。但是,是否有允许这种精度的 RSA 自定义类或库?

PS:C#.NET 的 RSACryptoServiceProvider ECB 是默认的吗?我找不到这方面的文档。

0 投票
5 回答
39767 浏览

java - 在 Java 中使用 RSA 私钥进行加密

我正在尝试使用 RSA 私钥加密某些内容。

我正在关注这个例子: http

://www.junkheap.net/content/public_key_encryption_java 但将其转换为使用私钥而不是公钥。按照那个例子,我认为我需要做的是:

  • 读入 DER 格式的私钥
  • 生成 PCKS8EncodedKeySpec
  • 从 KeyFactory 调用 generatePrivate() 以获取私钥对象
  • 将该私钥对象与 Cipher 对象一起使用来进行加密

所以,步骤:

密钥是从 openssl 生成的:

openssl genrsa -aes256 -out private.pem 2048

然后被转换为DER格式:

openssl rsa -in private.pem -outform DER -out private.der

我使用以下命令生成 PKCS8EncodedKeySpec:

然后生成私钥对象:

但是,在致电:

我得到:

问题:

  • 一般方法对吗?
  • PCKS8EncodedKeySpec 是正确的密钥规范吗?
  • 对无效的密钥规范错误有任何想法吗?
0 投票
3 回答
480 浏览

security - 这种架构有多安全?

我正在构建一个系统,该系统需要通过安全的 Web 连接收集一些用户敏感数据,将其安全地存储在服务器上,以便以后自动解密和重用。系统还应允许用户通过*****ze网络查看某些部分的受保护数据(例如,)和/或完全更改它。系统应提供合理的安全级别。

我在考虑以下基础设施:

应用程序(Web)服务器 1

  1. 具有适当 TLS 支持的 Web 服务器,用于安全的 Web 连接。

  2. 使用公钥算法(例如 RSA)加密输入的用户敏感数据,并通过单向出站安​​全通道(例如 ssh-2)将其发送到App Server 2 ,而不会将其存储在App Server 1DB Server 1的任何位置。

  3. 使用与用户密码相关的对称密钥算法对输入数据的某些部分(例如最后几个字母/数字)进行加密,并将其存储在DB Server 1上,供App Server 1在用户 Web 会话期间检索。

  4. 用户通过网络重新使用步骤 2 进行数据修改。

数据库服务器 1

  1. 存储不安全的非敏感用户数据。
  2. 存储在App Server 1上加密的部分敏感用户数据 (参见上面的步骤 3)

应用服务器 2

  1. 永远不要App Server 1DB Server 1发送任何内容 。
  2. 从App Server 1接收加密的用户敏感数据并将其存储在DB Server 2中。
  3. 根据本地计划从数据库服务器 2中检索加密的用户敏感数据,使用本地存储在应用服务器 2上的私钥(参见应用服务器 1,步骤 2)解密,并进行适当的密钥管理。

数据库服务器 2

  1. 存储加密的用户敏感数据(参见App Server 2,步骤 2)

如果应用程序(Web)服务器 1数据库服务器 1或两者都受到威胁,那么攻击者将无法获取任何用户敏感数据(无论是否加密)。所有攻击者都可以访问众所周知的公钥和加密算法。然而,攻击者将能够修改网络服务器以获取当前登录的用户明文密码并解密存储在 DB 服务器 1 中的部分用户敏感数据(请参阅应用服务器 1,第 3 步),我认为这没什么大不了的。攻击者将能够(通过代码修改)在潜在攻击期间拦截用户通过 Web 输入的用户敏感数据。后来我认为这是一个更高的风险,但假设攻击者很难(是吗?)在没有人注意到的情况下修改代码,我想我不应该太担心它。

如果App Server 2和私钥被泄露,那么攻击者将可以访问所有内容,但App Server 2DB Server 2不是面向 Web 的,因此应该不是问题。

这种架构有多安全?我对加密算法和安全协议如何工作的理解正确吗?

谢谢!

0 投票
2 回答
1347 浏览

c# - 如何加密/解密字符串?

跟进这个问题,我想知道 RSA 密钥是什么,以及我将如何在 C# 中创建和使用密钥。

0 投票
2 回答
2171 浏览

c# - 使用 RSA 加密的 C# 问题

我正在使用我从 MSDN 中删除的这个功能

我从这里调用方法:

但我收到此错误消息:

任何想法出了什么问题?

0 投票
2 回答
3110 浏览

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

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

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

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