问题标签 [public-key-encryption]

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 投票
4 回答
5669 浏览

encryption - 如何在 WinCrypt 中生成和使用公钥加密

我目前正在尝试使用 Windows Cryptography API 并遇到一些 Public-Key-Cryptography 问题。我可以找到很多关于如何加密项目的示例,但没有直接解决从头到尾的公钥模型。

这是我当前代码如何生成加密密钥对的粗略概述,为了便于阅读,我删除了错误检查代码

我的两个导出密钥不同,但都能够在不加载另一个密钥的情况下解密消息。此外,如果我在加载导出的公钥的新会话中加密新消息,我仍然可以使用任一密钥对其进行解密。

谁能告诉我我可能做错了什么或错过了什么?我完全走错了路吗?

0 投票
2 回答
3853 浏览

java - 使用 Java 和 OpenSSL 进行公钥加密

在应用程序中,我想存储敏感数据(可以任意大),以便以后可以用于研究。关键是我不希望数据不受保护地散布,所以我想在保存之前对其进行加密。

在另一台计算机上(在更可靠的环境中)我想稍后解密该数据。应该可以使用现成的工具进行解密,例如 OpenSSL。现在我的问题是:我该怎么做?

我已经知道抽象步骤:

  1. 一劳永逸地生成一个公钥/私钥对。
  2. byte[]使用公钥在 Java 中加密 a ,并将其存储在某处。
  3. 将加密数据复制到“更安全”的计算机。
  4. 使用简单的 OpenSSL 命令行解密保存的数据。

我现在缺少的是细节:

  • 我需要什么样的密钥对?
  • 我应该使用什么加密方案?(可能类似于“rsa 加密对称密钥,然后用该密钥加密数据”)
  • 简单的 OpenSSL 命令行是什么样的?

[2011-02-13 更新]

经过一番研究,我找到了一个页面,它准确地描述了我想做的事情:http ://blog.altudov.com/2010/09/27/using-openssl-for-asymmetric-encryption-of-backups/ 。基本上我第 4 步的答案是这个命令行:

现在我的问题是:如何从 Java 生成格式与 OpenSSL 兼容的文件,以便可以使用此命令行解压缩它?我想每秒执行数百次,因此调用外部进程似乎太慢了。这就是为什么我想直接用 Java 来做。

0 投票
2 回答
6103 浏览

java - Java 中的 RSA 加密:跨平台问题?

情况

我正在使用 Java 中的 RSA 加密。我正在尝试在配备 Cyanogenmod 的 Android 2.2 的 HTC Saphire (32B) 开发人员手机上加密数据,然后在运行 Mandriva Linux 2010 的 64 位服务器上解密所述数据。我在两台机器上使用相同的公钥、私钥对,可以在Android手机上正确加密/解密数据,可以在Linux服务器上正确加密/解密数据,但是我无法在手机上加密数据,然后在服务器上解密。我得到糟糕的填充异常。我已经确认手机正确发送了数据,并且服务器正在正确解析数据。因此,我无法弄清楚为什么解密失败。谁能帮我这个?也许Java中的RSA算法对字长有一些基本假设?

更多的信息:

  • 我的加密/解密库基于此处找到的指南。
  • 我的加密密钥长度为 2048 位,但我看到具有不同密钥大小的类似行为。
  • 我已将我的 RSA 加密/解密代码打包成一个 jar 文件。它是在服务器机器上通过 Eclipse 编译的。
  • 安卓手机上使用加密库的程序就是使用上面的库。它也是使用 Eclipse 构建的。
  • 服务器程序是使用 Netbeans 构建的(因为当时这样做更容易)。

其他问题

  • 是否还有其他可用于 Java 的免费公钥加密算法/库?他们是否跨平台工作?人们期望他们有什么样的表现?等等,等等。我已经调查过了,但没有发现太多;也许我正在寻找错误的关键字。

呸!我想就是这样。提前感谢您的帮助!

0 投票
2 回答
2391 浏览

encryption - 公钥加密如何工作?

公钥加密如何工作,使用私钥和公钥/公钥解密/加密?密钥为 256 位是什么意思?它是如何解密的?是否有用于编写加密程序的语言或任何语言都可以?

0 投票
2 回答
1409 浏览

java - 在 Java 中使用对称加密保护磁盘上的私钥

我有一个分布式应用程序,它从中央服务器轮询命令,这些命令的内容由私钥“签名”,公钥与每个远程站点的应用程序一起部署。每个命令都使用私钥签名,并且在执行命令之前验证该签名。

这是我在 java 中生成公钥/私钥对的方法。(我意识到,我们应该做的不仅仅是 1024)

新的要求是,除了发送简单的相对安全的命令外,我们现在还想发送命令来指示我们的软件下载并执行安装程序以自我更新。如果没有正确完成,这有可能会打开一个大洞。“执行更新安装程序”命令将像往常一样被签名,并且还将包括将下载并运行的可执行文件的 md5。因此,命令上的签名必须正确(并且将包括 md5),然后在下载文件上计算出的 md5 需要正确,然后才会执行。这应该可以解决我能想到的大多数攻击向量。还有其他我应该关心的吗?

因此,现在我将注意力集中在保护这些命令源自的服务器上的私钥上。如果获得了该私钥,则游戏结束。我应该如何保护磁盘上的密钥?

我的想法是使用带有密码的对称加密来保护该私钥。

我目前的解决方案如下:

(为清楚起见,删除了例外)

这基本上是随机生成一个盐,使用密码来提供密钥,然后将生成的盐、IV 和密文存储在一个文件中以供解密。

但是,我觉得这里缺少一些东西。就像我还应该以某种方式在密钥上包含某种类型的 MAC,以便我知道我得到了有效的描述?也许只是将 5 或 6 个字节的已知文本放在私钥之前很简单?现在一个错误的密码短语只会导致错误的填充异常,但我读到这可能并非总是如此,一些错误的密码短语会解码并导致垃圾邮件。我觉得我需要警惕这一点。

有人可以让我知道我是否在正确的轨道上并提供一些反馈。重要的是我要尽可能安全..

0 投票
3 回答
1841 浏览

encryption - 是否有基于 ID 的加密的实现?

我一直在阅读有关基于 ID 的加密的信息,但找不到任何实现(论文中的数学对我来说有点多)。有谁知道我可能会去哪里寻找实现?我真的不介意它是什么语言。

0 投票
1 回答
3250 浏览

.net - .NET 中的 RSA 加密,python 中的解密

我正在尝试使用 C# 中的 RSA 算法加密一条短消息,并使用 python 脚本解密该消息。

我想在 C# 端使用 .NET 类,在 python 端使用pycrypto。我已经管理双方使用相同的密钥(这甚至不是微不足道的,因为 .NET 不直接支持标准 PEM/DER 格式)。加密/解密在双方独立工作。

我在 C# 端使用 PKCS#1 填充(将fOAEP参数设置为RSACryptoServiceProvider.Encryptto false),所以我希望在 python 中解密块后,我应该看到某种明文(即我的“消息”和填充字节)

但我看到的都是垃圾:(。

是否有任何我不知道的警告/陷阱?我有点没主意了...

谢谢马丁

示例代码

C# / 加密

Python / 解密

对于密钥传输,我使用的ToXmlString()RSACryptoServiceProvider. 生成的 XML 在 python 中解析,pycrypto -RSA 对象初始化为

其中modulusexponentd和是 .NET结构p的各个字段。(正如我所提到的,我可以在 python 中使用这个密钥加密/解密消息,也可以产生,所以我认为密钥导入工作正常......)qRSAParametersp*qmodulus

0 投票
2 回答
162 浏览

https - 使用 HTTPS 对同一服务器加密 POST 变量 - 每次加密都会不同吗?

我对公钥密码学的理解是,如果使用相同的公钥, alleycat这个词每次都会被加密为相同的加密字符串(这是我对 HTTPS 对任何给定 Web 服务器的工作方式的理解)。

这是否意味着每次我尝试登录“安全”站点时,有人可以拦截我的 HTTPS 标头,并使用相同的“加密”标头以我的身份登录?

0 投票
10 回答
636720 浏览

openssl - 使用 RSA 私钥生成公钥?

我真的不明白这个:

根据https://www.madboa.com/geek/openssl/#key-rsa,您可以从私钥生成公钥。

我最初的想法是它们是成对生成的。

RSA 私钥是否包含总和?还是公钥?

0 投票
1 回答
822 浏览

blackberry - 在 BlackBerry 上使用 RSA 加密时出错

我正在尝试在 Blackberry 上使用其原生 API 的 RSA 加密。我在 Java 中制作了一个公钥/私钥对,并将密钥的模数和指数保存为字符串,这样我就可以从中生成密钥以进行加密和解密。以下代码来自客户端,我得到 aInvalidKeyException并且回溯为空,所以我不知道发生了什么:

这就是我在服务器端生成密钥的方法:

有任何想法吗?

编辑:我尝试通过在服务器上加密和解密来进行简单的测试,当我尝试解密时,我得到了IllegalBlockSizeException这些是我的加密和解密方法(服务器端):

这是我正在尝试的简单测试: