프로젝트에 대한 간단한 인증 서버를 구축해야합니다. 서버는 클라이언트가 서로 통신 할 수 있도록 AES 키를 배포해야합니다."javax.crypto.IllegalBlockSizeException을 실행하지 않고 RSA를 사용하여 AES 키를 암호화하는 방법 : 117 바이트보다 길지 않아야합니다."
RSA를 사용하여 AES 키를 암호화 할 때 "javax.crypto.IllegalBlockSizeException : 데이터가 117 바이트보다 길지 않아야합니다."라는 오류가 발생합니다. 내 AES 키의 길이가 128 비트 = 16 바이트이기 때문에 이상하게 보입니다.
이private void createAndSendAES() throws NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, IOException, InvalidKeyException, BadPaddingException {
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128);
this.AESBlackboardKey = keyGen.generateKey(); // My AES key
byte[] raw = AESBlackboardKey.getEncoded();
System.out.println(raw.length); // Prints 16
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, this.clientPubKey);
SealedObject encryptedAESBlackboardKey = new SealedObject(this.AESBlackboardKey, cipher); // ERROR HERE
ObjectOutputStream outO = new ObjectOutputStream(this.clientSocket.getOutputStream());
outO.writeObject(encryptedAESBlackboardKey); //Transmitting the key over socket link
outO.flush();
System.out.println("AS: Blackboard AES key sent.");
}
사람이 16 바이트 AES 키의 암호화 나 오류가 어떻게를 방지 할 수있는 이런 종류의로 실행하게하는 방법을 알고 있나요 : 여기
코드는 오류를 생성하는?미리 감사드립니다.
내가 언급 한 것을 잊어 버린 중요한 세부 사항은 Encode하려고하는 객체 AESBlackboardKey가 속한 클래스입니다 : SecretKey. – user3045293
암호화하려는 것은 키가 아니며 키를 포함하는 직렬화 된 클래스입니다. 그것은 훨씬 더 커질 것입니다. –
고마워, 근본적으로 나는 128 비트 + 객체가 128 비트 키를 가지고있다. 동일한 정보를 더 작은 객체에 저장할 수 있는지 알고 있습니까? – user3045293