2016-02-10 5 views
2

Вид нового для вещи JWE Decryption. У меня есть сервер, который выполняет JWE и отправляет его клиенту на основе ключа, который совместно используется сервером и клиентом.Ошибка дешифрования JWE

Я использую Jose4j для дешифрования и я получаю эту ошибку

java.lang.NullPointerException: Открытый текст полезной нагрузки для JWE не была установлена.

Я использую пример кода, как показано в этой связи, приемник часть

https://bitbucket.org/b_c/jose4j/wiki/JWE%20Examples

У меня нет какой-либо понимание на сервере я просто пишу клиента. Я смущен, если сам paylaod не подходит или эта инфраструктура работает, пытаясь расшифровать.

Любых указателей для отладки вопроса ценятся

С уважением, Аравинда

ответ

1

Это отдельное исключение только выброшено из метода getCompactSerialization(), когда нет полезной нагрузки набора - getCompactSerialization() последнего шага по отправке/шифрованию чтобы создать JWE. Если вы расшифровываете, вы не должны называть это. Может быть, у вас случайный звонок? В противном случае код, используемый вами, а также пример необработанного значения JWE может помочь troubleshot (и ключи, если это всего лишь тест, и вы можете поделиться им).

+0

Добавлена ​​полезная нагрузка, ключ и новая ошибка, которую я получаю. Спасибо еще раз за помощь. –

+0

Не беспокойтесь .. Большое спасибо .. он работал как шарм .. добавив код выше, чтобы кто-то еще мог его использовать .. –

0

JWE требуется 2 уровня дешифрования, прежде чем получать текстовую полезную нагрузку.

Итак, сначала для JWE для JWS. , затем от JWS до JWT после проверки подписи. ниже код сделает это.

// That other party, the receiver, can then use JsonWebEncryption to decrypt the message. 
     JsonWebEncryption receiverJwe = new JsonWebEncryption(); 

     // Set the compact serialization on new Json Web Encryption object 
     //This is the received payload JWE payload 
     receiverJwe.setCompactSerialization(result.toString()); 


     // Symmetric encryption, like we are doing here, requires that both parties have the same key. 
     // The key will have had to have been securely exchanged out-of-band somehow. 
     receiverJwe.setKey(secretKeySpec); 

     // Set the "alg" header, which indicates the key management mode for this JWE. 
     // In this example we are using the direct key management mode, which means 
     // the given key will be used directly as the content encryption key. 
     //receiverJwe.setAlgorithmHeaderValue(KeyManagementAlgorithmIdentifiers.DIRECT); 

     //receiverJwe.setEncryptionMethodHeaderParameter(ContentEncryptionAlgorithmIdentifiers.AES_128_CBC_HMAC_SHA_256); 

     // Get the message that was encrypted in the JWE. This step performs the actual decryption steps. 
     String jwsPayload = receiverJwe.getPlaintextString(); 

     // And do whatever you need to do with the clear text message. 
     System.out.println("plaintext: " + jwsPayload); 

     // Create a new JsonWebSignature object 
     JsonWebSignature jws = new JsonWebSignature(); 

     jws.setCompactSerialization(jwsPayload); 

     jws.setKey(secretKeySpec); 

     boolean signatureVerified = jws.verifySignature(); 

     // Do something useful with the result of signature verification 
     System.out.println("JWS Signature is valid: " + signatureVerified); 

     // Get the payload, or signed content, from the JWS 
     String payload = jws.getPayload(); 

     // Do something useful with the content 
     System.out.println("JWS payload: " + payload);