首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用私钥加密5-10MB文件,使用公钥解密

使用私钥加密5-10MB文件,使用公钥解密
EN

Stack Overflow用户
提问于 2016-12-21 16:26:03
回答 1查看 482关注 0票数 2

我正在尝试通过RSA使用私钥加密文件,然后使用Java中的公钥对其进行解密。我非常清楚,这与RSA通常与私钥/公钥对一起使用的用例相反。

我的目标是获取一个文件,在一个系统上使用私钥对其进行加密,然后在另一个系统上使用公钥对其进行解密。我计划分发公钥,这样任何人都可以读取该文件。我试图阻止的是任何人都可以创建该文件。

我已经找到了这些C头函数,并且它们是用PHP实现的,所以我知道我尝试做的事情是可能的

代码语言:javascript
复制
 int RSA_public_encrypt(int flen, unsigned char *from,
    unsigned char *to, RSA *rsa, int padding);
 int RSA_private_decrypt(int flen, unsigned char *from,
    unsigned char *to, RSA *rsa, int padding);
 int RSA_private_encrypt(int flen, unsigned char *from,
    unsigned char *to, RSA *rsa,int padding);
 int RSA_public_decrypt(int flen, unsigned char *from, 
    unsigned char *to, RSA *rsa,int padding);

如何在Java中实现相同的行为?我一直在谷歌上搜索,但也许我只是用错了词。当我试图做相反的事情时,所有的东西都会告诉我如何用public加密,用private解密。

我要加密的文件大小从5-10MB不等。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2016-12-21 17:28:56

如果您想识别拥有私钥的人,并因此拥有文件,我猜您正在寻找的过程是“数字签名”(而不是加密),如comments @EJP

使用像SHA-256这样的散列算法对文件进行

  1. Digest。使用RSA私钥创建"hash"
  2. Sign哈希的几个字节的摘要。这称为将文件和签名发送给第三方。他们可以使用公钥验证签名。如果签名匹配,则可以确保邮件发件人的身份,且该身份未被

更改

在这种情况下,文件不是加密的,而是经过散列和签名的。

如果您需要加密以隐藏内容,则不能使用RSA,因为消息大小受密钥长度的限制。所以10mb太大了。在这种情况下,我建议使用像AES这样的en加密算法来加密内容。

第三方将需要AES解密密钥。在此之前生成它,或者使用RSASA-OAEP填充使用第三方的RSA公钥加密AES密钥(根据@Maarten Bodewes提供的链接)

生成数字签名

代码语言:javascript
复制
Signature sig = Signature.getInstance("SHA256withRSA"); 
sig.initSign(privateKey);
sig.update (data)
byte[] signature = sig.sign();

验证签名

代码语言:javascript
复制
Signature sig = Signature.getInstance("SHA256withRSA"); 
sig.initVerify(publicKey);
sig.update(data);  
boolean verifies = sig.verify(signature);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41258223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档