문제

"rsa/ecb/pkcs1padding"으로 암호화 된 바이트 []에 포함 된 메시지가 있습니다. 그것을 해독하기 위해 나는 암호 c를 만들고 그것을 시작합니다.

c = Cipher.getInstance("RSA/ECB/PKCS1Padding");

지금까지 나는 작은 메시지 만 사용하여 Dofinal () 메소드, 해독 된 바이트로 바이트 []를 반환합니다.

c.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptetBytes = c.doFinal(encryptedBytes);

그러나이 경우 데이터는 더 큽니다 (약 500 바이트). Dofinal ()-메드는 예외를 던졌습니다 (javax.crypto.ilegalblocksizeexception : 데이터는 128 바이트를 초과하지 않아야합니다). 사용해야 할 것 같아요 업데이트()- 방법이지만 제대로 작동하는 방법을 알 수 없습니다. 이게 어떻게 끝났어?

도움이 되었습니까?

해결책

Key Transport를 사용하는 것에 대해 RSA 암호화를 사용하는 것은 남용이라고 생각합니다.

대칭 암호를위한 새 키를 생성하고 벌크 데이터를 암호화하십시오. 그런 다음 키를 RSA로 암호화하십시오. 비대칭 암호화 된 컨텐츠 암호화 키와 함께 대칭 적으로 암호화 된 암호 텍스트를 수신자에게 보내십시오.

다른 팁

RSA를 사용하면 키 길이에서 크기가 크기가있는 블록을 암호화/해독 할 수 있습니다. 키보다 긴 데이터를 가지고 있다면 하나의 배열로 병합되어 키 크기가있는 청크로 분할해야합니다 (128 바이트는 패딩이없는 1024 키를 제안합니다. 가능한지 확실하지 않습니다). Update ()를 사용하는 것은 여기에 해당되지 않습니다.

간단히 말해서이 배열이 어떻게 만들어 졌는지 알아야합니다.

일반적으로 RSA는 시간이 많이 걸리기 때문에 많은 양의 데이터를 암호화하는 데 사용해서는 안됩니다. AES처럼 키를 대칭 암호로 암호화하는 데 사용해야합니다.

여기를 참조하십시오.https://www.owasp.org/index.php/digital_signature_implementation_in_java

Erickson이 말했듯이

암호화해야 할 단계는 다음과 같습니다.

  1. RSA 키 쌍 생성 (또는 키 스토어에서 공개 키 검색)
  2. 대칭 키 (AES) 생성
  3. AES 키로 데이터를 암호화합니다
  4. 공개 RSA 키로 AES 키를 암호화합니다
  5. 암호화 된 AES 키 및 AES 암호화 된 데이터를 저장 (또는 개인 키를 가진 사람에게 보내기)

해독하려면 :

  1. 암호화에 사용되는 키 쌍과 관련된 개인 키 얻기
  2. 개인 키가 포함 된 AES 키를 해독합니다
  3. AES 키가있는 해독 데이터
  4. 데이터를 사용합니다
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top