RSA 공개 키를 사용하여 java.util.properties 객체 (모든 크기가 될 수 있음)를 어떻게 암호화합니까?

StackOverflow https://stackoverflow.com/questions/916061

  •  06-09-2019
  •  | 
  •  

문제

이것은 내가 현재 사용하고있는 코드입니다. Bouncycastle 제공 업체를 사용합니다.

static
{
   Security.addProvider(new BouncyCastleProvider());
}

protected String encrypt(byte[] keyData, byte[] data) throws Exception {
   X509EncodedKeySpec keyspec = new X509EncodedKeySpec(keyData);
   KeyFactory kf = KeyFactory.getInstance("RSA", "BC");
   PublicKey pk = kf.generatePublic(keyspec);
   Cipher rsa =  Cipher.getInstance("RSA/None/OAEPWithSHA1AndMGF1Padding", "BC");
   rsa.init(Cipher.ENCRYPT_MODE, pk);
   byte[] output = rsa.doFinal(data);
   String result = base64EncodeBytes(output);
   return result;
}

나는 현재 A를 얻고있다

 java.lang.ArrayIndexOutOfBoundsException: too much data for RSA block
    at org.bouncycastle.jce.provider.JCERSACipher.engineDoFinal(Unknown Source)
    at javax.crypto.Cipher.doFinal(DashoA13*..)
    at Encryption.encrypt(RSAToken.java:60)
도움이 되었습니까?

해결책

RSA를 사용하여 많은 데이터를 암호화하는 것은 좋은 방법이 아닙니다.

암호화 프로토콜이 취한 접근 방식은 대칭 키를 생성하고이를 사용하여 데이터를 암호화 한 다음 RSA와 대칭 키를 암호화하는 것입니다.

이것이 PGP와 S/Mime의 작동 방식입니다. 또한 여러 독자가 각각의 데이터를 암호화하지 않고 각각의 의도 한 수신자의 대칭 키를 암호화함으로써 여러 독자가 데이터를 해독 할 수있게합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top