gpt4 book ai didi

java - CipherOutputStream 与 rsa 一起使用

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:31:34 25 4
gpt4 key购买 nike

我正在用 Java 破坏一个非常简单的 RSA 加密。但输出文件似乎是空的。如果我在没有 CipherOutputStream 的情况下尝试,同样的事情会起作用。我可以看到每一个写循环中的循环无效。任何线索...谢谢。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Security;

import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.CipherOutputStream;


public class ExampleRSA {
private static String VIDEO_SOURCE_FILE = "C:/Users/ggoldman/Desktop/Video/inputVideo.dv";
private static String EncryptedFile = "C:/Users/ggoldman/Desktop/Video/encVideo.dv";
private static File decfile = new File("C:/Users/ggoldman/Desktop/Video/decVideo.dv");
private static File incfile = new File(EncryptedFile);
private static File sourceMedia = new File(VIDEO_SOURCE_FILE);


public static void main(String[] args) throws Exception {


KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
Cipher cipher = Cipher.getInstance("RSA");

kpg.initialize(1024);
KeyPair keyPair = kpg.generateKeyPair();
PrivateKey privKey = keyPair.getPrivate();
PublicKey pubKey = keyPair.getPublic();

// Encrypt

cipher.init(Cipher.ENCRYPT_MODE, pubKey);


FileInputStream fis = new FileInputStream(sourceMedia);
FileOutputStream fos = new FileOutputStream(incfile);
CipherOutputStream cos = new CipherOutputStream(fos, cipher);

byte[] block = new byte[32];
int i;
while ((i = fis.read(block)) != -1) {
cos.write(block, 0, i);
}
cos.close();
}

最佳答案

您不能仅使用 RSA 来加密和解密整个文件(至少如果它们只有一个小字符串则不能)。 RSA算法只能加密单个 block ,并且处理整个文件相当慢。

您可以使用 3DES 或 AES 加密文件,然后加密 AES key 使用预期收件人的 RSA 公钥。

关于java - CipherOutputStream 与 rsa 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13284399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com