RSA 2048 Encryption Decryption - Exception

给你一囗甜甜゛ 提交于 2019-12-03 08:57:07

OK, problem in RSACrypto. When you encrypt file, it creates every time new keypair (in encrypt). Just remove new keypair generation from encrypt, call newKeyPair direcly, when you need it. And that static variables does no good for multi-thread environment.

I'll suggest to throw RSACrypto class, or rewrite it at least. I don't know why you so afraid of using byte[] type and why you need everything be BASE64 encoded. Code will a lot simple without additional encoding/decoding.

Here is working example (without RSACrypto), you can use it as template:

    File file = new File("C:\\temp-ldi\\pubkey.txt");
    FileWriter writer = new FileWriter(file);
    file.createNewFile();
    KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
    generator.initialize(2048, new SecureRandom());
    KeyPair keyPayr = generator.generateKeyPair();
    writer.write(new BASE64Encoder().encode(keyPayr.getPublic().getEncoded()));
    writer.flush();
    writer.close();
    file = new File("C:\\temp-ldi\\privkey.txt");
    writer = new FileWriter(file);
    file.createNewFile();
    writer.write(new BASE64Encoder().encode(keyPayr.getPrivate().getEncoded()));
    writer.flush();
    writer.close();


    File privfile = new File("C:\\temp-ldi\\privkey.txt");
    File pubfile = new File("C:\\temp-ldi\\pubkey.txt");
    FileReader reader = new FileReader(pubfile);

    BufferedReader br = new BufferedReader(reader);
    StringBuilder sb = new StringBuilder();
    String s;
    while ((s = br.readLine()) != null) {
        sb.append(s);
    }
    br.close();
    reader.close();
    PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(new BASE64Decoder().decodeBuffer(sb.toString())));
    Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
    cipher.init(Cipher.ENCRYPT_MODE, publicKey);
    String encryptedText = new BASE64Encoder().encode(cipher.doFinal("PLAIN TEXT".getBytes("UTF-8")));
    System.out.println("encrypted: " + encryptedText);
    reader = new FileReader(privfile);
    br = new BufferedReader(reader);
    sb = new StringBuilder();
    while ((s = br.readLine()) != null) {
        sb.append(s);
    }
    br.close();
    reader.close();
    PrivateKey privateKey =  KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(new BASE64Decoder().decodeBuffer(sb.toString())));
    cipher.init(Cipher.DECRYPT_MODE, privateKey);
    System.out.println( new String(cipher.doFinal (new BASE64Decoder().decodeBuffer(encryptedText))));
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!